声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1431|回复: 0

[编程技巧] 莫名其妙的问题

[复制链接]
发表于 2007-5-22 21:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 11:28 , Processed in 0.062458 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表