I did not understand the error which is called 'Error using symengine: Array sizes must match.' What should i do?
이전 댓글 표시
x1=0.2232585;
x2=0.2232585;
iteration=0;
while true
iteration=iteration+1;
syms x1s x2s t
func=(x2s-x1s^2)^2+(1-x1s)^2;
dif_x1=diff(func,x1s);
dif_x2=diff(func,x2s);
grad_x1_temp=vpa(subs(dif_x1,x1));
grad_x1=vpa(subs(grad_x1_temp,x2));
grad_x2_temp=vpa(subs(dif_x2,x2));
grad_x2=vpa(subs(grad_x2_temp,x1));
tx1_temp=subs(dif_x1,x1-grad_x1*t);
tx1=subs(tx1_temp,x2s,x2-grad_x2*t);
tx2_temp=subs(dif_x2,x2s,x2-grad_x2*t);
tx2=subs(tx2_temp,x1s,x1-grad_x1*t);
eqn=tx1*grad_x1+tx2*grad_x2;
a=solve(eqn,t,'Real',true);
val_temp=vpa(subs(func,x1s,x1));
val=vpa(subs(val_temp,x2s,x2));
x1=x1-grad_x1*a;
x2=x2-grad_x2*a;
val_temp_end=vpa(subs(func,x1s,x1));
val_end=vpa(subs(val_temp_end,x2s,x2));
if(val_end>val)
break;
end
end
iteration
Error using symengine
Array sizes must match.
Error in sym/privBinaryOp (line 1013)
Csym = mupadmex(op,args{1}.s,
args{2}.s, varargin{:});
Error in - (line 7)
X = privBinaryOp(A, B,
'symobj::zipWithImplicitExpansion',
'_subtract');
Error in THE5 (line 26)
tx1_temp=subs(dif_x1,x1-grad_x1*t);
I keep getting these errors anyone has a clue?
댓글 수: 5
Sargondjani
2021년 1월 16일
편집: Sargondjani
2021년 1월 16일
My guess in this line:
tx1_temp=subs(dif_x1,x1-grad_x1*t);
it seems the two arguments should be the same size (could it be, for example, that dif_x1 is a vector, and x1-grad_xt*t is a scalar?)
Mert Picakci
2021년 1월 16일
Star Strider
2021년 1월 16일
One of the problems are the subs calls, since it is not always obvious to me what substitutions you are making.
One potential solution could be creating symbolic functions (introduced in R2012a), and then substituting the appropriate values as arguments to the functions. (That is how I would do it.)
For example, start with:
func(x2s,x1s)=(x2s-x1s^2)^2+(1-x1s)^2;
dif_x1=diff(func,x1s);
dif_x2=diff(func,x2s);
and being certain in the rest of the code that the appropriate values are assigned to the appropriate function arguments. That is likely to produce the results you want, once you get the subsequent arguments correct.
The next line would then be:
grad_x1_temp(X)=vpa(dif_x1(x1,x1)); % Needs Two Arguments
with the appropriate arguments assigned.
I cannot go further, since I cannot understand what your code is doing.
Mert Picakci
2021년 1월 17일
Star Strider
2021년 1월 17일
My pleasure!
If I can understand what you are doing, I would write a specific solution (and post it as an Answer).
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!