DMUG-Archiv 1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: Bearbeitung von Gleichungen

die Idee von Rolf Mertig ist richtig, man kann das aber zum Glück noch
etwas einfacher machen. Ich habe das schon vor einiger Zeit für "Streams"
gemacht (Kapitel 6 im "The Mathematica Programmer").
Man will ja wohl, daß sich genau die Funktionen über Gleichungen
verteilen, die das auch über Listen machen, also die Funktionen mit dem
Attribut "Listable". Genauso, wie Sin[{a,b}] zu {Sin[a], Sin[b]}
evaluiert, sollte dann auch Sin[a==b] zu Sin[a]==Sin[b] evaluieren. Die
Funktion, die diese Transformation ausführt, ist Thread[], wie schon
Matthias Berth richtig bemerkt hat.

Man will also f[a, b, c, ...] in Thread[f[a, b, c, ...]] verwandeln,
falls f das Attribut "Listable" hat und mindestens eines der Argumente
eine Gleichung ist, also Kopf "Equal" hat. Das geht im Wesentlichen so:

Equal/: lhs:f_Symbol?listableQ[___, _Equal, ___] :=
        Thread[ Unevaluated[lhs], Equal ]

listableQ[f_] := MemberQ[Attributes[f], Listable]

mit "Unevaluated" verhindert man eine unendliche Rekursion. In ein
kleines Paket eingesetzt, habe ich es in EqualThread.m dieser Meldung
beigefügt.

Damit kann man wie in der Schule Gleichungen lösen:

Paket einlesen:

    In[1]:= Needs["EqualThread`"]

Die Gleichung, nach x aufzulösen:

    In[7]:= a == b Log[2 x]

Durch b dividieren:

    In[8]:= %/b
    
            a
    Out[8]= - == Log[2 x]
            b

Exponentieren:

    In[9]:= Exp[%]

             a/b
    Out[9]= E    == 2 x

Durch 2 dividieren:

    In[10]:= %/2

              a/b
             E
    Out[10]= ---- == x
              2

Es lassen sich damit auch Gleichungen addieren:

    In[11]:= (a==b) + (c==d)

    Out[11]= a + c == b + d


bei dieser Gelegenheit wünsche ich noch, etwas verspätet, allen DMUG-
Mitgliedern eine gutes Neues Jahr.

Roman Mäder

-----------------------------------------------------------------------
MathConsult Dr. R. Mäder                   Samstagernstrasse 58a
Mathematik- und Informatik-Beratung        CH-8832 Wollerau

T: +41-1-687 4050                          mailto:maeder@XXXXXXX.ch
F: +41-1-687 4054                          http://www.mathconsult.ch/
-----------------------------------------------------------------------
(* make equations behave like lists *)

(* Roman E. Mäder, 1998 *)

BeginPackage["EqualThread`"]

Begin["`Private`"]

listableQ[f_] := MemberQ[Attributes[f], Listable]

protected = Unprotect[Equal]

Equal/: lhs:f_Symbol?listableQ[___, _Equal, ___] :=
        Thread[ Unevaluated[lhs], Equal ]

Protect[Evaluate[protected]]

End[]

EndPackage[]
Verweise:
Re: Bearbeitung von Gleichungen
Rolf, 05.01.1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.09.2003 20:44