Título de la ventana "3x3-Matrixinversion por Division el Adjungierten por Determinante"
' (CL) Copyleft 2012-08 by P.Pájaro carpintero@gmx.at
' Genauigkeit en Verwendung de DoublePrecision: 12 signifikante Stellen. (~ 8*10^-13)
Font 2:Selección aleatoria:Cls rnd(8^8):set("decimals",12):set("numwidth",23)
proc Show : parámetros M![]
whileloop 0,n&:i&=&Loop:whileLoop 0,n&:j&=&Loop
imprimir M![i&,j&],:endwhile :imprimir:endwhile
ENDPROC
' EINGABETEIL
Var n&=3:dec n&:Declarar M![n&,n&], Inv![2,2],Det!,s$,m$[],i&,j&
imprimir "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"
' Hier se el zeilenweise Form en el spaltenweise Datenhaltung de XProfan gewandelt:
m$[]=explode(s$,",")
whileloop 0,n&:i&=&Loop:whileloop 0,n&:j&=&Loop
m![j&,i&]=val(m$[3*j&+i&]):endwhile :endwhile :clear m$[]
Show M![]
imprimir "\nDeterminante = ";Det3x3(M![])
imprimir "\nAdjungierte[]:\n"
Show Adjoint3x3(M![]): imprimir
imprimir "\nInvertierte[]: ";
Inv![] = Invt3x3(M![])
if Inv![0,0]<>-1*10^-38
imprimir:imprimir
Show Inv![] : imprimir
imprimir "\nZur Probe: Invertierte rückinvertieren:\n"
Inv![] = Invt3x3(Inv![]) : Show Inv![] : imprimir
más
Imprimir "\nEINE INVERTIERUNG IST BEI DIESEN EINGABEDATEN LEIDER NICHT MÖGLICH! "
endif
WaitInput
End
' ________________________________________
proc Invt3x3
parámetros A![]
declarar Invt![2,2],Adju![2,2],Det!
Det!=Det3x3(A![])
if Det!<>0
Adju![]=Adjoint3x3(A![])
whileloop 0,2:i&=&Loop:whileloop 0,2:j&=&Loop
invt![i&,j&] = adju![i&,j&] / Det! :endwhile : endwhile
más
sound 2300,300:beep
imprimir " E R R O R: DETERMINANTE = NULL!"
erase invt![]
invt![0,0]=-1*10^-38
endif
volver Invt![]
ENDPROC
proc Det3x3 :parámetros A![]
volver 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 : parámetros A![]
Declarar Adju![2,2]' = 3x3-Matrix !
' Beschleunigung por Variablenfassung el jeweils
' doppelt vorkommenden Productos wäre todavía posible!
' Línea 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]
' Línea 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]
' Línea 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]
volver adju![]
ENDPROC