Aufgabe_16.mws

Eine Bearbeitung der   Aufgabe (16)  mit Maple.

Wenn Sie Zugang zu einer Maple-Version ab 9.5 haben - z.B. ueber die Ihnen am Standort Wechloy zugaenglichen Rechner - dann können Sie hier meine mws-Datei runterladen.

>    restart:

>    with(LinearAlgebra):with(plots):

Warning, the name changecoords has been redefined

Die gegebenen Punkte sind:

>    a1,a2,a3,a4,a5,a6:=<5,3,2>,<3,-1,3>,<1,5,1>,<4,2,-1>,<-1,-3,1>,<3,3,3>;

a1, a2, a3, a4, a5, a6 := Vector(%id = 538940), Vector(%id = 538980), Vector(%id = 539060), Vector(%id = 539140), Vector(%id = 539220), Vector(%id = 539300)

Zusammengefasst zu einer Matrix:

>    A6:=Matrix([seq(a||k,k=1..6)]);

A6 := Matrix(%id = 561392)

Der zu betrachtende Punkt ist:

>    beta:=1/6*<1,1,1,1,1,1>:x:=Multiply(A6,beta);

x := Vector(%id = 539380)

Man kann sich das wie folgt ansehen und drehen mit der Maus:

>    P1:=pointplot3d({seq(a||k,k=1..6)},axes=BOXED,symbol=box, symbolsize=20,axes=boxed,labels=[xx,yy,zz],color=red):

>    P2:=pointplot3d({x},axes=BOXED,symbol=box,symbolsize=20,axes=normal,labels=[xx,yy,zz],color=blue):

>    display(P1,P2);

[Maple Plot]

Nun zur Lösung der Aufgabe:

Gesucht  ist eine Linearkombination der a1,...,a6, die 0 ergibt und mit Koeffizientensumme 0. Siehe Beweis des Satzes von Radon.

>    A61:=<A6,<1|1|1|1|1|1>>;

A61 := Matrix(%id = 566560)

>    sols:=LinearSolve(A61,<0,0,0,0>,free=s);

sols := Vector(%id = 539500)

Wähle nun willkürlich (Strategie ?) eine Lösung

>    alpha:=map(u->subs(s[4]=0,s[6]=11,u),sols);

alpha := Vector(%id = 539580)

Normierung, so dass die Summe der positiven Einträge 1 ergibt:

>    alpha:=1/21*alpha;

alpha := Vector(%id = 539620)

Nun folge ich dem Beweis des Satzes von Caratheodory. Die beta[i]   sind hier entsprechend der Aufagbenstellung alle 1/6  .

Das Minimum der beta[i]/alpha[i]   ist hier 21/66  .

Dann wird gesetzt

>    g6:=Add(beta,alpha,1,-21/11/6);

g6 := Vector(%id = 539660)

Nun wird durch Nachrechnen bestätigt, dass der gegebene Punkt x   auch durch folgende Kombination dargestellt werden kann:

>    Multiply(A6,g6);

Vector(%id = 539700)

Nun ist das Gleiche mit den 5 verbleibenden Punkten a1,...,a5 zu machen. Dabei ist jetzt

>    L:=[]: for k to 6 do if not g6[k]=0 then L:=[op(L),k]; fi;od;
if nops(L)<5 then print(`Vorsicht: mehr als ein Eintrag 0`);fi; #print(L):

>    beta||5:=g6[L];

beta5 := Vector(%id = 539740)

>    A5:=A6[1..3,L];

A5 := Matrix(%id = 590504)

>    A51:=<A5,<1|1|1|1|1>>;

A51 := Matrix(%id = 594240)

>    sols5:=LinearSolve(A51,<0,0,0,0>,free=s);

sols5 := Vector(%id = 539900)

wähle willkürlich (Strategie ?) eine Lösung

>    alpha||5:=map(u->subs(s[4]=22,u),sols5);

alpha5 := Vector(%id = 539980)

Normierung, so dass die Summe der positiven Einträge 1 ergibt:

>    r:=0:
for k to 5 do
if alpha||5[k]<0 then r:=r+alpha||5[k];
fi;od:

>    alpha5:=Multiply(1/r,alpha||5);

alpha5 := Vector(%id = 540060)

Das Minimum der beta || 5[i]/alpha[i]   ist hier 4/561  :

>    seq(beta||5[k]/alpha||5[k],k=1..5);

105/638, -120/187, -285/187, -15/22, 75/352

>    m:=add(abs(beta||5[k]/alpha||5[k]),k=1..5):

>    for k to 5 do if beta||5[k]/alpha||5[k]>0 and beta||5[k]/alpha||5[k]<m then m:=beta||5[k]/alpha||5[k];fi;od;m;

105/638

Dann wird gesetzt

>    g5:=Add(beta||5,(-m)*alpha5);

g5 := Vector(%id = 540100)

>    Multiply(A5,g5);

Vector(%id = 540180)

Die Frage ob es mit weniger als vier Vektoren geht bleibt offen. Dies kann allerdings nur dann eintreten, wenn der Punkt x zusammen auf einer Grade oder Ebene liegt, die von zweien oder dreien der a1,..., a6 aufgespannt wird.

Eine alternative Lösung der Aufgabe  wäre:

Durch eine Skizze geeignete Punkte erraten. Obiger Punktgraph legte mir z.B. dann nahe, es mit den Punkten   a1, a3, a5, a6   zu versuchen. Das klappte dann aber nicht.

Natürlich kann man Maple auch einfach suchen lassen, um alle Möglichkeiten zu finden:

>    M:={1,2,3,4,5,6}:

>    for i to 5 do

>    for j from i+1 to 6 do

>    MM:=convert(M minus {i,j},list);

>    for k to 4 do n:=MM[k];b||k:=a||n;od;

>    Ax:=<b1|b2|b3|b4>;

>    Ax1:=<Ax,<1|1|1|1>>;

>    solx:=LinearSolve(Ax1,<x,1>,free=sx);

>    if not solx[1,1]<0 and not solx[2,1]<0 and not solx[3,1]<0 and not solx[4,1]<0 then
print(Spaltenauswahl=MM,Koeffizientenvektor=solx,`Summe der Koeffizienten`=add(solx[k,1],k=1..4),`Probe:  Spaltenauswahlmatrix*Koeffizientenvektor`= Multiply(Ax,solx));fi;

>    od;

>    od:

Spaltenauswahl = [2, 4, 5, 6], Koeffizientenvektor = Matrix(%id = 609668), `Summe der Koeffizienten` = 1, `Probe:  Spaltenauswahlmatrix*Koeffizientenvektor` = Matrix(%id = 615924)

Spaltenauswahl = [2, 3, 4, 5], Koeffizientenvektor = Matrix(%id = 617320), `Summe der Koeffizienten` = 1, `Probe:  Spaltenauswahlmatrix*Koeffizientenvektor` = Matrix(%id = 622676)

Spaltenauswahl = [1, 4, 5, 6], Koeffizientenvektor = Matrix(%id = 624072), `Summe der Koeffizienten` = 1, `Probe:  Spaltenauswahlmatrix*Koeffizientenvektor` = Matrix(%id = 626764)

Spaltenauswahl = [1, 3, 4, 5], Koeffizientenvektor = Matrix(%id = 631724), `Summe der Koeffizienten` = 1, `Probe:  Spaltenauswahlmatrix*Koeffizientenvektor` = Matrix(%id = 634488)

Man sieht, es klappt sogar mehrfach!

>