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:
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));
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:
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