当前位置:编程学习 > Matlab >>

求 Frank—Wolfe算法 的MATLAB代码。谢谢。

补充:谢谢您的答案。 说第24行有问题:while(abs(g_f'*(x-X))>e) 这是怎么回事?
答案:X0=input('请输入一个可行域顶点向量:X0=');

e=input('请输入要求的误差:e=');

X=X0;

syms x1 x2 lamida;

f=4*x1^2+(x2-2)^2;

df_dx1=diff(f,x1);

df_dx2=diff(f,x2);

g_f1=subs(df_dx1,{x1,x2},X);

g_f2=subs(df_dx2,{x1,x2},X);

g_f=[double(g_f1);double(g_f2)];

[x,feval]=linprog(g_f,[],[],[],[],[-2;-1],[2;1]);


while(abs(g_f'*(x-X))>e)


f0=subs(f,{x1,x2},X+lamida*(x-X));

f1=inline(char(f0));

[lamida,fval]=fminbnd(f1,0,1);

X=X+lamida*(x-X);

g_f1=subs(df_dx1,{x1,x2},X);

g_f2=subs(df_dx2,{x1,x2},X); 

g_f=[g_f1;g_f2];

g_f=double(g_f);

[x,feval]=linprog(g_f,[],[],[],[],[-2;-1],[2;1]);

clear lamida;

syms lamida;

end

X

subs(f,{x1,x2},X)


执行结果如下:

转自http://hi.zzzyk.com/mvowoo/blog/item/7295d33fd3a89be655e72322.html
其他:g_f1=subs(df_dx1,{x1,x2},X);在matlab中输入也出错啊,X是一个两行一列的,提示为??? Index exceeds matrix dimensions.这是咋回事啊。 

上一个:这个Matlab代码错在哪呢?请教了。
下一个:matlab代码 for 循环

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,