我利用MATLAB中的fmincon函数求非线性规划求电机转矩的最大值 10

但无论我的转速变为何值,所得的最优解都不变,想了很久改变了初值等都好像没有用,自己感觉程序也是对的,大家看一下我的程序是不是哪里错了?z=[1;2;3;110];fori... 但无论我的转速变为何值,所得的最优解都不变,想了很久改变了初值等都好像没有用,自己感觉程序也是对的,大家看一下我的程序是不是哪里错了?
z=[1;2;3;110];
for i=1:1:4
we=z(i)

%%%%%%
x0=[-219,339];%在极限点时的dq电流值

[x,fev]=fmincon(@Tc,x0,[],[],[],[],[-285*sqrt(2),0],[0,285*sqrt(2)],@(x) yueshutiaojian(x,we))

end
%%%%%%%%
function [g,ceq]=yueshutiaojian(x,we)

g=[(0.33e-3*x(2))^2-(0.13e-3*x(1)+0.062)^2+(185/200)^2;x(1)^2+x(2)^2-2*285^2];
ceq=[];
end

%%%%%%%%%%%%%%
function f = Tc( x )
f=-6*(0.062+(0.13e-3-0.33e-3)*x(1))*x(2);

end
其中we就是转速,但不论转速给多少最优解算出来的转矩都不变,这是为什么?
展开
 我来答
因为凡0al
2016-07-14 · TA获得超过175个赞
知道小有建树答主
回答量:2480
采纳率:0%
帮助的人:460万
展开全部
使用匿名函数句柄就可以了
fmincon 需要的函数fun只有一个输入参数 fun(x)

而你的函数需要多一个能改变的变量 那么形式变成 myfun(p,x)
p就是你要传递的参数,x还是原来的输入

当然首先,你得写个m文件,假设为myfun.m,其内容大致如下
function [out]=myfun,(p,x)
...........
end
就是根据参数p和输入x,求的输出,当然名字可以自己取,然后就是主程序了

for p=p0:pn %参数p的取值
[x,fval]=fmincon(@(x) myfun(p,x),Bt0,[],[],[],[],lb,ub,@constr);

.......
end

其中关键就是@(x) myfun(p,x)
这会返回一个匿名的函数句柄,会使用当时的p值代入myfun
得到一个只有一个输入x的函数,这样就能把额外的参数传递给需要优化的函数
如果你的函数有等多的参数例如
myfun(a,b,c,x)
a=..
b=..
c=..
同样用@(x) myfun(a,b,c,x)把a,b,c参数的值传给要优化的函数

在以上的基础上,加几句,存储每次的参数p和对应的优化结果
然后画图就可以了
追问
这个我知道呢,你看一下我的程序就是这样做的啊,可是如果求最小值就没有问题,一旦求转矩最大值,运行出来的结果不变
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式