关于变系数的inline函数问题
本人遇到一个优化问题,想使用MATLAB 的优化函数进行计算,在编写FUN函数时遇到了困难,希望高手给点建议:优化函数min F=a(1)*X(1)*X(3)+a(2)*X(1)*X(2)+a(3)*X(2)*X(3)
s.t. x>0;
主要问题是,系数矩阵a(i)的值是由另一个子程序算出的,是可变的。请问高手的是怎么在编写函数时,能使用a(i),也就是说能够把a(i)的值传递给函数F。
希望大家给点意见,这个问题解决不了,就不不好写论文啊,高手们请给点意见!!!
[ 本帖最后由 eight 于 2008-3-25 19:55 编辑 ] help inline, 很明显参数是可以传递的(包括作循环时)。
或者,也可以编成函数(多个子函数组成),传递应该也没有什么问题。
另:问问题时,最好能贴出具体问题,指出你出错的地方------当然,可以适当简化原问题,再拿来讨论。
重新写下问题
首先谢谢楼上的同志!我把自己的程序先写下!
1 主程序
主要是算出a,bb,w,wh的值,然后调用youhua.m来进行优化。
2.youhua.m
function =youhua(a,bb,w,wh)
x0=; 初值
fun='(a(1)-bb(1)*x(5))^2+(x(1)-bb(2)*x(5))^2+(x(2)-bb(3)*x(5))^2+(x(3)-bb(4)*x(5))^2+(x(4)-wh)^2';
b=0;
A=[];
Aeq=[];
beq=[];
lb=;
ub=[];
=fmincon(fun,x0,A,b,Aeq,beq,lb,ub);
y=;
f=fv;
运行的错误是:
Error using ==> fmincon
FMINCON cannot continue because user supplied objective function
failed with the following error:
Error using ==> inlineeval
Error in inline expression ==> (a(1)-bb(1)*x(5))^2+(x(1)-bb(2)*x(5))^2+(x(2)-bb(3)*x(5))^2+(x(3)-bb(4)*x(5))^2+(x(4)-wh)^2
??? Undefined function or variable 'a'.
Error in ==> E:\program\train\nonliner hunting\youhua.m
On line 10==> =fmincon(fun,x0,A,b,Aeq,beq,lb,ub);
希望高手给点意见和建议! 自己动手,参考版面成功的示例,然后试试,而不是一味等别人回答 问题最好也用公式贴一下,方便大家直接理解问题.
我看了一下代码,大概知道你的问题出在哪里:只需help fmincon, 注意参数的传递即可。 谢谢各位的热心帮助,这个程序我已经调试通了,使用全局变量来传递参数的值,不过在运行后会出现这样的文字:
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In C:\MATLAB6p5\toolbox\optim\fmincon.m at line 213
In G:\nonliner hunting\main.m at line 158
不知道对结果有没有影响。如果没有影响,我的优化程序是嵌套在循环中的,每运行一次的话都会出现这样的文字,很麻烦,请问有没有什么命令可以消除这些文字,不让它们显示呢?
有人推荐我使用一下的语句:
ff=optimset;
ff.Display='off';
=fmincon('youhua',x0,A,b,Aeq,beq,lb,ub,[],ff); %优化函数
不过就会出现上面的文字,请高手指教!!! 具体怎么调试的啊??能否把这一段程序贴一下,我也学习一下,麻烦你了
页:
[1]