Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

FBMath

von RedakteurnemoredSeite 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

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 06.11.2010 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 12.11.2010 von Redakteurnemored gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen