Español
Fuente/ Codesnippets

3x3-Matrix invertieren con Determinantenmethode

 

p.specht

El Determinantenmethode kann en pequeño Matrizen Geschwindigkeits- y Genauigkeitsvorteile haben. Ab 4x4 son el üblichen Verfahren (Gauß-Jordan etc) ya überlegen.
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

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



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

451 Views

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

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie