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
- From: Adam Strzebonski <adams at wolfram.com>
- 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 > 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. 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[1]:= InputForm[ sol = Solve[{p == b^2/a, e == Sqrt[a^2 - b^2]/a}, {a, b}]] Out[1]//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[2]:= Simplify[sol, 0 < e < 1]//InputForm Out[2]//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, Adam Strzebonski 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[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: [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 > >> > > >> > > > > >