2009-08-28 15 views
7

Wenn ich einen Beweis oder eine Ableitung auf Papier schreibe, mache ich häufig Zeichenfehler oder lasse Ausdrücke fallen, während ich von einem Schritt zum nächsten gehe. Ich möchte Mathematica verwenden, um mich vor diesen dummen Fehlern zu retten. Ich möchte nicht, dass Mathematica den Ausdruck löst, ich möchte ihn nur benutzen und eine Reihe von algebraischen Manipulationen anzeigen. Für ein (triviales) BeispielGibt es Mathematica-Pakete zum Präsentieren von Ableitungen?

In[111]:= MultBothSides[Equal[a_, b_], c_] := Equal[c a, c b]; 

In[112]:= expression = 2 a == a b 

Out[112]= 2 a == a b 

In[113]:= MultBothSides[expression, 1/a] 

Out[113]= 2 == b 

Kann mir jemand auf ein Paket hinweisen, das diese Art von Manipulation unterstützen würde?

bearbeiten

Danke für den Input, nicht ganz das, was ich suche, obwohl für. Die Symbolmanipulation ist nicht wirklich das Problem. Ich suche wirklich nach etwas, das die algebraische oder mathematische Rechtfertigung jedes Schrittes einer Ableitung explizit macht. Mein Ziel ist hier sehr pädagogisch.

+2

Sorry, ich bin ein paar Jahre zu spät ... aber das kleine Paket, das ich hier erwähne http://Stackoverflow.com/q/5701159/667867 sollte tun, was Sie wollen. Lesen Sie die Frage und die Diskussion für Vorbehalte! – telefunkenvf14

Antwort

3

Mathematica bietet auch eine Reihe von High-Level-Funktionen zur Manipulation von Algebraisch. Unter diesen sind Expand, Apart und Together und Cancel, obwohl es noch einige mehr gibt.

Auch für Ihr spezielles Beispiel für die gleiche Transformation auf beiden Seiten einer Anwendung der Gleichung (das heißt, und die Expression mit dem Kopf Equal), können Sie die Thread Funktion verwenden, die genau wie Ihre MultBothSides Funktion funktioniert, aber mit viel mehr Allgemeingültigkeit.

In[1]:= expression = 2 a == a b 
Out[1]:= 2 a == a b 

In[2]:= Thread[expression /a, Equal] 
Out[2]:= 2 == b 

In[3]:= Thread[expression - c, Equal] 
Out[3]:= 2 a - c == a b - c 

In jedem der vorgestellten Lösungen, sollte es relativ einfach sein, zu sehen, was der Schritt mit sich gebracht. Wenn Sie etwas ein wenig expliziter möchten, können Sie Ihre eigene Funktion wie so schreiben:

In[4]:= ApplyToBothSides[f_, eq_Equal] := Map[f, eq] 

In[5]:= ApplyToBothSides[4 * #&, expression] 
Out[5]:= 8 a == 4 a b 

Es ist eine Verallgemeinerung Ihrer MultBothSides Funktion, die sich die Tatsache zunutze nimmt, dass Map Arbeiten auf Ausdrücke mit jedem Kopf, nicht nur Kopf List. Wenn Sie versuchen, mit einem Publikum zu kommunizieren, das mit Mathematica nicht vertraut ist, kann die Verwendung dieser Art von Namen Ihnen helfen, klarer zu kommunizieren. Wenn Sie Ersatzregeln verwenden möchten, wie von Ira Baxter vorgeschlagen, kann es hilfreich sein, anstelle von /. syntaktischen Zucker auf Replace oder ReplaceAll zu schreiben.

In[6]:= ReplaceAll[expression, a -> (x + y)] 
Out[6]:= 2 (x + y) == b (x + y) 

Wenn Sie denken, es klarer sein würde, die tatsächlichen Gleichung zu haben, anstatt der Variablennamen expression, in Ihrem Eingang, und Sie sind mit dem Notebook-Schnittstelle, markieren Sie das Wort expression mit der Maus aufrufen das Kontextmenü und wählen Sie "In Place auswerten".

Das Notebook-Interface ist auch eine sehr angenehme Umgebung für "latete Programmierung", so dass Sie auch alle Schritte erklären können, die nicht sofort in Worte zu fassen sind. Ich glaube, dass dies eine gute Übung ist, wenn mathematische Beweise unabhängig vom Medium geschrieben werden.

+1

Danke für Ihre Antwort. Ich hatte gehofft, dass ein solches Paket in dieser Form bereits existiert, aber der Punkt, den Sie machen, wird mir helfen, mit meinem eigenen Paket anzufangen. –

2

Ich glaube nicht, dass Sie ein Paket benötigen. Was Sie tun möchten, ist, jede Formel gemäß einer Inferenzregel zu manipulieren. In MMa können Sie Inferenzregeln für eine Formel mithilfe von Transformationen modellieren. Also, wenn Sie eine Formel f haben, können Sie eine Inferenzregel I durch die Ausführung gelten (meine MMa Syntax ist 15 Jahre rostig)

f ./ I 

die nächste Formel in der Sequenz zu erzeugen.

MMa wird natürlich versuchen, Ihre Formeln zu vereinfachen, wenn sie algebraische Standardoperatoren und Terme enthalten, wie zB konstante Zahlen und arithmetische Operatoren. Sie können verhindern, dass MMa seine eigenen "Inferenz" -Regeln anwendet, indem Sie Ihre Formel in ein Formular Halten [...] einschließen.

Verwandte Themen