Wie löst man mit Maxima lineare Gleichungssysteme?

Hier sind 2 Möglichkeiten, um lineare Gleichungssysteme von Maxima lösen zu lassen:

Es kann übersichtlicher sein, wenn man den Gleichungen zunächst Abkürzungen zuordnet (z.B. gl1, gl2, ...) und diese anstelle der Gleichungen nutzt.


Im folgenden Beispiel ist die 2. Gleichung ein Vielfaches der 1. Gleichung. Die Lösung des Gleichungssystems enthält die zusätzliche (frei wählbare) Variable %r1. Für verschiedene Werte von %r1 erhält man verschiedene Lösungswerte x, y und z.

Die Lösung kann auch mehrere (frei wählbare) Variablen (hier %r4 und %r5) enthalten:

Gleichungssysteme ohne Lösung:

Wie veranschaulicht man Gleichungen?

Stellt man die Gleichung 2x+y+5z=50nach z etwa zu z=-(y+2x-50)/5 um, so kann hiermit zu jedem x/y-Wertepaar ein z-Wert berechnet werden. Im Koordinatensystem kann somit jedem Punkt in der x/y-Ebene ein z-Wert zugeordnet werden (rote Hilfslinien), wodurch man einen Punkt (blau) im Koordinatensystem erhält. 

Zum Kopieren und Einfügen:

gl1:-2*(x-10)-(y-10)-5*(z-4)=0$

gl2:solve(gl1,z)$

load(draw)$

draw3d(  

grid=true,  

user_preamble="set xyplane at 0",

zrange = [0,15],

xlabel="x", ylabel="y", zlabel="z",

surface_hide=true,

points_joined=true,

point_size=0,color=red,         

points([[2,0,0],[2,6,0],[2,6,8]]),

points([[0,6,0],[2,6,0]]),

points([[8,0,0],[8,1,0],[8,1,33/5]]),

points([[0,1,0],[8,1,0]]),

points_joined = false,

point_size=3,point_type=filled_square,color=blue,

points([[2,6,8],[8,1,33/5]]),

key=string(gl2),color=green,implicit(gl1,x,0,10,y,0,10,z,0,15));

 

 

Setzt man in der Gleichung z=-(y+2x-50)/5 die Variable y=0 erhält man die Gleichung z=-(2x-50)/5. Das ist die Gleichung der blauen Geraden in der xz-Ebene an der Stelle y=0. Für andere y-Werte erhält man wieder Geraden (in rot dargestellt), die hier parallel zur xz-Ebene oberhalb der zugehörigen y-Werte verlaufen. 

Zum Kopieren und Einfügen:

gl1:-2*(x-10)-(y-10)-5*(z-4)=0$

gl2:solve(subst(y=0,gl1),z)$

load(draw)$

draw3d(  

grid=true,  

user_preamble="set xyplane at 0",

zrange = [0,15],

xlabel="x", ylabel="y", zlabel="z",

surface_hide=true,

color=green,implicit(gl1,x,0,10,y,0,10,z,0,15),

color=red, line_width = 3,makelist(implicit(gl1,x,0,10,y,k,k,z,0,15),k,1,10),

color=blue, line_width = 3,key=string(gl2),implicit(gl1,x,0,10,y,0,0,z,0,15));

 

 

Wie veranschaulicht man Gleichungssysteme?

Das 1. Beispiel hatte eine eindeutige Lösung (ungefähr bei x=-4, y=-10 und z=-4), weil sich die durch die Gleichungen festgelegten Ebenen in einem Punkt schneiden:

Zum Kopieren und Einfügen:

gl1:2*x+y-5*z=4$

gl2:3*x-2*y+2*z=1$

gl3:4*x-y-z=0$

load(draw)$

draw3d(    

x_voxel=15, y_voxel=15, z_voxel=15,

xlabel="x", ylabel="y", zlabel="z",

surface_hide=true,

key=string(gl1),color=green,implicit(gl1,x,-8,0,y,-14,-8,z,-8,0),

key=string(gl2),color=blue,implicit(gl2,x,-8,0,y,-14,-8,z,-8,0),

key=string(gl3),color=red,implicit(gl3,x,-8,0,y,-14,-8,z,-8,0));

 

Das 2. Beispiel hatte unendlich viele Lösungen, weil die blaue und grüne Ebene identisch sind und sich mit der roten Ebene in einer Geraden (aus unendlich vielen Punkten) schneiden:

Das 3. Beispiel hatte wieder unendlich viele Lösungen, weil die rote, blaue und grüne Ebene identisch sind und somit eine Ebene mit unendlich vielen Punkten bilden:

Das vierte Beispiel hatte keine Lösung. Das liegt daran, dass zwei Ebenen parallel liegen und somit keinen gemeinsamen Schnittpunkt haben können:

Gleichungssysteme in Matrixschreibweise lösen

Matrixoperationen zum Lösen von Gleichungssystemen

Um die Koeffizienten eines Gleichungssystems als Matrix darzustellen, benutzt man den Befehl

augcoefmatrix([Gleichungen],[Variablen])

Die Zeilenstufenform dieser Matrix erhält man mit dem Befehl

triangularize(Matrix)

Um Matrizen umzuformen, benutzt man die Befehle rowswap und rowop:

rowswap(M,i,j)         Vertauscht die Zeilen i und j der Matrix M

rowop(M,i,j,k)          Subtrahiert von Zeile i das k fache von Zeile j

rowop(M,i,i,1-k)       Multipliziert Zeile i mit Faktor k