求 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 循环