具体关于这些参数的定义应该在程序中都有定义的,你的程序我没看见,因此不能给出你准确的答案!以下理解仅供参考:
iterations:
4
迭代次数为4次
funcCount:
12
调用函数为12个或者别的意思吧
lssteplength:
1
是否设定步长,若为1则表示设定
stepsize:
37569e-008
步长为这个数字
algorithm:
'medium-scale:
SQP,
Quasi-Newton,
line-search'
所用到的算法
firstorderopt:
35086e-009
计算中的第一个迭代值
constrviolation:
0
message:
[1x788
char]
程序中的字符数总量?我也不清楚
希望有所帮助!
使用匿名函数句柄就可以了
fmincon 需要的函数fun只有一个输入参数 fun(x)
而你的函数需要多一个能改变的变量 那么形式变成 myfun(p,x)
p就是你要传递的参数,x还是原来的输入
当然首先,你得写个m文件,假设为myfunm,其内容大致如下
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和对应的优化结果
然后画图就可以了
那就这样组织文件mainm:
=====================
function man
x = fmincon
end
function f = fx()
end
=====================
这样把fx作为一个内部函数,就可以了,但代价是主脚本也要写成函数了。
1、是不是局部最优可以通过退出代码exitflag辅助判断。至于说全局最优,没有哪种优化方法能够保证,即使用全局优化工具箱中的遗传算法之类的,也只是增加得到全局最优解的机会。
2、那个警告没影响,可以忽略,不想看到的话,也可以关闭或通过指定算法来避免。
3、受字数限制,代码只能贴,但这样我没法测试,只能给你提这些建议。必要时,可以考虑通过网盘或博客上传代码。或者私信也可以。
程序的问题很多:
1、如楼上所说,n并不是一个函数句柄或函数名。这是个基本错误。
2、不要乱定义符号变量。尤其在nonlcon中,定义符号变量导致函数输入参数全被覆盖了。
3、需要搞清楚:未知数有两个——m和n,尽管你想优化n,但不能抛开m不管。
4、int是用于符号积分的,优化要的是数值积分。
楼上指出了一个问题,但并没有给出解决的方法。
以下是我编写的代码(取两组不同的初值,有两个局部最优点):
function mainmn=fmincon(@(mn)(mn(2)),[1 2],[],[],[],[],[],[],@nonlcon)
mn=fmincon(@(mn)(mn(2)),[-1 -2],[],[],[],[],[],[],@nonlcon)
function [c,ceq]=nonlcon(mn)
c=quad(@(x)x^7,mn(1),mn(2))-2;
ceq=quad(@(x)x^3,mn(1),mn(2))-1;
得到优化结果为:
mn =00443 14142
mn =
-00434 -14142
mn的值中,前一个为m,后一个为n。综合起来的结果是n=-14142。
上述结果未考虑其它约束,例如,如果要求m<=n或者n>=0之类的,结果就只能是n=14142。
以上就是关于matlab程序fmincon输出参数解释全部的内容,包括:matlab程序fmincon输出参数解释、我利用MATLAB中的fmincon函数求非线性规划求电机转矩的最大值、matlab 中fmincon怎样调用当前文件中的函数fun等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)