matlab非线性规划fmincon函数中目标函数参数传递问题,急求!

fmincon函数的标准形式维[x,fval]=fmincon('fun',Bt0,[],[],[],[],lb,ub,@constr),然后fun是目标函数,Bt0为初值点,优化函数相当于讲Bt0带入fun,逐渐逼近求局部最优解。现在小弟遇到的情况是这样的,需要将fun中(fun是一个比较复杂的式子,需要用到循环,不能直接写出来,只能是写成M文件形式)的一个原来固定的参数设成是变量,并以这个变量为横坐标,以变量所对应的局部最优解为纵坐标画图,求问,怎样将变量(写在外层循环)实现传递?跪谢!!!!!!!

使用匿名函数句柄就可以了
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和对应的优化结果
然后画图就可以了
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-07

这种情况涉及到给目标函数传递附加参数的问题,一般有三种做法:

1、使用匿名函数。但既然你的函数比较复杂,这种方法应该不适用。

2、使用嵌套函数,也就是把目标函数写成主函数的一个嵌套函数,这样主函数里面随着循环变化的变量就可以直接在嵌套函数里面使用。推荐使用这种方法。

3、使用传递附加参数的方法。例如,把目标函数定义为

function y = objfun(x, p1, p2...)

调用fmincon的时候,用

fmincon(@objfun,x0,A,b,Ae,be,lb,ub,@nonlcon,opt,p1,p2...)

其中p1、p2即为要传递的参数,前面的各参数如果没有,可以写空矩阵([]),但不能缺,必须用来占位。

matlab非线性规划fmincon函数中目标函数参数传递问题,急求!
3、使用传递附加参数的方法。例如,把目标函数定义为 function y = objfun(x, p1, p2...)调用fmincon的时候,用 fmincon(@objfun,x0,A,b,Ae,be,lb,ub,@nonlcon,opt,p1,p2...)其中p1、p2即为要传递的参数,前面的各参数如果没有,可以写空矩阵([]),但不能缺,必须用来占位。

matlab非线性规划fmincon函数中目标函数参数传递问题,急求!
fmincon 需要的函数fun只有一个输入参数 fun(x)而你的函数需要多一个能改变的变量 那么形式变成 myfun(p,x)p就是你要传递的参数,x还是原来的输入 当然首先,你得写个m文件,假设为myfun.m,其内容大致如下 function [out]=myfun,(p,x)...end 就是根据参数p和输入x,求的输出,当然名字可以自...

matlab非线性规划fmincon函数中目标函数参数传递问题,怎么解?
(1)检查线性约束 通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。i)定义一个目标函数是常值0的线性规划问题、f = zeros(size(x0)); % assumes x0 is the initial point ii)求解这个线性规划问题看是否有一个可行点。xnew = linprog(f,A,b,Aeq,beq,lb,ub);iii)如果有...

约束非线性规划工具-fmincon(matlab)的使用
即可调用fmincon函数进行约束非线性规划,其中fun为目标函数:例如:x0为初始值:A和b为线性不等式约束条件的参数,Aeq和beq为线性不等式约束条件的参数(没有使用过,形式如下):lb为x0中每一维的下限,ub位每一维的上限,形式如下:nonlcon(Nonlinear constraints)为非线性不等式约束,使用方法如下:例...

求matlab中fmincon函数格式的中文解释?谢谢!!
fmincon是Matlab优化工具箱(Optimization Toolbox)中的一个命令,用来求有限制条件(约束)的非线性目标函数的极小化问题。x = fmincon(fun,x0,A,b) ,用于求解目标函数为非线性,约束条件为线性不等式的规划问题。fun是目标函数,x0是求解过程中的初始值,A为线性不等式约束的左端系数矩阵,b为线性...

"matlab"优化工具箱中fmincon命令中函数fun要求有参量传递怎么办...
用 y = fmincon(@f12,x0,A,b,[],[],lb,[],a,b);就可以了。即,将参数放在[x,fopt,flag,c]=fmincon(F,x0,A,B,Aeq,Beq,xm,xM,CF,OPT,p1,p2);中的p1、p2处就可以了

matlab 向凸优化非线性约束函数传递参数 fmincon
Ceq = …计算x处的非线性等式约束 的函数值。lambda是Lagrange乘子,它体现哪一个约束有效。output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessiab值。注意:1. fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 Gead...

matlab中的fmincon函数的用法!急
一、fmincon函数基本介绍 求解问题的标准型为 min F(X)s.t AX <= b AeqX = beq G(x) <= 0 Ceq(X) = 0 VLB <= X <= VUB 其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划,二次规划中相同,用Matlab求解上述问题,基本步骤分为三步:1. ...

matlab 求解非线性规划 代码
matlab 求解非线性规划可以用fmincon函数来求解。求解过程如下:第一步、自定义目标函数,fmin(x)fmin=@(x) 0.007395768*x(1)^2 + 0.002729374*x(2)^2 + 0.006876885*x(1)*x(2)第二步、确定初始条件,即x0=[0,0]第三步、确定等式条件,即Aeq=[1,1],beq=[1]第四步、确定x的上...

matlab 函数 fmincon求解非线性规划,悬赏30满意有追加~
关于信任域那个,见matlab帮助 use 'trust-region-reflective' when applicable. Your problem must have: objective function includes gradient,only bounds, or only linear equality constraints (but not both).在matlab help的Choosing a Solver部分。有推荐使用。你后面的程序好似也有不少问题。

相似回答