Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Let's see:

x,z, xm, xs, zs, z2, d1, d2, em, es =var('x z xm xs zs z2 d1 d2 em es')
equations = [d1 == sqrt(xm*xm + zs*zs),
             d2 == sqrt(z2*z2 + xs*xs),
             xm + xs == x,
             zs + z2 == z,
             (xm/zs)/(xs/z2) == (em/es)]
E1=[u.subs(equations[2].solve(xm)).simplify_full() for u in equations]
E2=[u.subs(E1[3].solve(z2)).simplify_full() for u in E1]
E3=[u.subs(E2[4].solve(xs)).simplify_full() for u in E2]
E3
[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 d2 == sqrt((es^2*x^2*z^2 + es^2*z^4 - 2*(em^2 - 3*em*es + 2*es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (es^2*x^2 + (em^2 - 6*em*es + 6*es^2)*z^2)*zs^2 - 2*(es^2*x^2*z - (em*es - 2*es^2)*z^3)*zs)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 x == x,
 z == z,
 em/es == em/es]

Note that maxima.eliminate is supposed to do that (but fails lamentably...).

Let's see:

x,z, xm, xs, zs, z2, d1, d2, em, es =var('x z xm xs zs z2 d1 d2 em es')
equations = [d1 == sqrt(xm*xm + zs*zs),
             d2 == sqrt(z2*z2 + xs*xs),
             xm + xs == x,
             zs + z2 == z,
             (xm/zs)/(xs/z2) == (em/es)]
E1=[u.subs(equations[2].solve(xm)).simplify_full() for u in equations]
E2=[u.subs(E1[3].solve(z2)).simplify_full() for u in E1]
E3=[u.subs(E2[4].solve(xs)).simplify_full() for u in E2]
E3
[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 d2 == sqrt((es^2*x^2*z^2 + es^2*z^4 - 2*(em^2 - 3*em*es + 2*es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (es^2*x^2 + (em^2 - 6*em*es + 6*es^2)*z^2)*zs^2 - 2*(es^2*x^2*z - (em*es - 2*es^2)*z^3)*zs)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 x == x,
 z == z,
 em/es == em/es]

Note that maxima.eliminate is supposed to do that (but fails lamentably...).

Note, two hours later : (that's what called in french "l'esprit de l'escalier"...):

Of course, you can get the desired result trivially by solving for the variables to eliminate as well as for the desired variables :

solve(equations,[d1, d2, xm, xs, z2])[0:1]
[[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
  d2 == sqrt(z^2 - 2*z*zs + zs^2 + (es*x*z - es*x*zs)^2/(es*z + (em - es)*zs)^2),
  xm == em*x*zs/(es*z + (em - es)*zs),
  xs == (es*x*z - es*x*zs)/(es*z + (em - es)*zs),
  z2 == z - zs]]

The variables to be eliminated do not figure indeed in the solutions for the desired variables...

I should sleep more...

Let's see:

x,z, xm, xs, zs, z2, d1, d2, em, es =var('x z xm xs zs z2 d1 d2 em es')
equations = [d1 == sqrt(xm*xm + zs*zs),
             d2 == sqrt(z2*z2 + xs*xs),
             xm + xs == x,
             zs + z2 == z,
             (xm/zs)/(xs/z2) == (em/es)]
E1=[u.subs(equations[2].solve(xm)).simplify_full() for u in equations]
E2=[u.subs(E1[3].solve(z2)).simplify_full() for u in E1]
E3=[u.subs(E2[4].solve(xs)).simplify_full() for u in E2]
E3
[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 d2 == sqrt((es^2*x^2*z^2 + es^2*z^4 - 2*(em^2 - 3*em*es + 2*es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (es^2*x^2 + (em^2 - 6*em*es + 6*es^2)*z^2)*zs^2 - 2*(es^2*x^2*z - (em*es - 2*es^2)*z^3)*zs)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 x == x,
 z == z,
 em/es == em/es]

Note that maxima.eliminate is supposed to do that (but fails lamentably...).

Note, two hours later : (that's what called in french "l'esprit de l'escalier"...):

Of course, you can get the desired result trivially by solving for the variables to eliminate as well as for the desired variables :

solve(equations,[d1, d2, xm, xs, z2])[0:1]
z2])
[[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
  d2 == sqrt(z^2 - 2*z*zs + zs^2 + (es*x*z - es*x*zs)^2/(es*z + (em - es)*zs)^2),
  xm == em*x*zs/(es*z + (em - es)*zs),
  xs == (es*x*z - es*x*zs)/(es*z + (em - es)*zs),
  z2 == z - zs]]

The variables to be eliminated do not figure indeed in the solutions for the desired variables...

I should sleep more...

Let's see:

x,z, xm, xs, zs, z2, d1, d2, em, es =var('x z xm xs zs z2 d1 d2 em es')
equations = [d1 == sqrt(xm*xm + zs*zs),
             d2 == sqrt(z2*z2 + xs*xs),
             xm + xs == x,
             zs + z2 == z,
             (xm/zs)/(xs/z2) == (em/es)]
E1=[u.subs(equations[2].solve(xm)).simplify_full() for u in equations]
E2=[u.subs(E1[3].solve(z2)).simplify_full() for u in E1]
E3=[u.subs(E2[4].solve(xs)).simplify_full() for u in E2]
E3
[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 d2 == sqrt((es^2*x^2*z^2 + es^2*z^4 - 2*(em^2 - 3*em*es + 2*es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (es^2*x^2 + (em^2 - 6*em*es + 6*es^2)*z^2)*zs^2 - 2*(es^2*x^2*z - (em*es - 2*es^2)*z^3)*zs)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
 x == x,
 z == z,
 em/es == em/es]

Note that maxima.eliminate is supposed to do that (but fails lamentably...).

Note, two hours later : (that's what called in french "l'esprit de l'escalier"...):

Of course, you can get the desired result trivially by solving for the variables to eliminate as well as for the desired variables :

solve(equations,[d1, d2, xm, xs, z2])
[[d1 == sqrt((2*(em*es - es^2)*z*zs^3 + (em^2 - 2*em*es + es^2)*zs^4 + (em^2*x^2 + es^2*z^2)*zs^2)/(es^2*z^2 + 2*(em*es - es^2)*z*zs + (em^2 - 2*em*es + es^2)*zs^2)),
  d2 == sqrt(z^2 - 2*z*zs + zs^2 + (es*x*z - es*x*zs)^2/(es*z + (em - es)*zs)^2),
  xm == em*x*zs/(es*z + (em - es)*zs),
  xs == (es*x*z - es*x*zs)/(es*z + (em - es)*zs),
  z2 == z - zs]]

The variables to be eliminated do not figure indeed in the solutions for the desired variables...

I should sleep more...

"L'esprit de l'escalier" strikes again :

You can get "cleaner" solutionns with :

solve(equations,[d1, d2, xm, xs, z2], algorithm="sympy", solution_dict=False)
[{xm: em*x*zs/(es*z + em*zs - es*zs),
  d2: sqrt(es^2*x^2*(z - zs)^2/(es*z + em*zs - es*zs)^2 + (z - zs)^2),
  d1: sqrt(em^2*x^2*zs^2/(es*z + em*zs - es*zs)^2 + zs^2),
  z2: z - zs,
  xs: es*x*(z - zs)/(es*z + em*zs - es*zs)}]