[Date Index] [Thread Index] [Author Index]
Re: Simplifying and Rearranging Expressions
In article <gls1u8$hjl$1 at smc.vnet.net>, "David Park" <djmpark at comcast.net> wrote: > I want to start a thread on this because I believe many MathGroup people > will have some useful things to say. I'll bite, because I've done a bit of thinking on this. > A common task for Mathematica users is to obtain an expression that is in a > particular form. For students and teachers this may often be a textbook > form, or there may be other reasons that a particular form is desired. Just to add a bit of specificity to this, let's consider expressions that arise in optics and e-m theory, which generally involve a set of physical quantities (velocity of light, propagation constant, permeabilities, index of refraction, frequency, wavelength, characteristics impedance, critical angle of refraction, and multiple others) that are conventionally written as c, k, (or beta), mu, epsilon, n, f (or omega), lambda, eta or z_0, thetaCrit, and so on **each of which is directly linked or coupled to (that is, can be calculated from) several others in the same set**. [You have to put up with a side story at this point. The distinguished physicist W. K. H. Panofsky, who just recently died, early in his career co-authored with Melba Phillips a small but excellent text on classical e-m, colloquially known as "Panofsky and Phillips", from which I and many others studied. This was long enough ago that cgs and mks units were still fighting it out in the physics community.] [P and P beautifully sidestepped this issue by, as they noted in the Preface to their book, writing every equation in their book using an appropriate (but generally different) subset of the above symbols, such that every equation was valid in mks units as it stood, **and could be instantly converted to be exactly valid in cgs units as well, simply by replacing any factor of epsilon that appeared in any of these equations by 1/ 4 pi **.] > It might be thought that this should be an easy task but quite often it can > be a very difficult task, even involving mathematical derivation and many of > the capabilities of Mathematica. Not obtaining a specific form may be a > matter of not knowing how to solve the problem in the first place. It may not be just a difficult task; in fact, **it may be an impossible task** -- not to mention **an unnecessary and undesirable task**. 1) As already noted above, you may want to write expressions that contain some subset of a linked set of variables in different ways at different points in an exposition, because these different ways are conventional in the field, and/or make the physical meaning clearer. For example, you may want to write the space-time variation of a phasor wave amplitude as Exp[ I k z - I omega t] because that's neat, simple, and conventional. But then, in discussing a waveguide mode where a factor k d (d = waveguide width) appears, you may want to write that factor instead in the form 2 pi d/lambda to emphasize that it's the width in wavelengths that's important. But if at some point in your notebook you're going to insert any of the dependences within this set -- e.g., k := 2 pi / lambda -- then you're stuck with this from then on. 2) A second point: My experience has been that useful identities that often arise in analyses -- for example, with suitable qualifications the infinite integral of Exp[- a x^2 + b x] == Exp[b^2/4a] -- sometime just won't fall out (i.e., won't be explicitly evaluated by Mathematica if a and b are actually more complicated expressions. 3) More generally, one very often wants to do the eventual numerical calculations using only one or another form of dimensionless or normalized variables, because that's numerically efficient as well as physically and practically useful in expressing the results. And, if at some point in an exposition you're going to convert your analytical and expositional formulas into dimensionless formulas for numerical calculation purposes -- **at that point you really don't care how Mathematica arranges the resulting expression**. > Nevertheless, even simple rearrangement can be difficult. I sometimes think > of it as doing surgery on expressions. I believe it is generally desirable > to use Mathematica to rearrange an expression and not retype the expression. > Retyping is too error prone. Last sentence is true; immediately preceding sentence may be true as phrased -- but is a mistaken belief. Comments on this below. > Simplify and FullSimplify are amazingly useful but it is difficult to > control them and obtain a precise result. One will often have to do > additional piecemeal operations. One downside of Simplify and FullSimplify > is that they can return different forms with different Mathematica versions. > Then any additional operations in an old notebook may no longer work. It > would be nice if there was a method of using these commands that would be > more version independent. > Various routines such as Together, Apart, Factor, TrigReduce, TrigFactor, > TrigExpand, TrigToExp, GroebnerBasis etc., can be useful in getting a > specific form. MapAt is very useful for doing surgery on specific parts of > an expression. Mathematica often gets two factors that have extra minus > signs. You can correct that by mapping Minus onto the two factors. For > integrals in the wrong form you could cheat by trying to find the constant > by which they differ by subtracting and simplifying, and then use that in > the derivation. Let's say it like it is: It's not just "difficult" for ordinary users to use and control many of these advanced tools: It's basically **impossible** for the average user to learn what some of these tools do, because they're so complex and the results can depend so critically on what you put into them; all you end up doing is thrashing around endlessly, trying to get them to produce the results you want. The more powerful they get, the less they're worth trying to learn. > It is very useful to get Mathematica generated expressions into the form > that one wants. I believe that this is probably a sticking point with many > users. In general it is not a trivial topic. Others may have some good > general ideas that I don't know about. My bottom lines are instead: 1) Accept that "Retyping is...error prone" -- and more generally that "To err is human..." -- and to the extent that you have to do any form of retyping, do a _lot_ of checking, rechecking, testing with simple cases, and looking to see that results are physically meaningful. 2) Nonetheless, in general, "It is GENERALLY NOT very useful to get Mathematica generated expressions into the form that one wants" -- at least, not very often, and not if it involves any significant amount of effort. It's wasted energy, and can add its own errors, or divert one from seeing one's own errors. 3) Instead, if what you're doing is a complex analysis and/or exposition, tackle the analysis portion initially with paper, pencil, and a good soft eraser, the way God intended analysis to be done. 4) When and if certain calculations (series expansions, etc.) get messy, run separate Mathematica symbolic calculations in auxiliary notebooks to carry them out. 5) When it comes time for exposition, do the exposition using a tool that's designed for exposition (e.g., TeX), while doing the numerical calculations and graphing using a tool that's good at those things -- and while doing this repeat item 1) multiple times. > Someday someone may even write a good tutorial on it. How about instead someone **imbedding real TeX in Mathematica**, as part of Mathematica's basic capabilities? That is: * TeX is (I believe) totally open source, free, highly stable, and widely known and studied -- and it's full source code is very compact. * So how about building the TeX source code into Mathematica's already immense repertoire of rules and stuff, and allowing one to include at any point in a "text portion" (I.e., a "non-evaluation portion") of a Mathematica notebook cell the syntax TeX[ ---any valid TeX syntax---] such as TeX[$\alpha = \beta / \gamma^2$] to get that bit of inline math into a Text or Header cell, or TeX[$$\alpha = \left( \beta /over \gamma^2 \right)$$] to insert a display equation, and just having Mathematica display the typeset box produced by TeX using that syntax into the Mathematica notebook at that point, with the stuff inside the [ ] brackets having no other evaluational function or effect in Mathematica itself, except to be displayed? Is there some reason this would be conceptually impossible? Would it be that difficult to accomplish? Could it at least be implemented with some reasonable subset of TeX syntax and capabilities? If your goal is to have Mathematica notebooks serve simultaneously as "exposition documents" and "calculation performing documents", might this be a lot easier than endless fighting with option-laden and temporally unstable Mathematica expressions like "Together, Apart, Factor, TrigReduce, TrigFactor, TrigExpand, TrigToExp, GroebnerBasis" and all their even more arcane extensions?