xhj543240343 发表于 2011-5-10 22:16:16

急,急,急。查阅了多种资料,不知道这段程序怎么改?

digits(8)
c=;
aa=5.4;
bb=-0.3;
for i=1:10
    for j=1:5
      syms a b
      l(j,1)=a*exp(j*b);
      s=jacobian(l(j,1));
      z1=subs(s,'a',aa);
      z2=subs(z1,'b',bb);
      g(j,:)=vpa(z2);
    end
    g;
    for k=1:5
      a0=aa;
      b0=bb;
      la(k,1)=a0*exp(k*b0);
      e(k,1)=c(k,1)-la(k,1);
    end
    e;
    dx=(g'*g)^(-1)*g'*e;
    r=la'*la-2*la'*c;
    for k1=1:5
      ax=aa+0.5*dx(1,1);
      bx=bb+0.5*dx(2,1);
      lb(k1,1)=ax*exp(k1*bx);
    end
    rr=lb'*lb-2*lb'*c;
    for k2=1:5
      aax=aa+dx(1,1);
      bbx=bb+dx(2,1);
      lc(k2,1)=aax*exp(k2*bbx);
    end
    rrr=lc'*lc-2*lc'*c;
   f=0.5+0.25*(r-rrr)/(r-2*rr+rrr)
   a1=aa+f*dx(1,1);
   b1=bb+f*dx(2,1);
   for kk=1:5
       ld(kk,1)=a1*exp(kk*b1);
   end
   rrrr=ld'*ld-2*ld'*c
   aa=a1
   bb=b1
   rb=rrrr-r;
   
   tol=0.0001;
   if rb(1,1)<=tol
      break;
   end
end
disp(a1);
disp(b1);
运行后报错:??? Error using ==> sym.le at 11
Function 'le' is not implemented for MuPAD symbolic objects.
Error in ==> shili at 48
   if rb(1,1)<=tol
请问高手该怎么修改啊?非常谢谢!!!

nwcwww 发表于 2011-5-11 00:17:45

直接运行报错如下:

??? Error using ==> sym.sym>notimplemented at 2621
Function 'le' is not implemented for MuPAD symbolic objects.

Error in ==> sym.sym>sym.le at 834
            notimplemented('le');


先找问题:
因为出错的是'le',含义是less or equal,所以看有没有<=出现。
找到语句if rb(1,1)<=tol,那么可能引起问题的变量就是rb了。

>> class(rb)

ans =

sym

可以看出rb是符号变量。


因为对符号这个概念本身而言,比较所谓的大小是没有意义的,
所以暂时并没有定义关于符号对象的类似判断,
也就是'le' not implemented。


解决起来也很简单,把rb换成数值变量就行了。
比如说把rb=rrrr-r改成rb=double(rrrr-r)就可以。

xhj543240343 发表于 2011-5-11 12:48:02

多谢高手,按照你的方法解决了。太感谢了!!!
页: [1]
查看完整版本: 急,急,急。查阅了多种资料,不知道这段程序怎么改?