Skip to main content

Solve multiple equations in one go


Consider the following code:


a1 := 2
b1 := 1
a2 := 1
b2 := 1/2
x1 := 0
y1 := 1
x2 := 0
y2 := 4


cSol = Solve[
a1 (a1^2 b2^2 m^2 + b1^2 (b2^2 - (c + m x1 - y1)^2)) ==
b2 (a1^2 (a2^2 m^2 + b2^2) - a2^2 (c + m x2 - y2)^2), c];
cc = cSol[[All, 1, 2]];
FullSimplify[TableForm[Table[cc[[i]], {i, 1, 2}]]]

which gives the two values $-2$ and $2$ as output.


I then want to do the following equation solving


Solve[(a1^2 m (cc[[1]] - y1) - b1^2 x1)^2 ==

(a1^2 m^2 + b1^2)*(b1^2 x1^2 + a1^2 (cc[[1]] - y1)^2 - a1^2 b2^2), m]
Solve[(a1^2 m (cc[[2]] - y1) - b1^2 x1)^2 ==
(a1^2 m^2 + b1^2)*(b1^2 x1^2 + a1^2 (cc[[2]] - y1)^2 - a1^2 b2^2), m]

for both values of $c$, in one sweep go, and thereby giving me four values for $m$ as output.


How do I do that without having to solve the equation for both c[[1]] and c[[2]] one at the time, but instead do it in one sweep go?


P.S. I used more or less the same technique as when solving for $c$, before I delete my code by mistake, and now I can't figure out how to do it again. :-(



Answer



First of all you may use the solutions for $c$ in their original Rule form as this is more elegant than using parts:


Solve[

(a1^2 m (c - y1) - b1^2 x1)^2 == (a1^2 m^2 + b1^2)*(b1^2 x1^2 +
a1^2 (c - y1)^2 - a1^2 b2^2), m
] /. cSol // Flatten


{m -> -(Sqrt[35]/2), m -> Sqrt[35]/2, m -> -(Sqrt[3]/2), m -> Sqrt[3]/2}



But to do it in one sweep, why not simply do:


eq1 =  a1 (a1^2 b2^2 m^2 + b1^2 (b2^2 - (c + m x1 - y1)^2)) == 
b2 (a1^2 (a2^2 m^2 + b2^2) - a2^2 (c + m x2 - y2)^2);

eq2 = (a1^2 m (c - y1) - b1^2 x1)^2 == (a1^2 m^2 + b1^2)*(b1^2 x1^2 +
a1^2 (c - y1)^2 - a1^2 b2^2);

sol = Solve[ eq1 && eq2, {m, c} ]


{{m -> -(Sqrt[35]/2), c -> -2}, {m -> Sqrt[35]/2, c -> -2}, {m -> -(Sqrt[3]/2), c -> 2}, {m -> Sqrt[3]/2, c -> 2}}



To get the $m$ values you simply do:


m /. sol



$\left\{-\frac{\sqrt{35}}{2},\frac{\sqrt{35}}{2},-\frac{\sqrt{3}}{2},\frac{\sqrt{3}}{2}\right\}$



Comments