I did not understand the error which is called 'Error using symengine: Array sizes must match.' What should i do?
Show older comments
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 Comments
Sargondjani
on 16 Jan 2021
Edited: Sargondjani
on 16 Jan 2021
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
on 16 Jan 2021
Star Strider
on 16 Jan 2021
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
on 17 Jan 2021
Star Strider
on 17 Jan 2021
My pleasure!
If I can understand what you are doing, I would write a specific solution (and post it as an Answer).
Accepted Answer
More Answers (0)
Categories
Find more on Conversion Between Symbolic and Numeric in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!