Rearrange Variables in an equation

246 visualizaciones (últimos 30 días)
Mech Princess
Mech Princess el 20 de Jul. de 2012
Comentada: Star Strider el 29 de En. de 2023
I declare the variables using sym or syms then i have an equation a+2*b=1; I want MATLAB to give me a=1-2*b; or alternatively b=(1-a)/2;
is there a way to do this?
Also, There maybe more than 2 variables Equation maybe linear or non-linear Equation can change at each iteration. Thanks

Respuesta aceptada

Star Strider
Star Strider el 20 de Jul. de 2012
Editada: Star Strider el 20 de Jul. de 2012
This is one way:
syms a b
eqn = (a + 2*b == 1)
v_a = solve(eqn, a)
v_b = solve(eqn, b)
producing this output:
v_a =
1 - 2*b
v_b =
1/2 - a/2
I suggest you avoid expressions such as:
[a b] = solve(eqn, a, b)
even though it is valid syntax, because instead of solving the equation for ‘a’ and then solving it independently for ‘b’, it solves it for ‘a’ first and then solves the resulting equation for ‘b’ in terms of an introduced variable ‘z’. That produces a multi-line warning in red (that I will not reproduce here), and the results:
a =
1 - 2*z
b =
z
that does not make sense to me. I consider this to be a bug, and I would prefer it to be an option rather than the default, but that is not my decision.
  3 comentarios
Mech Princess
Mech Princess el 20 de Jul. de 2012
Sorry, one more issue regarding this. My variables alpha1, alpha2 and alpha3 are defined by sym and not syms. I need to do this as the no of alpha's is determined by the input data size. This case 3.
data = [-1 0 1;-1 +1 -1]'; alpha = sym('alpha',[1 3]); %output "[ alpha1, alpha2, alpha3]" st = 'alpha*data(:,2)=0' %output "alpha2 - alpha1 - alpha3 = 0" but I dont get this. instead, its something else v_2 = solve(st,alpha(1)) %doesnt work because the previous line is wrong
Do you have any suggestions for this? Thanks
Star Strider
Star Strider el 20 de Jul. de 2012
This:
data = [-1 0 1;-1 +1 -1]';
alpha = sym('alpha',[1 3]);
advct = alpha * data(:,2)
v_2 = solve(advct == 0, alpha(1))
gives me these:
advct =
alpha2 - alpha1 - alpha3
v_2 =
alpha2 - alpha3
Is that the result you were hoping for?

Iniciar sesión para comentar.

Más respuestas (2)

Nitesh khanna
Nitesh khanna el 1 de Ag. de 2020
how to replace the variables a, b, c, d by variables w, x, y, z for; in eqn
eqn=a+b+c+d==9;
will this command work
eqn=subs(eqn, [a,b,c,d],[w,x,y,z])

Bill Tubbs
Bill Tubbs el 29 de En. de 2023
As explained here by Paul, you can use the isolate function for this:
>> syms a b
>> eqn1 = b == (1 - a) / 2;
>> isolate(eqn1, a)
ans =
a == 1 - 2*b
>> isolate(eqn1, b)
ans =
b == 0.5000 - 0.5000*a
  2 comentarios
Walter Roberson
Walter Roberson el 29 de En. de 2023
.. Though mind you, that was not an option back in 2012 !
Star Strider
Star Strider el 29 de En. de 2023
Definitely!
The isolate function was introduced in R2017a, 5 years after this thread.
I’ve used isolate extensively in my Answers since it was introduced, when its use was appropriate.

Iniciar sesión para comentar.

Community Treasure Hunt

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

Start Hunting!

Translated by