Error in using while loop?

1 次查看(过去 30 天)
Shantanu K
Shantanu K 2013-3-31
Hello, I am using while loop there is error in using it. I am not able to solve this.
x10=2;
x20=-2;
x30=1;
e1=0.00001;
iter=10;
m=2;
z = sym('2*x1 * x1 + x2*x2 + 3*x3*x3');
syms x1 x2 x3 a;
gradz = -[diff(z,x1); diff(z,x2); diff(z,x3)]; % returns a column vector
p=subs(gradz, [x1 x2 x3], [x10 x20 x30]); % evaluate at (0.25, 0.75)
x1a0=x10+a*p(1);
x2a0=x20+a*p(2);
x3a0=x30+a*p(3);
za0=subs(z, [x1 x2 x3], [x1a0 x2a0 x3a0]);
dza0=diff(za0,a);
k=solve(dza0);
x11=vpa(x10+k*p(1),8);
x21=vpa(x20+k*p(2),8);
x31=vpa(x30+k*p(3),8);
cltr1=((x11-x10)/x10);% THIS IS THE CONDITION THAT THIS VALUE SHOULD BE LESS THAN e1 then iterations will stop.
while ((m<iter) && (cltr1>0.001))
m=m+1;
p=subs(gradz, [x1 x2 x3], [x11 x21 x31]);
x1a=x11+p(1)*a;
x2a=x21+p(2)*a;
x3a=x31+p(3)*a;
za1=subs(z, [x1 x2 x3], [x1a x2a x3a]);
dza1=diff(za1,a);
w=solve(dza1);
x12=x11+p(1)*w;
x22=x21+p(2)*w;
x32=x31+p(3)*w;
cltr1=(x11-x10)/x10;
x1k=x11;
x2k=x21;
x3k=x31;
x11=x12;
x21=x22;
x31=x32;
end
display(x12)
display(x22)
display(x32)
Error: ??? Error using ==> sym.sym>notimplemented at 2514 Function 'gt' is not implemented for MuPAD symbolic objects.
Error in ==> sym.sym>sym.gt at 792
notimplemented('gt');
Error in ==> CAUCHY_1 at 28
while ((m<iter) && (cltr1>0.001))

回答(2 个)

Walter Roberson
Walter Roberson 2013-3-31
Your p appears to be a vector, so (abs(p)<e1) is going to return a vector result. You cannot use && with vectors. Change the && to &
  4 个评论
Walter Roberson
Walter Roberson 2013-3-31
I do not see any definition of x32 ?
Your error message references x3k which did not exist in your previous code.
In your previous code, the "while" involved x31, which looks to me as if it might be symbolic involving at least one variable.
Shantanu K
Shantanu K 2013-4-4
Please have look at program again, i have made changes in it.

请先登录,再进行评论。


Ahmed A. Selman
Ahmed A. Selman 2013-4-4
编辑:Ahmed A. Selman 2013-4-4
Please do not use ( less than as < or greater than as > ) when using symbolic math. Instead use:
while (gt(m,iter) && (lt(cltr1,0.001)))
gt (greater than) and lt (less than) are used when logical comparison is needed with objects, rather than matrices.
Also your code fails to calculate the x's at the end of the while loop, the condition is not satisfied. So perhaps you need to re-check your input and/or the criterion you've used.
Regards.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by