Why the results are different when use different letters?

I solve same equations in different ketters and got fifferent results as follow:
But rs=a, xs=b, rp=c and xp=d. the equations are same!
>> syms rs xs rp xp;
>> [rp,xp]=solve(rs*rp^2+rs*xp^2==xp^2*rp,xs*rp^2+xs*xp^2==rp^2*xp)
rp =
-(rp*(rs*(rp - rs))^(1/2))/(rp - rs)
(rp*(rs*(rp - rs))^(1/2))/(rp - rs)
xp =
-(rs*(rp - rs))^(1/2)
(rs*(rp - rs))^(1/2)
-------------------------------------------------------------
>> syms a b c d
>> [c,d]=solve(a*c^2+a*d^2==c^2*d,b*c^2+b*d^2==d^2*c)
c =
0
(a^2 + b^2)/b
d =
0
(a^2 + b^2)/a

 Accepted Answer

You are not specifying which two variables to solve for, so solve() is using symvar() and picking the first two variables.
With the different names involved, the relative order of the variables in symvar() is different than you are expecting.

3 Comments

Thank you for your reminding!
But how can I specify the variables to solve for? Or can I specify the order of the variables?
syms rs xs rp xp
[rp,xp]=solve(rs*rp^2+rs*xp^2==rp^2*xp, xs*rp^2+xs*xp^2==xp^2*rp, [rp, xp])
rp = 
xp = 
thank you very much for your kindly help. I learned more about the symbolic operations now.

Sign in to comment.

More Answers (2)

They are not the same.
syms rs xs rp xp;
[rp,xp] = solve( rs*rp^2+rs*xp^2 == xp^2*rp, xs*rp^2+xs*xp^2 == rp^2*xp)
syms a b c d
[c,d] = solve( a*c^2+a*d^2 == c^2*d, b*c^2+b*d^2 == d^2*c)
The RHS of both equations don't correspond. You'll have to decide which one is which.
Jan
Jan on 11 Mar 2022
Edited: Jan on 11 Mar 2022
Because the equations are different:
syms rs xs rp xp
syms a b c d
[rp, xp] = solve(rs * rp^2 + rs * xp^2 == xp^2 * rp, xs * rp^2 + xs * xp^2 == rp^2 * xp)
[c, d] = solve(a * c^2 + a * d^2 == c^2 * d, b * c^2 + b * d^2 == d^2 * c)
% ^ ?! ^
You see, the replacement is not performed exactly. The term xp is converted twice to c instead of d.

6 Comments

I corrected it but still not have the same results as follow:
syms a b c d ;
[c, d]=solve( a* c^2 +a*d^2== c^2*d, b* c^2 +b*d^2 ==d^2* c)
c = 
d = 
syms rs xs rp xp;
[rp,xp]=solve(rs*rp^2+rs*xp^2==rp^2*xp, xs*rp^2+xs*xp^2==xp^2*rp)
rp = 
xp = 
The equations are still not the same. Did you see, that I have inserted spaces around the operators? Note the differences between [a b], [a + b] and [a +b] ! Without a space on the right but one on the left, the + is interpreted as unary operator:
syms a b c d;
[a* c^2 +a*d^2== c^2*d, b* c^2 +b*d^2 ==d^2* c]
ans = 
syms rs xs rp xp;
[rs*rp^2+rs*xp^2==rp^2*xp, xs*rp^2+xs*xp^2==xp^2*rp]
ans = 
That is not the key point, Mr. Walter Roberson gave a right answer. But I thank you too!
It is an important point to see, that the equations are not equal and that spaces around operators do matter.
Yes, I'll remember this point.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!