func=(x2s-x1s^2)^2+(1-x1s)^2;
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));
val_temp_end=vpa(subs(func,x1s,x1));
val_end=vpa(subs(val_temp_end,x2s,x2));
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?
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));
with the appropriate arguments assigned.
I cannot go further, since I cannot understand what your code is doing.
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
Find the treasures in MATLAB Central and discover how the community can help you!