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

2024年11月29日 11:46
有1个网友回答
网友(1):

使用匿名函数句柄就可以了
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和对应的优化结果
然后画图就可以了