I did not understand the error which is called 'Error using symengine: Array sizes must match.' What should i do?

19 ビュー (過去 30 日間)
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 件のコメント
Mert Picakci
Mert Picakci 2021 年 1 月 17 日
Thank you, it seems your way of doing it is very efficient and less likely to get error. I’ll try defining the syms function and see wheter there is a problem or not.
Star Strider
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).

サインインしてコメントする。

採用された回答

Deepak Meena
Deepak Meena 2021 年 1 月 21 日
Hi Mert,
The Probelm arises in the 3rd iteration. In the 3rd Iteration x1 is size of 3x1 symfun and grad_x1 is size of 9x1 .
so the line
tx1_temp=subs(dif_x1,x1-grad_x1*t);
is throwing error as MATLAB is not able to resolve "x1- grad_x1*t".
So make sure both x1 and grad_x1 are of same size or "x1-grad_x1*t" should make sense like we can subtract 2x2 matrix from 1x2 like this :
syms x1 x2
p = [x1,x2;x2,x1];
t = [x1,x1] - p;
Thanks,
Deepak

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLinear Algebra についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by