马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
紧急求助:莫名其妙的问题
我刚开始学matlab,写了个迭代算法如下:
syms x1 x2 u
A=[-1 -1;-1 0;0 -1];
B=[-3;-2;-2];
fun=(4-x2)*(x1-3)^2;
a=0.512;
b=2;
%d=[d1;d2];
s=jacobian(fun);
for k=1:2
sx=subs(s,{x1,x2},{a,b});
i=1;
l=1;
for j=1:3
if A(j,:)*[a;b]==B(j,:)
C(i,:)=A(j,:);
F(i,:)=B(j,:);
i=i+1;
else
E(l,:)=A(j,:);
G(l,:)=B(j,:);
l=l+1;
end
end
if i==1
d=-sx;
d=d';
else
i=i-1;
%g=sx*d;
lb=[-1 -1];
ub=[1 1];
D=zeros(size(F));
d=linprog(sx,-C,D,[],[],lb,ub);
end
if abs(sx*d)==eps
break
end
for m=1:l-1
H(m,1)=-(E(m,:)*[a;b]-G(m,:))/(E(m,:)*d);
end
M=sort(H);
clear H;
fun1=inline((4-(b+u*d(2,1)))*((a+u*d(1,1))-3)^2);
v=fminbnd(fun1,0,M(1,1));
a=a+v*d(1,1);
b=b+v*d(2,1);
a
b
d
end
当初始值 a=0.512,b=2 的时候迭代第一次结果是a=1,b=2 ,第二次迭代结果是a=[] ,b=[]
而当初始值 a=1,b=2 的时候迭代第一次结果是a=2,b=1
用断点调了一晚上了,不知道问题出在哪?哪位大虾帮帮忙,万分感谢!
[ 本帖最后由 eight 于 2007-5-22 23:27 编辑 ] |