Español
Fuente/ Codesnippets

Polynome a ca. 12. Grades lösen - Das Bairstow-Verfahren

 

p.specht

Im Juli 2011 de VisualBasic después de Profano11.2a übertragen. Demo sin jede Gewähr!
'Var Koeff$="1,10"
'Var Koeff$="10,0,-1000"
'Var Koeff$="1,-10,0,100,0,10,0,1,0,-1000"
Var Koeff$="10,0,-20.2,1.8,-40,300,-1,0"
Título de la ventana "Nullstellen de Polynomen - Bairstow-Verfahren"
' Quelle: https://www.rhirte.de/vb/home2.htm
' Umsetzung des VB-Programms de Prof.em. Dr.Rolf Hirte, Technische Fachhochschule Wildau
' después de XProfan 11.2a; Nur a Demonstration gedacht; Keine Garantie! Demoware only!
' Begleittext: El Solución de Polynomausdrücken (Nullstellensuche) se unbequem, si el
' Polynom etwa vom Grade 5 oder z,B. 25 es. Bairstow verfährt esta folgendermaßen:
' Er spaltet en uno Iteration laufend el quadratischen Faktoren de, el entonces en bekannter Weise
' (Satz de Vieta) gelöst voluntad - el así largo, a el Restpolynom vom Grade 0 oder 1 es.
' Der Anwender muß LEDIGLICH cada Koeffizienten des en Normalform "Polynom = 0" gebrachten Polynoms
' en fallender Potenz bereitstellen (Texto en starker Anlehnung a el genannte Quelle).
'
' WIR HIER packen el Koeffizienten sowie el Absolutglied después de fallendem Exponenten en una
' Komma-separierten String, z.B. Var Koeff$="10,20,-2.2,1.8,-40,300,1.1111111,0", siehe 1. Línea.
' Danach gehts los:
Cls
Font 2
AppendMenuBar 253,"Run Bairstow"
AppendMenuBar 252,"Finish"
imprimir
Declarar Grad&,A$[],A![],W!
A$[]=Explode(Koeff$,","):Grad&=SizeOf(A$[])-1
SetSize A![],Grad&

WhileLoop 0,Grad&

    A![&Loop]=val(A$[Grad&-&Loop])

EndWhile

WhileLoop Grad&,0,-1

    Conjunto("NumWidth",1) :set("Decimals",0)

    if &Loop<Grad&:imprimir " +";:más:imprimir "  ";:endif

        Imprimir "X^";&Loop,
        Conjunto("NumWidth",26):set("Decimals",15):Imprimir " veces ";A![&Loop]

    EndWhile

    Imprimir:Imprimir " Für Berechnungsstart Por favor, Taste drücken!"
    WaitInput
    CLS
    Conjunto("NumWidth",1) :set("Decimals",0)
    Imprimir "Das gegebene Polynom vom Grad ";Grad&;" ha folgende Nullstellen:":Imprimir
    Bairstow(A![])
    WaitInput
    End'Main

    Proc Bairstow

        Parámetros A![]
        Var Grad& = SizeOf(A![])-1
        Declarar i&,R!,P!,P1!,Q!,Q1!,Ce!,s!,t!
        Declarar B![Grad&],C![Grad&]
        set("NumWidth",20):set("Decimals",15)

        Mientras que Grad& > 2

            R! = 0
            P1! = 1
            Q1! = -1
            B![Grad&] = A![Grad&]
            C![Grad&] = A![Grad&]

            Repeat

                P! = P1!
                Q! = Q1!
                B![Grad&-1] = B![Grad&] * P! + A![Grad& - 1]
                C![Grad&-1] = B![Grad&-1] + B![Grad&] * P!

                Whileloop Grad& - 2 , 0 , -1 : i& = &Loop'For

                    B![i&] = B![i& + 2] * Q! + B![i& + 1] * P! + A![i&]
                    C![i&] = C![i& + 2] * Q! + C![i& + 1] * P! + B![i&]

                EndWhile' Next

                Ce! = C![2] * C![2] - C![1] * C![3]
                caso Ce! = 0 : Imprimir " Andere Startwerte nötig!"
                P1! = P! - (B![1] * C![2] - B![0] * C![3]) / Ce!
                Q1! = Q! - (B![0] * C![2] - B![1] * C![1]) / Ce!
                R! = R! + 1

                If R! > 4000

                    Imprimir:Imprimir:Imprimir "   Sorry, después de 4000 Runden no (weitere) Konvergenz!"
                    WaitInput
                    End

                EndIf

            Until Abs(B![0]) + Abs(B![1]) < 10^-12' Innere bucle

            ' Nullstelle des quad. Faktors
            s! = P1! / 2
            t! = P1!*P1! + 4 * Q1!

            If t! < 0

                Imprimir s!;"   + ";0.5 * Sqrt(-t!);"*i "; : comment
                Imprimir s!;"   - ";0.5 * Sqrt(-t!);"*i "; : comment

            Más

                Imprimir s! + 0.5 * Sqrt(t!)
                Imprimir s! - 0.5 * Sqrt(t!)

            EndIf

            whileloop 2,Grad&

                i& = &Loop
                A![i& - 2] = B![i&]

            endwhile

            Grad& = Grad& - 2

        EndWhile' Outer Loop

        If Grad& = 1

            Imprimir -A![0]/A![1]

        Más

            s! = -0.5 * A![1] / A![2]
            t! = A![1] * A![1] - 4 * A![2] * A![0]

            If t! < 0

                Imprimir s!;"   + ";0.5 * Sqrt(-t!) / A![2];"*i "; : comment
                Imprimir s!;"   - ";0.5 * Sqrt(-t!) / A![2];"*i "; : comment

            Más

                Imprimir s! + 0.5 * Sqrt(t!) / A![2]
                Imprimir s! - 0.5 * Sqrt(t!) / A![2]

            EndIf

        EndIf

    ENDPROC

    Proc comment

        if nearly(s!,0,9)

            imprimir "(Imaginär)"

        más

            imprimir "(Komplex)"

        endif

    ENDPROC

 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
18.04.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

727 Views

Untitledvor 0 min.
N.Art01.08.2021
Ernst21.07.2021
Glubbfan19.06.2021
Uwe ''Pascal'' Niemeier13.06.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