Tutorial
FBMath
von nemored | Seite 4 von 5 |
Rechnen mit Polynomen
Polynome gehören zu den Funktionen, die am einfachsten gehandhabt werden können, da sich ihre Ableitungen und Integrale leicht bestimmen lassen. Für viele Approximationen werden daher Polynome herangezogen. FBMath stellt für diesen Funktionstyp eigene Befehle zur Verfügung.
Poly(x, koeff(), grad)
berechnet das Polynom p(x) = koeff(0) + koeff(1)*x + koeff(2)*x^2 + ... + koeff(grad)*x^grad für den Wert x
Mit RootPol1(koeff(), nst()), RootPol2(koeff(), nst()), RootPol3(koeff(), nst()), und RootPol4(koeff(), nst()) lassen sich die Nullstellen eines Polynoms 1. bis 4. Grades berechnen. 'koeff()' enthält wiederum die Koeffizienten des Polynoms, während in 'nst()' die Nullstellen als komplexe Zahlen zurückgegeben werden.
Für Polynome höheren Grades werden die Nullstellen mithilfe von RootPol(koeff(), grad, nst()) approximiert.
Beispiel:
#INCLUDE "math.bi"
' Stelle das Polynom p(x) = x^4 - 2*x^2 - 3 bereit
DIM AS DOUBLE koef(4) = {-3, 0, -2, 0, 1}
DIM AS COMPLEX nullstelle(1 TO 4)
PRINT "p(2) = " & Poly(2, koef(), 4) ' berechne p(2)
PRINT
' Bestimme die Nullstellen von p(x)
DIM AS INTEGER anzahl = RootPol4(koef(), nullstelle())
PRINT "Es wurden " & anzahl & " (reelle) Nullstellen gefunden:"
FOR i AS INTEGER = 1 TO anzahl
PRINT "x" & i & " = " & Round(nullstelle(i).x, 2)
NEXT
SLEEP
Leider scheint es keine eingebaute Funktion zu geben, das Ableitungs- bzw. Integralpolynom von p(x) zu bestimmen (sehr wohl gibt es jedoch numerische Berechnungen für die Ableitung bzw. das Integral). Diese lässt sich jedoch sehr leicht selbst verwirklichen. Das unten aufgeführte Beispiel für eine Polynom-Klasse ist noch sehr stark ausbaufähig und soll nur als Anregung dienen.
#INCLUDE "math.bi"
TYPE Polynom
' TYPE für ein Polynom bis zu viertem Grad
AS INTEGER grad
AS DOUBLE koeff(0 TO 4)
END TYPE
FUNCTION PrintPolynom(p as Polynom) AS STRING
'gibt ein Polynom in lesbarer Form zurück
DIM AS STRING ret = ""
FOR i AS INTEGER = p.grad TO 0 STEP -1
IF i = p.grad THEN
' höchsten Koeffizienten mit Vorzeichen ausgeben
IF p.koeff(i) <> 0 THEN ret &= p.koeff(i) & "*x^" & i
ELSE
' bei anderen Koeffizienten das Vorzeichen als Rechenzeichen ausgeben
IF p.koeff(i) < 0 THEN
ret &= " - " & ABS(p.koeff(i))
ELSEIF p.koeff(i) > 0 THEN
ret &= " + " & p.koeff(i)
END IF
' *x^i anhängen (bei Bedarf)
IF p.koeff(i) <> 0 then
IF i > 1 THEN
ret &= "*x^" & i
ELSEIF i = 1 THEN
ret &= "x"
END IF
END IF
END IF
NEXT
RETURN ret
END FUNCTION
FUNCTION Ableitung(p AS Polynom) AS Polynom
' berechnet die Ableitung von p(x) und speichert sie in q(x)
DIM AS Polynom ret
ret.grad = p.grad - 1
FOR i AS INTEGER = p.grad TO 1 STEP -1
ret.koeff(i-1) = i*p.koeff(i)
NEXT
RETURN ret
END FUNCTION
PRINT "Geben Sie die Koeffizenten des Polynoms vierten Grades ein"
PRINT "p(x) = a4*x^4 + a3*x^3 + a2*x^2 + a1*x + a0"
PRINT
DIM AS Polynom p, q
' Polynom eingeben
p.grad = 4
FOR i AS INTEGER = 4 TO 0 STEP -1
PRINT "a" & i & " = ";
INPUT "", p.koeff(i)
NEXT
PRINT
' Das Polynom und seine Ableitung ausgeben
PRINT "p(x) = " & PrintPolynom(p)
q = Ableitung(p)
PRINT "p'(x) = " & PrintPolynom(q)
SLEEP
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|