Re: Re: Mathematica can't win against Tiger Woods

• To: mathgroup at smc.vnet.net
• Subject: [mg19843] Re: [mg19765] Re: [mg19677] Mathematica can't win against Tiger Woods
• From: "Andrzej Kozlowski" <andrzej at tuins.ac.jp>
• Date: Sun, 19 Sep 1999 01:20:28 -0400
• Sender: owner-wri-mathgroup at wolfram.com

```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
that al the fuss was just about the fact that Adam Strzbonski omitted to add
some rules to Simplify. Here is an example of what I mean, I am sue he can
do it much better:

In[4]:=
newsimplify[expr_, ass_] :=
Simplify[expr /. Sqrt[x_ /; Simplify[x < 0, ass] == True] -> I*Sqrt[-x],
ass]

In[5]:=
sol = Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}]
Out[5]=
{{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[6]:=
newsimplify[sol, 0 < e < 1]
Out[6]=
{{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.
--
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: [mg19843] [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[1]:=
> Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}] // InputForm
>
> Out[2]=
> {{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[3]:= << Algebra`InequalitySolve`
>
> In[4]:=
> 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[4]=
> 0 < e < 1 && p > 0 && a == -(p/(-1 + e^2)) && b == Sqrt[a^2 - a^2*e^2]
>
> In[5]:=
> Simplify[{a, b} //. ToRules[Drop[%, 2]], Take[%, 2]] // InputForm
>
> Out[5]//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[1]:=
> 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[1]//InputForm=
> {{(a^2*C[1]*Cos[b*t] + b^2*C[1]*Cos[b*t] +
>     b*E^(a*t)*g*Cos[b*t]^2 - a^2*C[2]*Sin[b*t] -
>     b^2*C[2]*Sin[b*t] + b*E^(a*t)*g*Sin[b*t]^2)/
>    ((a - I*b)*(a + I*b)*E^(a*t)),
>   -((-(a^2*C[2]*Cos[b*t]) - b^2*C[2]*Cos[b*t] +
>      a*E^(a*t)*g*Cos[b*t]^2 - a^2*C[1]*Sin[b*t] -
>      b^2*C[1]*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[2]:=
> FullSimplify[ComplexExpand[solution1, TargetFunctions -> {Im, Re}]]
>
> Out[2]//InputForm=
> {{(b*g)/(a^2 + b^2) + (C[1]*Cos[b*t] - C[2]*Sin[b*t])/
>     E^(a*t), -((a*g)/(a^2 + b^2)) +
>    (C[2]*Cos[b*t] + C[1]*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[3]:=
> solution2 = Integrate[%, t] + {{C[3], C[4]}} // InputForm
>
> Out[3]//InputForm=
> {{(b*g*t)/(a^2 + b^2) + C[3] +
>    ((-(a*C[1]) + b*C[2])*Cos[b*t])/((-I*a + b)*(I*a + b)*
>      E^(a*t)) + ((b*C[1] + a*C[2])*Sin[b*t])/
>     ((-I*a + b)*(I*a + b)*E^(a*t)),
>   -((a*g*t)/(a^2 + b^2)) + C[4] -
>    ((b*C[1] + a*C[2])*Cos[b*t])/((a - I*b)*(a + I*b)*
>      E^(a*t)) - ((a*C[1] - b*C[2])*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[4]:=
> FullSimplify[ComplexExpand[solution2, TargetFunctions -> {Im, Re}]]
>
> Out[4]//InputForm=
> {{(E^(a*t)*(b*g*t + (a^2 + b^2)*C[3]) +
>     (-(a*C[1]) + b*C[2])*Cos[b*t] + (b*C[1] + a*C[2])*
>      Sin[b*t])/((a^2 + b^2)*E^(a*t)),
>   (E^(a*t)*(-(a*g*t) + (a^2 + b^2)*C[4]) -
>     (b*C[1] + a*C[2])*Cos[b*t] + (-(a*C[1]) + b*C[2])*
>      Sin[b*t])/((a^2 + b^2)*E^(a*t))}}
>
> Take the first term.
>
> In[5]:=
> LeafCount[(E^(a*t)*(b*g*t + (a^2 + b^2)*C[3]) + (-(a*C[1]) + b*C[2])*
>           Cos[b*t] + (b*C[1] + a*C[2])*Sin[b*t])/((a^2 + b^2)*E^(a*t))]
>
> Out[5]=
> 67
>
> Any person with decent high school education can momentarily simplify this
> expression.
>
> ((b*g*t) + E^(-a*t)((-(a*C[1]) + b*C[2])*Cos[b*t] + (b*C[1] + a*C[2])*
> Sin[b*t]))/((a^2 + b^2)) + C[3]
>
> In[6]:=
> LeafCount[((b*g*t) +
>           E^(-a*t)((-(a*C[1]) + b*C[2])*Cos[b*t] + (b*C[1] + a*C[2])*
>                   Sin[b*t]))/((a^2 + b^2)) + C[3]]
>
> Out[6]=
> 55
>
> In[7]:=
> ((b*g*t) + E^(-a*t)((-(a*C[1]) + b*C[2])*Cos[b*t] + (b*C[1] + a*C[2])*
>                     Sin[b*t]))/((a^2 + b^2)) +
>       C[3] == (E^(a*t)*(b*g*t + (a^2 + b^2)*C[3]) + (-(a*C[1]) + b*C[2])*
>             Cos[b*t] + (b*C[1] + a*C[2])*Sin[b*t])/((a^2 + b^2)*
>           E^(a*t)) // FullSimplify
>
> Out[7]=
> 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[1]*Cos[b*t] + C[2]*Sin[b*t]) + C[3]
>
> (LeafCount of 38) or
>
> b*g*t/(a^2 + b^2) + E^(-a*t)*C[1]*Cos[b*t + C[2]] + C[3]
>
> (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[2]:=
>> 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[3]:=
>> Simplify[ComplexExpand[solution, TargetFunctions -> {Im, Re}]]
>>
>> Out[3]=
>>       1        a t   4         3
>> {{---------- (E    (a  C[1] + a  (-g t + C[3]) +
>>     2    2 2
>>   (a  + b )
>>
>>              2                  2
>>           a b  (-g t + C[3]) + b  (-g + b (b C[1] + C[4])) +
>>
>>            2
>>           a  (g + b (2 b C[1] + C[4]))) -
>>
>>          2    2
>>        (a  + b ) (a C[3] + b C[4]) Cos[b t] -
>>
>>          2    2                                  a t
>>        (a  + b ) (-b C[3] + a C[4]) Sin[b t]) / E   ,
>>
>>        1        a t   4         3
>>    ---------- (E    (a  C[2] + b  (g t + b C[2] - C[3]) +
>>      2    2 2
>>    (a  + b )
>>
>>            2                              3
>>           a  b (g t + 2 b C[2] - C[3]) + a  C[4] +
>>
>>           a b (-2 g + b C[4])) -
>>
>>          2    2
>>        (a  + b ) (-b C[3] + a C[4]) Cos[b t] +
>>
>>          2    2                                 a t
>>        (a  + b ) (a C[3] + b C[4]) 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: [mg19843] [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: How to find solutions for conditioned equations?
• Next by Date: Re: Recognising Exponential Function
• Previous by thread: Re: Mathematica can't win against Tiger Woods
• Next by thread: Re: Re: Re: Mathematica can't win against Tiger Woods