3
$\begingroup$

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. :-(

$\endgroup$
3
$\begingroup$

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\}$

$\endgroup$
  • $\begingroup$ Awesome! (I'm a novice when it comes to using Mathematica.) $\endgroup$ – Svend Tveskæg Apr 15 '17 at 17:44
1
$\begingroup$

"In one go": Subtract one side from the other, multiply the sides, set equal to zero, and solve:

Solve[0 == Times @@ ((a1^2 m (cc - y1) - b1^2 x1)^2 == (a1^2 m^2 + 
         b1^2)*(b1^2 x1^2 + a1^2 (cc - y1)^2 - a1^2 b2^2) /. 
     Equal -> Subtract),
 m]
(*  {{m -> -(Sqrt[3]/2)}, {m -> Sqrt[3]/2}, {m -> -(Sqrt[35]/2)}, {m -> Sqrt[35]/2}}  *)

But it might be better to solve each and join the solutions:

Join @@ Table[
  Solve[(a1^2 m (ci - y1) - b1^2 x1)^2 == (a1^2 m^2 + 
       b1^2)*(b1^2 x1^2 + a1^2 (ci - y1)^2 - a1^2 b2^2), m],
  {ci, cc}]
(*  {{m -> -(Sqrt[35]/2)}, {m -> Sqrt[35]/2}, {m -> -(Sqrt[3]/2)}, {m -> Sqrt[3]/2}}  *)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.