Titre de la fenêtre "3x3-Matrixinversion per Division qui Adjungierten par Determinante"
' (CL) Copyleft 2012-08 by P.Specht@gmx.at
' Genauigkeit chez Verwendung de DoublePrecision: 12 signifikante se mettre. (~ 8*10^-13)
Font 2:Randomiser:Cls rnd(8^8):set("decimals",12):set("numwidth",23)
proc Show : parameters M![]
whileloop 0,n&:i&=&Boucle:whileLoop 0,n&:j&=&Boucle
imprimer M![i&,j&],:endwhile :imprimer:endwhile
endproc
' EINGABETEIL
Var n&=3:dec n&:Déclarer M![n&,n&], Inv![2,2],Det!,s$,m$[],i&,j&
imprimer "Eingabe: Matrixelemente zeilenweise:\n"
' 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2
s$ = " 11.11, 44.44, 99.99, 22.22, 77.77, 66.66, 33.33, 88.88, 0.100000000001"
'Testeingabe: Linear_abhängige_Zeilen:
' 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2
' s$ = " 11.11, 44.44, 99.99, 22.22, 77.77, 66.66, 22.22, 77.77, 66.66"
' Allfällige weitere Testeingaben des Anwenders:
' 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2
' s$ = " 0, 44.44, 99.99, 22.22, 77.77, 66.66, 33.33, 88.88, 0"
' ici wird qui zeilenweise forme dans qui spaltenweise Datenhaltung de XProfan gewandelt:
m$[]=explode(s$,»)
whileloop 0,n&:i&=&Boucle:whileloop 0,n&:j&=&Boucle
m![j&,i&]=val(m$[3*j&+i&]):endwhile :endwhile :clear m$[]
Show M![]
imprimer "\nDeterminante = ";Det3x3(M![])
imprimer "\nAdjungierte[]:\n"
Show Adjoint3x3(M![]): imprimer
imprimer "\nInvertierte[]: ";
Inv![] = Invt3x3(M![])
si Inv![0,0]<>-1*10^-38
imprimer:imprimer
Show Inv![] : imprimer
imprimer "\nZur Probe: Invertierte rückinvertieren:\n"
Inv![] = Invt3x3(Inv![]) : Show Inv![] : imprimer
d'autre
Imprimer "\nEINE INVERTIERUNG IST BEI DIESEN EINGABEDATEN LEIDER NICHT MÖGLICH! "
endif
WaitInput
Fin
' ________________________________________
proc Invt3x3
parameters A![]
declare Invt![2,2],Adju![2,2],Det!
Det!=Det3x3(A![])
si Det!<>0
Adju![]=Adjoint3x3(A![])
whileloop 0,2:i&=&Boucle:whileloop 0,2:j&=&Boucle
invt![i&,j&] = adju![i&,j&] / Det! :endwhile : endwhile
d'autre
sound 2300,300:beep
imprimer " E R R O R: DETERMINANTE = NULL!"
erase invt![]
invt![0,0]=-1*10^-38
endif
return Invt![]
endproc
proc Det3x3 :parameters A![]
return a![0,0]*(a![1,1]*a![2,2]-a![1,2]*a![2,1]) \
- a![0,1]*(a![1,0]*a![2,2]-a![1,2]*a![2,0]) \
+ a![0,2]*(a![1,0]*a![2,1]-a![1,1]*a![2,0])
endproc
proc Adjoint3x3 : parameters A![]
Déclarer Adju![2,2]' = 3x3-Matrix !
' Beschleunigung par Variablenfassung qui jeweils
' doppelt vorkommenden Produits wäre encore possible!
' la ligne 0
adju![0,0]=a![1,1]*a![2,2]-a![1,2]*a![2,1]
adju![0,1]=a![0,2]*a![2,1]-a![0,1]*a![2,2]
adju![0,2]=a![0,1]*a![1,2]-a![0,2]*a![1,1]
' la ligne 1
adju![1,0]=a![1,2]*a![2,0]-a![1,0]*a![2,2]
adju![1,1]=a![0,0]*a![2,2]-a![0,2]*a![2,0]
adju![1,2]=a![0,2]*a![1,0]-a![0,0]*a![1,2]
' la ligne 2
adju![2,0]=a![1,0]*a![2,1]-a![1,1]*a![2,0]
adju![2,1]=a![0,1]*a![2,0]-a![0,0]*a![2,1]
adju![2,2]=a![0,0]*a![1,1]-a![0,1]*a![1,0]
return adju![]
endproc