# Rearrange Variables in an equation

Asked by Mech Princess on 20 Jul 2012
Latest activity Commented on by Star Strider on 20 Jul 2012

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

## Products

No products are associated with this question.

Answer by Star Strider on 20 Jul 2012
Edited by Star Strider on 20 Jul 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.

Mech Princess on 20 Jul 2012

Ok. got it. There was a small error in the syntax. The following code works. Thank you so much

syms a b eqn = ('a + 2*b = 1') v_a = solve(eqn, a) v_b = solve(eqn, b)

Mech Princess on 20 Jul 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 on 20 Jul 2012

This:

```        data = [-1 0 1;-1 +1 -1]';
alpha = sym('alpha',[1 3]);
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?