Français
Source/ Codesnippets

3x3-Matrix invertieren avec Determinantenmethode

 

p.specht

qui Determinantenmethode peux chez kleinen Matrizen Geschwindigkeits- et Genauigkeitsvorteile avons. Ab 4x4 sommes qui habituel procéder (Gauß-Jordan etc) bereits überlegen.
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

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
08.05.2021  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

458 Views

Untitledvor 0 min.
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
Michael W.28.05.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie