急,急,急。查阅了多种资料,不知道这段程序怎么改?
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
请问高手该怎么修改啊?非常谢谢!!! 直接运行报错如下:
??? 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)就可以。 多谢高手,按照你的方法解决了。太感谢了!!!
页:
[1]