       Re: Re: Mathematica can't win against TigerWoods

• To: mathgroup at smc.vnet.net
• Subject: [mg19849] Re: [mg19765] Re: [mg19677] Mathematica can't win against TigerWoods
• Date: Sun, 19 Sep 1999 01:20:34 -0400
• References: <199909171007.TAA06723@soda1.bekkoame.ne.jp>
• Sender: owner-wri-mathgroup at wolfram.com

```Andrzej Kozlowski wrote:
>
> When I first quickly read the message below I only paid attention to the
> author's  remarks about "serious mathematics and physics" and "lower middle
> class scientists" and didn't read the rest. But having re-read it I found
> some rules to Simplify. Here is an example of what I mean, I am sue he can
> do it much better:
>
> In:=
> newsimplify[expr_, ass_] :=
>   Simplify[expr /. Sqrt[x_ /; Simplify[x < 0, ass] == True] -> I*Sqrt[-x],
>     ass]
>
> In:=
> sol = Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}]
> Out=
> {{b -> -((I*p)/Sqrt[-1 + e^2]), a -> -(p/(-1 + e^2))},
>   {b -> (I*p)/Sqrt[-1 + e^2], a -> -(p/(-1 + e^2))}}
>
> In:=
> newsimplify[sol, 0 < e < 1]
> Out=
> {{b -> -(p/Sqrt[1 - e^2]), a -> -(p/(-1 + e^2))}, {b -> p/Sqrt[1 - e^2],
>    a -> -(p/(-1 + e^2))}}
>
> Of course one can write a more general rule for all odd powers, not just
> Sqrt.

Actually, this particular rule, or more precisely the rule

a^p -> (-1)^p (-a)^p, for a<0

is built-in in V4.0 Simplify.

In:= InputForm[
sol = Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}]]

Out//InputForm=
{{b -> (-I*p)/Sqrt[-1 + e^2], a -> -(p/(-1 + e^2))},
{b -> (I*p)/Sqrt[-1 + e^2], a -> -(p/(-1 + e^2))}}

In:= Simplify[sol, 0 < e < 1]//InputForm

Out//InputForm=
{{b -> -(p/Sqrt[1 - e^2]), a -> -(p/(-1 + e^2))},
{b -> p/Sqrt[1 - e^2], a -> -(p/(-1 + e^2))}}

Best Regards,

Wolfram Research

> --
> Andrzej Kozlowski
> Toyama International University
> JAPAN
> http://sigma.tuins.ac.jp
> http://eri2.tuins.ac.jp
>
> ----------
> >From: Leszek Sczaniecki <leszek2 at home.com>
To: mathgroup at smc.vnet.net
> >To: mathgroup at smc.vnet.net
> >Subject: [mg19849] [mg19765] Re: [mg19677] Mathematica can't win against Tiger Woods
> >Date: Wed, Sep 15, 1999, 4:53 PM
> >
>
> >
> >
> > To many times I tried to replicate simple computations done by hand with
> > Mathematica and was not able to get results that would justify the use of an
> > expensive computer algebra system. Therefore, I understand very well the
> > frustration of Prof. MacDonald. Here is a recent example.
> >
> > Consider a very simple problem from analytical geometry. There an ellipse
> > with semi-latus rectum p and eccentricity e. You want to find semi-major
> > axis a, and semi-minor axis b. This is clearly a high school problem.
> >
> > First, let's do it manually. We have p > 0, 0 < e < 1, a > b > 0.
> >   p = b^2/a
> >   e = Sqrt[a^2 - b^2]/a}
> > from 0.
> >
> > e = Sqrt[a^2 - b^2]/a}
> >    => e^2 = (a^2 - b^2)/a^2
> >    => b^2/a^2 = 1-e^2
> > p = b^2/a = (b^2/a^2) a = (1-e^2)a
> >    => a = p/(1-e^2)
> > p = b^2/a
> >    => b^2 = p a = p^2 /(1-e^2)
> >    => b = p /Sqrt[1-e^2] or b = -p /Sqrt[1-e^2]
> > Because b > 0, b = p /Sqrt[1-e^2].
> >
> > Here is the result from Mathematica 4.0
> > In:=
> > Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}] // InputForm
> >
> > Out=
> > {{b -> (-I*p)/Sqrt[-1 + e^2], a -> -(p/(-1 + e^2))},
> >  {b -> (I*p)/Sqrt[-1 + e^2], a -> -(p/(-1 + e^2))}}
> >
> > There is no way to transfer the solution to the form obtained by hand. The
> form
> > returned by Solve is purely developer's decision. BTW, Mathematica 3.0
> produces a
> > different form of the result. Imagine yourself giving a lecture to high school
> > students who are not familiar with complex numbers. How would you explain them
> the
> > solution?
> >
> > Luckily, there is a way to get the expected result by using InequalitySolve
> (in
> > 4.0).
> >
> > In:= << Algebra`InequalitySolve`
> >
> > In:=
> > InequalitySolve[{p > 0, 0 < e < 1, a > b > 0, p == b^2/a,
> >     e == Sqrt[a^2 - b^2]/a}, {e, p, a, b}]
> >
> > Out=
> > 0 < e < 1 && p > 0 && a == -(p/(-1 + e^2)) && b == Sqrt[a^2 - a^2*e^2]
> >
> > In:=
> > Simplify[{a, b} //. ToRules[Drop[%, 2]], Take[%, 2]] // InputForm
> >
> > Out//InputForm=
> > {-(p/(-1 + e^2)), p/Sqrt[1 - e^2]}
> >
> > I am positive, that an average Mathematica user would not figured out to use
> > InequalitySolve. Also, notice that human would rather write the first term in
> the
> > form:
> >   p/(1 - e^2).
> > LeafCount for this form is 11. The Mathematica expression has LeafCount of 10.
> > That clearly proves that LeafCount alone is not necessarily the best measure
> of
> > the simplicity (in human terms) of an expression.
> >
> > Let's now solve the equations posted by Prof. MacDonald with some human help.
> We
> > will solve first the equations for velocities (denoted by u[t] and v[t]). BTW,
> I
> > use InputForms to avoid expressions hard to read in ascii form.
> >
> > In:=
> > solution1 = {u[t], v[t]} /.
> >       DSolve[{u'[t] == -(a u[t] + b v[t]),
> >               v'[t] == -g - (a v[t] - b u[t])},
> >                   {u[t], v[t]}, t] // InputForm
> >
> > Out//InputForm=
> > {{(a^2*C*Cos[b*t] + b^2*C*Cos[b*t] +
> >     b*E^(a*t)*g*Cos[b*t]^2 - a^2*C*Sin[b*t] -
> >     b^2*C*Sin[b*t] + b*E^(a*t)*g*Sin[b*t]^2)/
> >    ((a - I*b)*(a + I*b)*E^(a*t)),
> >   -((-(a^2*C*Cos[b*t]) - b^2*C*Cos[b*t] +
> >      a*E^(a*t)*g*Cos[b*t]^2 - a^2*C*Sin[b*t] -
> >      b^2*C*Sin[b*t] + a*E^(a*t)*g*Sin[b*t]^2)/
> >     ((a - I*b)*(a + I*b)*E^(a*t)))}}
> >
> > At this point imagine yourself advocating Mathematica to golf players not
> familiar
> > with the concept of complex numbers.:-) Good luck in explaining what
> ComplexExpand
> > and TargetFunctions do!
> >
> > In:=
> > FullSimplify[ComplexExpand[solution1, TargetFunctions -> {Im, Re}]]
> >
> > Out//InputForm=
> > {{(b*g)/(a^2 + b^2) + (C*Cos[b*t] - C*Sin[b*t])/
> >     E^(a*t), -((a*g)/(a^2 + b^2)) +
> >    (C*Cos[b*t] + C*Sin[b*t])/E^(a*t)}}
> >
> > Very good! This is a pretty simple form. Now we have to integrate both terms
> and
> > add a constant to each of them.
> >
> > In:=
> > solution2 = Integrate[%, t] + {{C, C}} // InputForm
> >
> > Out//InputForm=
> > {{(b*g*t)/(a^2 + b^2) + C +
> >    ((-(a*C) + b*C)*Cos[b*t])/((-I*a + b)*(I*a + b)*
> >      E^(a*t)) + ((b*C + a*C)*Sin[b*t])/
> >     ((-I*a + b)*(I*a + b)*E^(a*t)),
> >   -((a*g*t)/(a^2 + b^2)) + C -
> >    ((b*C + a*C)*Cos[b*t])/((a - I*b)*(a + I*b)*
> >      E^(a*t)) - ((a*C - b*C)*Sin[b*t])/
> >     ((a - I*b)*(a + I*b)*E^(a*t))}}
> >
> > Well, we got complex expressions again. Simplify and FullSimplify don't help
> much.
> >
> > In:=
> > FullSimplify[ComplexExpand[solution2, TargetFunctions -> {Im, Re}]]
> >
> > Out//InputForm=
> > {{(E^(a*t)*(b*g*t + (a^2 + b^2)*C) +
> >     (-(a*C) + b*C)*Cos[b*t] + (b*C + a*C)*
> >      Sin[b*t])/((a^2 + b^2)*E^(a*t)),
> >   (E^(a*t)*(-(a*g*t) + (a^2 + b^2)*C) -
> >     (b*C + a*C)*Cos[b*t] + (-(a*C) + b*C)*
> >      Sin[b*t])/((a^2 + b^2)*E^(a*t))}}
> >
> > Take the first term.
> >
> > In:=
> > LeafCount[(E^(a*t)*(b*g*t + (a^2 + b^2)*C) + (-(a*C) + b*C)*
> >           Cos[b*t] + (b*C + a*C)*Sin[b*t])/((a^2 + b^2)*E^(a*t))]
> >
> > Out=
> > 67
> >
> > Any person with decent high school education can momentarily simplify this
> > expression.
> >
> > ((b*g*t) + E^(-a*t)((-(a*C) + b*C)*Cos[b*t] + (b*C + a*C)*
> > Sin[b*t]))/((a^2 + b^2)) + C
> >
> > In:=
> > LeafCount[((b*g*t) +
> >           E^(-a*t)((-(a*C) + b*C)*Cos[b*t] + (b*C + a*C)*
> >                   Sin[b*t]))/((a^2 + b^2)) + C]
> >
> > Out=
> > 55
> >
> > In:=
> > ((b*g*t) + E^(-a*t)((-(a*C) + b*C)*Cos[b*t] + (b*C + a*C)*
> >                     Sin[b*t]))/((a^2 + b^2)) +
> >       C == (E^(a*t)*(b*g*t + (a^2 + b^2)*C) + (-(a*C) + b*C)*
> >             Cos[b*t] + (b*C + a*C)*Sin[b*t])/((a^2 + b^2)*
> >           E^(a*t)) // FullSimplify
> >
> > Out=
> > True
> >
> > Additionally, a human can notice that appropriately choosing the constants,
> one
> > can further simplify the expression.
> >
> > b*g*t/(a^2 + b^2) + E^(-a*t)(C*Cos[b*t] + C*Sin[b*t]) + C
> >
> > (LeafCount of 38) or
> >
> > b*g*t/(a^2 + b^2) + E^(-a*t)*C*Cos[b*t + C] + C
> >
> > (LeafCount of 32). As you can see, there are simpler solutions than those
> produced
> > by Mathematica.
> >
> > 10 - 12 years ago an average mathematics, physics, or engineering student
> could
> > solve these equations by hand and in time much shorter I needed to get a
> solution
> > with help of Mathematica for just one variable. Ironically, there is well
> known
> > exact solution for the differential equation of the form
> >
> >    d x
> >    --- = A x + B
> >    d t
> >
> > in Banach space. From there one can get a solution for the case when A is a
> > matrix, and x, B are vectors.
> >
> > Here is my point. Mathematica can certainly do plenty of problems much better
> than
> > human. But, it is very, very frustrating, that in trivial cases the system
> often
> > produces results worse then those delivered by a human. I see this as the
> > challenge for Mathematica developers. The system should always produce better
> > results than human. Presently, Mathematica is a tool for some kind of
> "scientific
> > lower middle class". It is way to weak for people, who do serious mathematics
> or
> > theoretical physics, and way to complicated for pedestrians. If Wolfram
> Research
> > Inc. truly intents to reach "masses", it has to be more sensitive to their
> needs.
> >
> > --Leszek
> >
> > Andrzej Kozlowski wrote:
> >
> >> I don't think of myself as a "computer algebra nerd" and I don't play golf
> >> but it seems to me that Mathemaitca does this problem rather well:
> >>
> >> In:=
> >> solution = {y[t], x[t]} /. DSolve[{x''[t] == - (a x'[t] + b y'[t]),
> >>      y''[t] == - g - (a y'[t] - b x'[t])}, {y[t], x[t]}, t];
> >>
> >> In:=
> >> Simplify[ComplexExpand[solution, TargetFunctions -> {Im, Re}]]
> >>
> >> Out=
> >>       1        a t   4         3
> >> {{---------- (E    (a  C + a  (-g t + C) +
> >>     2    2 2
> >>   (a  + b )
> >>
> >>              2                  2
> >>           a b  (-g t + C) + b  (-g + b (b C + C)) +
> >>
> >>            2
> >>           a  (g + b (2 b C + C))) -
> >>
> >>          2    2
> >>        (a  + b ) (a C + b C) Cos[b t] -
> >>
> >>          2    2                                  a t
> >>        (a  + b ) (-b C + a C) Sin[b t]) / E   ,
> >>
> >>        1        a t   4         3
> >>    ---------- (E    (a  C + b  (g t + b C - C) +
> >>      2    2 2
> >>    (a  + b )
> >>
> >>            2                              3
> >>           a  b (g t + 2 b C - C) + a  C +
> >>
> >>           a b (-2 g + b C)) -
> >>
> >>          2    2
> >>        (a  + b ) (-b C + a C) Cos[b t] +
> >>
> >>          2    2                                 a t
> >>        (a  + b ) (a C + b C) Sin[b t]) / E   }}
> >>
> >> --
> >> Andrzej Kozlowski
> >> Toyama International University
> >> JAPAN
> >> http://sigma.tuins.ac.jp
> >> http://eri2.tuins.ac.jp
> >>
> >> ----------
> >> >From: "William M. MacDonald" <wm2 at umail.umd.edu>
To: mathgroup at smc.vnet.net
> > To: mathgroup at smc.vnet.net
> >> >To: mathgroup at smc.vnet.net
> >> >Subject: [mg19849] [mg19765] [mg19677] Mathematica can't win against Tiger Woods
> >> >Date: Thu, Sep 9, 1999, 3:19 PM
> >> >
> >>
> >> >
> >> > I want to use the study of golf drives in teaching theoretical methods.  An
> >> > approximate pair of equations to get insight assumes that the drag force is
> >> >  linearly  proportional to velocity, instead of the actual quadratic
> >> >  dependence.  The equations for a ball with backspin to provide lift are
> >> >      x''[t]== - (a x'[t]+b y'[t]),
> >> >      y''[t]== - g - (a y'[t]- b x'[t])
> >> >  Mathematica returns a very complicated and apparently complex expression
> in
> >> >  about 9 seconds on my 250 MHz G3 Powerbook.  Simplify takes 1min and 20
> >> >  seconds and still returns an apparently complex expression.  If I apply
> >> >  FullSimplify on the solution for say x[t], I get no answer in 6 minutes.
> >> >
> >> >      I have a PC version of another system that I can run on my Powerbook
> >> using
> >> >  Virtual PC.  It requires 6 seconds to deliver a lengthy but obviously
> real,
> >> >  no Exp[(a+ I b)t] terms or (a + I b)(a - I b) terms.
> >> >
> >> >      I have never been able to learn why Mathematica is so slow in solving
> >> >  coupled equations and returns (as USUAL unless you use Simplify) such
> >> >  inelegant results.  Is there any computer algebra NERD out
> >> >  there who knows the answer.  (Don't tell me to use AlgebraicManipulation;
> I
> >> >  am trying to sell Mathematica to users who don't want to spend time
> >> > learning
> >> >  fancy tricks.)
> >> >
> >> > --
> >> > William M. MacDonald
> >> > Professor of Physics
> >> > University of Maryland
> >> >
> >> > Internet: wm2 at umail.umd.edu
> >> >
> >> >
> >
> >

```

• Prev by Date: Re: Where's the Speed?
• Next by Date: Re: polynomial approximation for twenty data points
• Previous by thread: Re: Re: Mathematica can't win against TigerWoods
• Next by thread: polynomial approximation for twenty data points