Complex Library / Referenz

 Omikron Basic im Internet: http://www.berkhan.de

Allgemeines -blättern- Inhaltsverzeichnis





2. Complex Library Referenz

2.1 An- und Abmelden der Library
2.2 Funktionen zum Umwandeln zwischen reellem und komplexem Format
2.3 Eingabefunktionen
2.4 Ausgabefunktionen
2.5 Grundrechenarten
2.6 Wichtige nichtanalytische Funktionen
2.7 Transzendente Funktionen
2.8 Polynom-Funktionen
2.9 Matrix-Funktionen
2.10 Komplexes Kurvenintegral




In diesem Kapitel werden alle Funktionen und Prozeduren der Library beschrieben. Der theoretische Hintergrund der einzelnen Prozeduren kann hier natürlich nicht erklärt werden. Sie müssen sich schon mit der Theorie der komplexen Zahlen auskennen, um die Library sinnvoll nutzen zu können.




2.1 An- und Abmelden der Library
 
Cinit
Rufen Sie diese Prozedur zu Beginn Ihres Programms einmal auf. Vorher kann die Complex Library nicht benutzt werden.
Wichtig: Diese Prozedur verändert die DATA-Zeiger. Wenn Sie also Ihre eigenen Daten einlesen wollen nachdem Sie Cinit aufgerufen haben, müssen Sie vorher den DATA-Zeiger mit RESTORE auf die gewünschten Daten setzen.
 
 
Cexit
Rufen Sie diese Prozedur am Ende Ihres Programms einmal auf. Danach können Sie die Complex Library nicht mehr benutzen.
 
 
Complex
Es wird nur eine Copyright-Meldung der Complex Library ausgegeben.
 
 





2.2 Funktionen zum Umwandeln zwischen reellem und komplexem Format
 
FN Cmplx$(Real#,Imag#)
Real# Realteil der complexen Zahl.
Imag# Imaginärteil der complexen Zahl.
Die Funktion liefert einen String zurück, der die komplexe Zahl darstellt.
 
 
FN Re#(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den Realteil der komplexen Zahl Z$ als reelle Zahl zurück.
 
 
FN Im#(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den Imaginärteil der komplexen Zahl Z$ als reelle Zahl zurück.
Beispiel:
PRINT "Der Imaginärteil der Zahl ist: ";FN Im#(Z$)
 
 
FN Re$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den Realteil der komplexen Zahl Z$ als komplexe Zahl zurück.
 
 
FN Im$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den Imaginärteil der komplexen Zahl Z$ als komplexe Zahl zurück.
 
 





2.3 Eingabefunktionen
 
Cinput(T$,R Z$)
T$ Dieser String wird zunächst auf dem Bildschirm ausgegeben. Ist T$ leer, so erfolgt die Abfrage mit "x+iy=? ".
Z$ Enthält nach der Rückkehr die eingegebene komplexe Zahl.
Diese Prozedur dient zur Eingabe von komplexen Zahlen auf dem Bildschirm. Es werden zwei durch Kommata getrennte reelle Zahlen erwartet; zuerst der Realteil, dann der Imaginärteil. Die Eingabe muß mit [Return] abgeschlossen werden.
 
 
Cread(R Z$)
Z$ Enthält nach der Rückkehr die eingelesene komplexe Zahl.
Diese Prozedur dient zum Einlesen komplexer Zahlen aus DATA-Zeilen. Die komplexen Zahlen müssen als je zwei Fließkommazahlen (Realteil, Imaginärteil) in den DATA-Zeilen abgelegt sein.
Beispiel:
Die Zahl
0.3,0.7i soll aus DATA-Zeilen eingelesen werden:

Cinit
RESTORE Cdaten
Cread A$
'
'Hier wird A$ von Ihrem Programm verarbeitet.
'
INPUT "Ende mit [Return]";Dummy
Cexit
END
-Cdaten
DATA 0.3,0.7
 
 
Cmat_Read(&A$(,),M,N)
A$(0:M,0:N) In dieses Feld werden die komplexen Zahlen eingelesen.
M Dimension der Zeilen.
N Dimension der Spalten.
Diese Prozedur liest eine ganze Matrix mit den Dimensionen (M,N) aus DATA-Zeilen ein. Die komplexen Zahlen müssen als je zwei Fließkommazahlen (Realteil, Imaginärteil) in den DATA-Zeilen abgelegt sein.
Es werden zunächst alle Elemente der nullten Zeile, dann die Elemente der ersten Zeile usw. eingelesen.
Beispiel:
Die Matrix
Demo$(2,1) soll eingelesen werden:

Cinit
RESTORE Demo_Daten
DIM Demo$(1,2)
Cmat_Read &Demo$(,),1,2
'
'Hier wird Demo$(,) von Ihrem Programm 'verarbeitet.
'
INPUT "Ende mit [Return]";Dummy
Cexit
END
-Demo_Daten
DATA 3,7,1,-1,5,6.7:'Elemente der nullten Zeile.
DATA 1.3,2,-7.3,4,5,6:'Elemente der ersten Zeile.
 
 
Cpoly_Read(&A$(),N)
A$(0:N) In dieses Feld werden die komplexen Polynom-Koeffizienten eingelesen.
N Grad des Polynoms (höchste Potenz).
Dieses Feld dient zum Einlesen der Koeffizienten eines komplexen Polynoms. Der Grad des Polynoms (höchste Potenz) wird durch den Parameter N angegeben. Zuerst wird der Koeffizient für Z^0 eingelesen, dann der für Z^1 usw.. Sie müssen natürlich vorher mit RESTORE den DATA-Zeiger auf die gewünschten Daten setzen.
Beispiel:
Ein Beispiel finden Sie bei
Cpoly_Add.
 
 
Cinput_File(Handle,R Z$)
Handle Das ist die logische Dateinummer, die bei OPEN angegeben wurde (1 bis 16).
Z$ Enthält nach der Rückkehr die eingelesene komplexe Zahl.
Mit dieser Prozedur kann eine komplexe Zahl aus einer zuvor mit OPEN "I" geöffneten Datei gelesen werden. Die Zahl muß zuvor mit Cwrite_File gespeichert worden sein.
Beispiel:
Einladen von 10 komplexen Zahlen in das Feld
C$(0:9). Die Datei "Complex.DAT" muß natürlich vorher angelgt worden sein:

Cinit
DIM C$(9)
OPEN "I",3,FN Get_Fsspec$(0,0,"Complex.DAT")
FOR I=0 TO 9
 Cinput_File 3,C$(I)
NEXT I
'
'Hier wird Demo$(,) von Ihrem Programm 'verarbeitet.
'
CLOSE 3
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 






2.4 Ausgabefunktionen
 
Cwrite_File(Handle,Z$)
Handle Das ist die logische Dateinummer, die bei OPEN angegeben wurde (1 bis 16).
Z$ Muß die komplexe Zahl enthalten, die geschrieben werden soll.
Es wird eine komplexe Zahl in eine Datei geschrieben. Die Datei muß zuvor mit OPEN "O" oder OPEN "A" geöffnet worden sein.
Beispiel:
Das Beispiel zeigt, wie man eine Zahl
Z$ mit der Complex Library abspeichert und mit Cinput_File wieder einliest:

Cinit
OPEN "O",1,FN Get_Fsspec$(0,0,"Demo.DAT")
Z$=FN Cmplx$(5.5,-3.14)
Cwrite_File 1,Z$
CLOSE 1
OPEN "I",1,FN Get_Fsspec$(0,0,"Demo.DAT")
Cinput_File 1,X$

Cprint X$
CLOSE 1
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 
Cprint(Z$)
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur unformatierten Ausgabe einer komplexen Zahl in der Form " Re+iIm". Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 
Cprint_(Z$)
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur unformatierten Ausgabe einer komplexen Zahl in der Form " Re+iIm". Nach der Ausgabe steht der Schreibzeiger direkt hinter der ausgegebenen Zahl.
 
 
Cprint(T$,Z$)
T$ In dieser Variablen kann ein Text übergeben werden, der vor der komplexen Zahl ausgegeben wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur unformatierten Ausgabe einer komplexen Zahl in der Form " Re+iIm" mit vorangestelltem Text. Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 
Cprint_(T$,Z$)
T$ In dieser Variablen kann ein Text übergeben werden, der vor der komplexen Zahl ausgegeben wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur unformatierten Ausgabe einer komplexen Zahl in der Form " Re+iIm" mit vorangestelltem Text. Nach der Ausgabe steht der Schreibzeiger direkt hinter der ausgegebenen Zahl.
 
 
Cprint_Using(F$,Z$)
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahl verwendet wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur formatierten Ausgabe einer komplexen Zahl. Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 
Cprint_Using_(F$,Z$)
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahl verwendet wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur formatierten Ausgabe einer komplexen Zahl. Nach der Ausgabe steht der Schreibzeiger direkt hinter der ausgegebenen Zahl.
 
 
Cprint_Using(T$,F$,Z$)
T$ In dieser Variablen kann ein Text übergeben werden, der vor der komplexen Zahl ausgegeben wird.
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahl verwendet wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur formatierten Ausgabe einer komplexen Zahl mit vorangestelltem Text. Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 
Cprint_Using_(T$,F$,Z$)
T$ In dieser Variablen kann ein Text übergeben werden, der vor der komplexen Zahl ausgegeben wird.
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahl verwendet wird.
Z$ Muß die komplexe Zahl enthalten, die ausgegeben werden soll.
Diese Prozedur dient zur formatierten Ausgabe einer komplexen Zahl mit vorangestelltem Text. Nach der Ausgabe steht der Schreibzeiger direkt hinter der ausgegebenen Zahl.
 
 
Cmat_Print_Using(F$,&A$(,),M,N)
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahlen verwendet wird.
A$(0:M,0:N) Dieses Feld muß die komplexen Elemente der Matrix enthalten, die ausgegeben werden soll.
M Dimension der Zeilen.
N Dimension der Spalten.
Diese Prozedur dient zur formatierten Ausgabe einer Matrix aus komplexen Zahlen. Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 
Cpoly_Print_Using(F$,&A$(),N)
F$ In dieser Variablen kann ein Format-String wie bei PRINT USING übergeben werden, der dann für die Formatierung der komplexen Zahlen verwendet wird.
A$(0:N) Dieses Feld muß die komplexen Koeffizienten des Polynoms enthalten, das ausgegeben werden soll.
N Grad des Polynoms (höchste Potenz).
Diese Prozedur dient zur formatierten Ausgabe eines komplexen Polynoms. Nach der Ausgabe steht der Schreibzeiger am Anfang der nächsten Zeile.
 
 






2.5 Grundrechenarten
 
FN Cadd$(Z1$,Z2$)
Z1$ Komplexe Zahl.
Z2$ Komplexe Zahl.
Die Funktion gibt die Summe der beiden Zahlen zurück (Z1$+Z2$).
 
 
FN Csub$(Z1$,Z2$)
Z1$ Komplexe Zahl.
Z2$ Komplexe Zahl.
Die Funktion gibt die Differenz der beiden Zahlen zurück (Z1$-Z2$).
 
 
FN Cmul$(Z1$,Z2$)
Z1$ Komplexe Zahl.
Z2$ Komplexe Zahl.
Die Funktion gibt das Produkt der beiden Zahlen zurück (Z1$*Z2$).
 
 
FN Cdiv$(Z1$,Z2$)
Z1$ Komplexe Zahl.
Z2$ Komplexe Zahl.
Die Funktion gibt den Quotienten der beiden Zahlen zurück (Z1$/Z2$).
 
 
FN Rmul$(Re#,Z$)
Re# Reelle Zahl.
Z$ Komplexe Zahl.
Die Funktion gibt das Produkt der beiden Zahlen zurück (Re#*Z$).
 
 
FN Rdiv$(Z$,Re#)
Z$ Komplexe Zahl.
Re# Reelle Zahl.
Die Funktion gibt den Quotienten der beiden Zahlen zurück (Z$/R#).
 
 
FN Imul$(Im#,Z$)
Im# Imaginäre Zahl.
Z$ Komplexe Zahl.
Die Funktion gibt das Produkt der beiden Zahlen zurück (Im#*Z$).
 
 
FN Idiv$(Z$,Im#)
Z$ Komplexe Zahl.
Im# Imaginäre Zahl.
Die Funktion gibt den Quotienten der beiden Zahlen zurück (Z$/Im#).
 
 
FN Cmul_I$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt das Produkt aus der komplexen Zahl und i zurück (i*Z$).
 
 
FN Cdiv_I$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den Qutienten aus der komplexen Zahl und i zurück (Z$/i).
 
 
FN Cch_S$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den negativen Wert der komplexen Zahl zurück (-Z$).
 
 




2.6 Wichtige nichtanalytische Funktionen
 
FN Cconj$(Z$)
Z$ Komplexe Zahl.
Die Funktion gibt den komplex-konjugierten Wert der komplexen Zahl zurück.
 
 
FN Cabs$(Z$)
Z$ Komplexe Zahl.
Die Funktion berechnet den Betrag der komplexen Zahl (SQR(Re^2+Im^2)). Das Ergebnis wird als komplexe Zahl zurückgegeben.
 
 
FN Cabs#(Z$)
Z$ Komplexe Zahl.
Die Funktion berechnet den Betrag der komplexen Zahl (SQR(Re^2+Im^2)). Das Ergebnis wird als reelle Zahl zurückgegeben.
 
 
FN Cabs_Sqrd$(Z$)
Z$ Komplexe Zahl.
Die Funktion berechnet das Quadrat des Betrags der komplexen Zahl (Re^2+Im^2). Das Ergebnis wird als komplexe Zahl zurückgegeben. Die Funktion ist etwas schneller als FN Cabs$(Z$).
 
 
FN Cabs_Sqrd#(Z$)
Z$ Komplexe Zahl.
Die Funktion berechnet das Quadrat des Betrags der komplexen Zahl (Re^2+Im^2). Das Ergebnis wird als reelle Zahl zurückgegeben. Die Funktion ist etwas schneller als FN Cabs#(Z$).
 
 
Cart_To_Polar(Z$,R A#,R P#)
Z$ Komplexe Zahl.
A# Absoluter Betrag der komplexen Zahl Z$ (Abstand vom Ursprung).
P# Phase der komplexen Zahl Z$ (Winkel mit der reellen Achse).
Die Prozedur berechnet Betrag und Phase der komplexen Zahl Z$. Der Wert der Phase ist abhängig vom eingestellten Winkelmodus (DEG bzw. RAD)
 
 
FN Polar_To_Cart$(A#,P#).
A# Absoluter Betrag einer komplexen Zahl (Abstand vom Ursprung).
P# Phase einer komplexen Zahl (Winkel mit der reellen Achse).
Wenn Sie dieser Funktion die Polarkoordinaten einer komplexen Zahl übergeben, erhalten Sie die Zahl als String zurück.
 
 





2.7 Transzendente Funktionen


Bei einigen der folgenden Funktionen sind Intervallgrenzen angegeben. Dabei bedeutet z.B. [100,200] das Intervall, das die Punkte 100 und 200 mit einschließt und [100,200[ einschließlich 100 aber ausschließlich 200.

Einige Funktionen (etwa der Logarithmus) kommen zweimal vor. Dies hängt damit zusammen, daß diese Funktionen erst durch einen Schnitt in der komplexen Ebene eindeutig bestimmt werden. Bei der Wahl dieses Schnitts hat man verschiedene Möglichkeiten, i.a. wählt man ihn so, daß sich die komplexe Funktion als maximale analytische Fortsetzung der entsprechenden reellen Funktion ergibt. Der so bestimmte Schnitt ist in der Complex Library mit dem Standardnamen, den auch die reelle Funktion hat, benannt. Wenn ein anderer Schnitt gewählt wurde, so ist das an der Extension "
_P" hinter dem Prozedur- oder Funktionsnamen zu erkennen. "_P" soll auf den Schnitt [0,INF] hinweisen (Positiv).
Als Benutzer wird man im allgemeinen die Hauptzweige wählen, also die Namen ohne Extension. Die Definition der Funktionen auf den Schnitten ist allerdings eine Frage derKonvention, und deswegen können sich die Implementierungen in der Complex Library von denen auf anderen Systemen unterscheiden.
 

FN Cexp$(Z$)
Z$ Komplexe Zahl.
Exponential-Funktion mit komplexem Argument zur Basis e.
 
 
FN Iexp$(Im#)
Im# Imaginäre Zahl.
Exponential-Funktion mit rein imaginärem Argument zur Basis e.
 
 
FN Rexp$(Re#)
Re# Reelle Zahl.
Exponential-Funktion mit rein reellem Argument zur Basis e.
 
 
FN Csin$(Z$)
Z$ Komplexe Zahl.
Sinus mit komplexem Argument.
 
 
FN Ccos$(Z$)
Z$ Komplexe Zahl.
Kosinus mit komplexem Argument.
 
 
FN Ctan$(Z$)
Z$ Komplexe Zahl.
Tangens mit komplexem Argument.
 
 
FN Ccot$(Z$)
Z$ Komplexe Zahl.
Kotangens mit komplexem Argument.
 
 
FN Csec$(Z$)
Z$ Komplexe Zahl.
Secans mit komplexem Argument.
 
 
FN Ccosec$(Z$)
Z$ Komplexe Zahl.
Kosecans mit komplexem Argument.
 
 
FN Csinh$(Z$)
Z$ Komplexe Zahl.
Sinus Hyperbolicus mit komplexem Argument.
 
 
FN Ccosh$(Z$)
Z$ Komplexe Zahl.
Kosinus Hyperbolicus mit komplexem Argument.
 
 
FN Ctanh$(Z$)
Z$ Komplexe Zahl.
Tangens Hyperbolicus mit komplexem Argument.
 
 
FN Ccoth$(Z$)
Z$ Komplexe Zahl.
Kotangens Hyperbolicus mit komplexem Argument.
 
 
FN Csech$(Z$)
Z$ Komplexe Zahl.
Secans Hyperbolicus mit komplexem Argument.
 
 
FN Ccosech$(Z$)
Z$ Komplexe Zahl.
Kosecans Hyperbolicus mit komplexem Argument.
 
 
FN Cln$(Z$)
Z$ Komplexe Zahl.
Hauptzweig des natürlichen Logarithmus mit Schnitt [-INF,0]
 
 
FN Cln_P$(Z$)
Z$ Komplexe Zahl.
Natürlicher Logarithmus mit Schnitt [0,+INF]
 
 
FN Casin$(Z$)
Z$ Komplexe Zahl.
Arcus Sinus mit Schnitt [-INF,-1[ und ]1,+INF]
 
 
FN Cacos$(Z$)
Z$ Komplexe Zahl.
Arcus Cosinus mit Schnitt [-INF,-1[ und ]1,+INF]
 
 
FN Catan$(Z$)
Z$ Komplexe Zahl.
Arcus Tangens mit Schnitt und [-INF*i,-i[ und ]i,INF*i]
 
 
FN Cacot$(Z$)
Z$ Komplexe Zahl.
Arcus Kotangens mit Schnitt [-i,i]
 
 
FN Casinh$(Z$)
Z$ Komplexe Zahl.
Area Sinus Hyperbolicus mit Schnitt [-INF*i,-i] und [i,INF*i]
 
 
FN Cacosh$(Z$)
Z$ Komplexe Zahl.
Area Kosinus Hyperbolicus mit Schnitt [-INF,1]
 
 
FN Catanh$(Z$)
Z$ Komplexe Zahl.
Area Tangens Hyperbolicus mit Schnitt [-INF,-1] und [1,INF]
 
 
FN Cacoth$(Z$)
Z$ Komplexe Zahl.
Area Cotangens Hyperbolicus mit Schnitt [-1,1]
 
 
FN Crecp$(Z$)
Z$ Komplexe Zahl.
Reziprokwert (1/Z$).
 
 
FN Crecp2$(Z$,A$)
Z$ Komplexe Zahl.
A$ Komplexe Zahl um die der Wert Z$ verschoben werden soll.
Verschobener Reziprokwert (1/(Z$-A$)).
 
 
FN Csqr$(Z$)
Z$ Komplexe Zahl.
Die Quadratwurzel des Hauptzweigs, Schnitt [-INF,0]
 
 
FN Csqr_P$(Z$)
Z$ Komplexe Zahl.
Quadratwurzel, Schnitt [0,INF]
 
 
FN Csqrd$(Z$)
Z$ Komplexe Zahl.
Das Quadrat der komplexen Zahl Z$.
 
 
FN Rpower$(Z$,E#)
Z$ Komplexe Zahl.
E# Reeller Exponent.
Berechnet Z$^E#.
 
 
FN Cpower$(Z$,E$)
Z$ Komplexe Zahl.
E$ Komplexer Exponent.
Berechnet Z$^E$.
 
 
FN C1_P_Sqrd$(Z$)
Z$ Komplexe Zahl.
Berechnet 1+Z$^2.
 
 
FN C1_M_Sqrd$(Z$)
Z$ Komplexe Zahl.
Berechnet 1-Z$^2.
 
 
FN Cm1_P_Sqrd$(Z$)
Z$ Komplexe Zahl.
Berechnet -1+Z$^2.
 
 
FN Cm1_M_Sqrd$(Z$)
Z$ Komplexe Zahl.
Berechnet -1-Z$^2.
 
 
CFN C1_P_Sqrd$(Z$)
Z$ Komplexe Zahl.
Berechnet 1+Z$^2.
 
 
Croots(Z$,&A$(),N)
Z$ Komplexe Zahl.
A$(0:N) In dieses Feld werden die Wurzeln der komplexen Zahl Z$ eingetragen.
N Gibt den Grad der Wurzelberechnung an.
Berechnet die (N+1)-te Wurzel aus Z$. Weil eine komplexe Zahl genau N N-te Wurzeln hat, berechnet die Prozedur auch N Werte. Diese werden in dem Stringfeld A$() abgelegt, das mindestens auf N-1 dimensioniert sein muß.
Beispiel:
Als Beispiel sollen die 3-ten Wurzeln von -7 berechnet werden.


Cinit
DIM R$(2)
Z$=FN Cmplx$(-7,0)
Croots Z$,&R$(),2
Cprint R$(0):Cprint R$(1):Cprint R$(2)
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 





2.8 Polynom-Funktionen


Die Complex Library stellt diverse Funktionen bereit, die das Arbeiten mit Polynomen mit komplexen Koeffizienten vereinfachen. Ein solches Polynom ist durch seine Koeffizienten vollständig bestimmt, also durch eine Anzahl komplexer Zahlen (einen Vektor). In der Complex Library wird ein Polynom aus diesem Grund durch ein eindimensionales String-Array dargestellt. Dabei enthält das erste Element (also z.B.
Poly$(0)) den konstanten Koeffizienten, Poly$(N) den Koeffizienten von Z$^N.
 
Cpoly_Clear(&A$(),N)
A$(0:N) Komplexe Koeffizienten des Polynoms.
N Grad des Polynoms (höchste Potenz).
Nach der Dimensionierung enthalten die Elemente eines Stringfeldes Leerstrings und der Leerstring repräsentiert nicht die komplexe Null. Diese Prozedur setzt die Elemente des Feldes A$(0:N) auf komplexe Nullen.
Beispiel:
Wir wollen mit einem Polynom arbeiten, für das wir den Namen
Polynom$() gewählt haben. Die maximale Potenz, die in unserem Polynom vorkommt, sei Z$^15. Wir wollen das Polynom zunächst einrichten und auf Null setzen:

Cinit
DIM Polynom$(15)
Cpoly_Clear &Polynom$(),15
Cpoly_Print_Using "",&Polynom$(),15
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 
Cpoly_Equal(&A$(),&C$(),N)
A$(0:N) Komplexe Koeffizienten des Quell-Polynoms.
C$(0:N) Komplexe Koeffizienten des Ziel-Polynoms.
N Grad des Polynoms (höchste Potenz).
Diese Prozedur weist das Polynom A$(0:N) dem Polynom C$(0:N) zu. Sie entspricht also dem BASIC-Befehl C=A, nur daß hier ein ganzes Polynom zugewiesen wird und nicht nur eine einzelne Zahl.
 
 
Cpoly_Add(&A$(),&B$(),&C$(),M,N)
A$(0:M) Komplexe Koeffizienten des ersten Summanden.
B$(0:N) Komplexe Koeffizienten des zweiten Summanden.
C$(0:MAX(M,N)) Komplexe Koeffizienten des Summen-Polynoms.
M Grad des Polynoms A$() (höchste Potenz).
N Grad des Polynoms B$() (höchste Potenz).
Diese Prozedur addiert das Polynom A$() zum Polynom B$() und legt das Ergebnis in C$() ab (C$()=A$()+B$()). Das geschieht durch Aufaddieren der Koeffizienten gleicher Potenzen.
Beispiel:
Als Beispiel sollen die Polynome
Poly1$(0:3) und Poly2$(0:8) addiert und das Ergebnis in Poly3$() abgelegt werden:

Cinit
DIM Poly1$(3),Poly2$(8),Poly3$(8)
RESTORE Polynoms
Cpoly_Read &Poly1$(),3
Cpoly_Read &Poly2$(),8
Cpoly_Add &Poly1$(),&Poly2$(),&Poly3$(),3,8
Cpoly_Print_Using "",&Poly3$(),8
INPUT "Ende mit [Return]";Dummy
Cexit
END
-Polynoms
DATA 1.2,-1,7.5,-2,3.14,3,5.3,7.2
DATA -5.7,-22.13,1,2.5,7,-2.77,11.23,0.123,5.6
DATA 5.4,-2.2,1.3,2,7,-2.33,11.1,2.123,4.56
 
 
Cpoly_Sub(&A$(),&B$(),&C$(),M,N)
A$(0:M) Komplexe Koeffizienten des Summanden.
B$(0:N) Komplexe Koeffizienten des Subtrahenden.
C$(0:MAX(M,N)) Komplexe Koeffizienten des Differenz-Polynoms.
M Grad des Polynoms A$() (höchste Potenz).
N Grad des Polynoms B$() (höchste Potenz).
Diese Prozedur subtrahiert das Polynom B$() vom Polynom A$() und legt das Ergebnis in C$() ab (C$()=A$()-B$()). Das geschieht durch Subtraktion der Koeffizienten gleicher Potenzen.
 
 
Cpoly_Mul(&A$(),&B$(),&C$(),M,N)
A$(0:M) Komplexe Koeffizienten des Multiplikanden.
B$(0:N) Komplexe Koeffizienten des Multiplikators.
C$(0:M+N) Komplexe Koeffizienten des Produkt-Polynoms.
M Grad des Polynoms A$() (höchste Potenz).
N Grad des Polynoms B$() (höchste Potenz).
Diese Prozedur multipliziert das Polynom A$() mit dem Polynom B$() und legt das Ergebnis in C$() ab (C$()=A$()*B$()). Das geschieht durch komponentenweise Multiplikation mit anschließender Summation gleicher Potenzen.
 
 
Cpoly_S_Mul(&A$(),Z$,&C$(),N)
A$(0:N) Komplexe Koeffizienten des Multiplikanden.
Z$ Komplexe Zahl als Multiplikator.
C$(0:N) Komplexe Koeffizienten des Produkt-Polynoms.
N Grad des Polynoms A$() (höchste Potenz).
Diese Prozedur multipliziert das Polynom A$() mit der komplexen Zahl Z$ und legt das Ergebnis in C$() ab (C$()=A$()*Z$). Man bezeichnet diese Operation auch als skalare Multiplikation.
 
 
Cpoly_Div(&A$(),&B$(),&C$(),&D$(),L,M,R N,R O)
A$(0:L) Komplexe Koeffizienten des Dividenden.
B$(0:M) Komplexe Koeffizienten des Divisors.
C$(0:N) Komplexe Koeffizienten des Quotient-Polynoms.
D$(0:O) Komplexe Koeffizienten des Rest-Polynoms.
L Grad des Polynoms A$() (höchste Potenz).
M Grad des Polynoms B$() (höchste Potenz).
N Grad des Polynoms C$() (höchste Potenz).
O Grad des Polynoms D$() (höchste Potenz).
Diese Prozedur dividiert das Polynom A$() durch das Polynom B$() und legt das Ergebnis in C$() und den Rest der Division in D$() ab (C$()=A$()/B$() und D$()=A$() MOD B$()). Wenn O=0 ist, ist die Division aufgegangen.
 
 
Cpoly_S_Div(&A$(),Z$,&C$(),N)
A$(0:N) Komplexe Koeffizienten des Dividenden.
Z$ Komplexe Zahl als Divisor.
C$(0:N) Komplexe Koeffizienten des Quotient-Polynoms.
N Grad des Polynoms A$() (höchste Potenz).
Diese Prozedur dividiert das Polynom A$() durch eine komplexe Zahl Z$ und legt das Ergebnis in C$() ab (C$()=A$()/Z$). Man bezeichnet diese Operation auch als skalare Division.
 
 
FN Cpoly_Value$(&A$(),Z$,N)
A$(0:N) Komplexe Koeffizienten des Polynoms.
Z$ Komplexe Zahl.
N Grad des Polynoms A$() (höchste Potenz).
Diese Funktion berechnet den Funktionswert des Polynoms A$() an der Stelle Z$ und gibt das Ergebnis als komplexe Zahl zurück.
 
 
Cpoly_Zeros(&A$(),&C$(),N,R E,R E$)
A$(0:N) Komplexe Koeffizienten des Polynoms.
C$(0:N) In dieses Feld trägt die Prozedur die komplexen Nullstellen des Polynoms ein.
N Grad des Polynoms A$() (höchste Potenz).
E Diese Variable kann nach der Rückkehr folgende Werte enthalten:
E=0 : Kein Fehler
E=1 : Führender Koeffizient ist null.
E=2 : Nicht alle Nullstellen gefunden.
E$ Wenn ein Fehler aufgetreten ist, enthält diese String-Variable nach der Rückkehr einen der Fehlertexte aus dem vorherigen Feld, sonst wird ein Leerstring zurückgegeben.
Diese Prozedur berechnet die Nullstellen des Polynoms A$() und gibt das Ergebnis in C$() zurück.
Beispiel:
Als Beispiel wollen wir die Nullstellen des Polynoms

Z^3+(-3+i2)*Z^2+(-12-i12)*Z+30-i20

berechnen. Dazu werden zunächst zwei Felder dimensioniert, nämlich für die komplexen Koeffizienten und die Nullstellen. Danach werden die Koeffizienten in das Feld eingetragen. Wenn
Cpoly_Zeros keinen Fehler meldet, wird das Ergebnis auf dem Bildschirm dargestellt, ansonsten wird eine Fehlermeldung ausgegeben.
Cinit
DIM Poly$(3),Zeros$(2)
Poly$(0)=FN Cmplx$(30,-20):Poly$(1)=FN Cmplx$(-12,-12)
Poly$(2)=FN Cmplx$(-3,2):Poly$(3)=C_R$
Cpoly_Zeros &Poly$(0),&Zeros$(0),3,E,E$
IF E
 THEN PRINT "Fehler Nr:";E,E$
 ELSE PRINT "Nullstellen des Polynoms ";   
  PRINT "Z^3+(-3+i2)*Z^2+(-12-i12)*Z+30-i20"
  PRINT
  FOR I=0 TO 2
   PRINT I+1;". Nullstelle: ";:Cprint Zeros$(I)
  NEXT I
ENDIF
PRINT :INPUT "Beenden mit [Return]";E
Cexit
END
 
 





2.9 Matrix-Funktionen


Matrizen werden in der Complex Library durch 2-dimensionale String-Felder dargestellt. Eine Matrix beginnt beim Element (0,0). Die Matrix Z$ (3,3) ist also eine 4x4 Matrix und keine 3x3 Matrix!.
Wichtig ist auch, daß die Ergebnismatrix im allgemeinen NICHT mit einer der Argument-Matrizen identisch sein darf! Dies ist nur erlaubt, wenn es in einigen Ausnahmefällen explizit angegeben wird.
 

Cmat_Clear(&A$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Es werden alle Elemente der Matrix A$(,) aud null gesetzt.
Beispiel:
Als Beispiel soll die Matrix Z$(8,11) auf null gesetzt werden.

Cinit
DIM Z$(8,11)
Cmat_Clear &Z$(,),8,11
Cmat_Print_Using "",&Z$(,),8,11
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 
Cmat_Id(&A$(,),N)
A$(0:N,0:N) Die komplexen Elemente der Matrix.
N Höchste Zeilen- bzw. Spaltennummer (quadratische Matrix).
Diese Prozedur erzeugt aus A$(,) eine quadratische Einheitsmatrix. Es werden alle Elemente auf der Hauptdiagonalen auf eins und die restlichen auf null gesetzt.
 
 
Cmat_Equal(&A$(,),&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Quell-Matrix.
C$(0:M,0:N) Die komplexen Elemente der Ziel-Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Matrix A$(,) wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)). Die Prozedur kopiert also den Inhalt der Matrix A$(,) in die Matrix C$(,).
 
 
Cmat_Herm_Conj(&A$(,),&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Quell-Matrix.
C$(0:M,0:N) Die komplexen Elemente der hermitesch konjugierten Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Prozedur berechnet die hermitesch konjugierte Matrix zu A$(,) und weist das Ergebnis der Matrix C$(,) zu. Wenn A$(,) eine quadratische Matrix ist (N=M), darf A$(,) mit C$(,) übereinstimmen.
 
 
Cmat_Add(&A$(,),&B$(,),&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der ersten Summanden-Matrix.
B$(0:M,0:N) Die komplexen Elemente der zweiten Summanden-Matrix.
C$(0:M,0:N) Die komplexen Elemente der Summen-Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Matrix A$(,) wird zu der Matrix B$(,) addiert und das Ergebnis wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)+B$(,)). C$(,) darf mit A$(,) oder B$(,) übereinstimmen.
 
 
Cmat_Sub(&A$(,),&B$(,),&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Summanden-Matrix.
B$(0:M,0:N) Die komplexen Elemente der Subtrahenden-Matrix.
C$(0:M,0:N) Die komplexen Elemente der Differenz-Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Matrix B$(,) wird von der Matrix A$(,) subtrahiert und das Ergebnis wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)-B$(,)). C$(,) darf mit A$(,) oder B$(,) übereinstimmen.
 
 
Cmat_Mul(&A$(,),&B$(,),&C$(,),L,M,N)
A$(0:L,0:M) Die komplexen Elemente der Multiplikanten-Matrix.
B$(0:M,0:N) Die komplexen Elemente der Multiplikator-Matrix.
C$(0:L,0:N) Die komplexen Elemente der Produkt-Matrix.
L Höchste Zeilennummer von A$(,) und C$(,).
M Höchste Spaltennummer von A$(,) und höchste Zeilennummer von B$(,).
N Höchste Spaltennummer von B$(,) und C$(,).
Die Matrix A$(,) wird mit der Matrix B$(,) multipliziert und das Ergebnis wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)*B$(,)). Achten Sie darauf, daß die einzelnen Matrizen die richtigen Dimensionen haben.
 
 
Cmat_S_Mul(&A$(,),Z$,&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Multiplikanten-Matrix.
Z$ Komplexe Zahl als Multiplikator.
C$(0:M,0:N) Die komplexen Elemente der Produkt-Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Matrix A$(,) wird mit der komplexen Zahl Z$ multipliziert und das Ergebnis wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)*Z$. C$(,) darf mit A$(,) übereinstimmen. Man bezeichnet diese Operation auch als skalare Multiplikation.
 
 
Cmat_S_Div(&A$(,),Z$,&C$(,),M,N)
A$(0:M,0:N) Die komplexen Elemente der Dividenden-Matrix.
Z$ Komplexe Zahl als Divisor.
C$(0:M,0:N) Die komplexen Elemente der Quotient-Matrix.
M Höchste Zeilennummer.
N Höchste Spaltennummer.
Die Matrix A$(,) wird durch die komplexe Zahl Z$ dividiert und das Ergebnis wird der Matrix C$(,) zugewiesen (C$(,)=A$(,)/Z$. C$(,) darf mit A$(,) übereinstimmen. Man bezeichnet diese Operation auch als skalare Division.
 
 
Cmat_Inv_By_X(&A$(,),&C$(,),N)
A$(0:N,0:N) Die komplexen Elemente der Quell-Matrix.
C$(0:N,0:N) Die komplexen Elemente der inversen Matrix.
N Höchste Zeilen- bzw. Spaltennummer.
Diese Prozedur berechnet die inverse Matrix zu A$(,) und weist das Ergebnis der Matrix C$(,) zu. Für diese Prozedur muß der Realteil der Matrix A$(,) separat invertierbar sein, andernfalls erhalten Sie eine Fehlermeldung.
 
 
Cmat_Inv_By_Y(&A$(,),&C$(,),N)
A$(0:N,0:N) Die komplexen Elemente der Quell-Matrix.
C$(0:N,0:N) Die komplexen Elemente der inversen Matrix.
N Höchste Zeilen- bzw. Spaltennummer.
Diese Prozedur berechnet die inverse Matrix zu A$(,) und weist das Ergebnis der Matrix C$(,) zu. Für diese Prozedur muß der Imaginärteil der Matrix A$(,) separat invertierbar sein, andernfalls erhalten Sie eine Fehlermeldung.
 
 
Cmat_Inv(&A$(,),&C$(,),N,R D$)
A$(0:N,0:N) Die komplexen Elemente der Quell-Matrix.
C$(0:N,0:N) Die komplexen Elemente der inversen Matrix.
N Höchste Zeilen- bzw. Spaltennummer.
D$ Enthält nach der Rückkehr die Determinante der Matix A$(,).
Diese Prozedur berechnet die inverse Matrix zu A$(,) und weist das Ergebnis der Matrix C$(,) zu. Für diese Prozedur muß weder der Realteil noch Imaginärteil der Matrix A$(,) separat invertierbar sein. Cmat_Inv ist also die allgemeinste Inversion, die aber auch die meiste Rechenzeit in Anspruch nimmt.
 
 
Cmat_Simeq(&A$(,),&B$(,),&C$(,),N,R E)
A$(0:N,0:N) Die komplexen Koeffizienten der linken Seite des Gleichungssystems.
B$(0:N,0) Die komplexen Werte auf der rechten Seite des Gleichungssystems.
C$(0:N,0) Die komplexen Elemente des Lösungsvektors.
N Nummer der letzten Zeile des Gleichungssystems.
E Nach der Rückkehr kann E folgende Werte enthalten:
E=0 : Kein Fehler
E=1 : Das Gleichungssystem konnte nicht gelöst werden.
Diese Prozedur löst allgemein das komplexe Gleichungssgstem A$(,)*C$(,0)=B$(,0), wobei A$(,) und B$(,0) vorgegeben sind. Der Vektor C$(,0) enthält nach der Rückkehr die Ergebnisse.
Cmat_Simeq entspricht der Inversion von
A$(,) und anschließender Multiplikation der Inversen mit C$(,0) (Standard-Verfahren), arbeitet aber wesentlich schneller als dieses Verfahren.
 
 
FN Cmat_Det$(&A$(,),N)
A$(0:N,0:N) Die komplexen Elemente der Quell-Matrix.
N Höchste Zeilen- bzw. Spaltennummer.
Diese Funktion berechnet die Determinante der komplexen Matrix A$(,).
Beispiel:
Als Beispiel wird die Determinante der 5x5 Einheitsmatrix berechnet:

Cinit
DIM Z$(4,4)
Cmat_Id(&Z$(,),4):'Einheitsmatrix erzeugen.
A$=FN Cmat_Det$(&Z$(,),4):'Determinante berechnen.

Cprint(A$):'Ergebnis ausgeben.
INPUT "Ende mit [Return]";Dummy
Cexit
END
 
 





2.10 Komplexes Kurvenintegral


Mit den beiden Funktionen in diesem Kapitel können Sie komplexe Funktionen entlang einer von Ihnen definierten Kurve nach dem Gauss-Algorithmus integrieren.
Die Berechnung erfolgt besonders schnell, wenn die zu integrierenden Funktionen gewissen, recht hohen Anforderungen an ihre Differenzierbarkeit genügen. Andernfalls berechnet der Algorithmus dasselbe Intervall vergleichsweise häufig und wird dadurch langsamer. Es ist dann günstiger, statt des Gauss-Algorithmusses eine Methode nach Romberg o.ä. zu verwenden. Eine entsprechende Funktion steht allerdings in der Complex Library noch nicht zur Verfügung.
 

FN Cintegral_Gauss$(&FN Func$(""),&FN Path$(0),&FN Der$(0), A#,B#,Er#,N)
FN Func$(Z$) Die zu integrierende Funktion. Ihr wird ein komplexer Parameter übergeben und als Ergebnis muß sie den komplexen Funktionswert der übergebenen Zahl zurückliefern.
FN Path$(T#) Diese Funktion muß den Integrationsweg in Abhängigkeit von einem reellen Parameter T#, der von Cintegral_Gauss an diese Funktion übergeben wird, beschreiben.
FN Der$(T#) Diese Funktion muß die erste Ableitung nach T# berechnen und als komplexe Zahl zurückliefern.
A# Anfangswert der parametrisierten Kurve.
B# Endwert der parametrisierten Kurve.
Er# Relativer maximaler Fehler zwischen zwei Iterationsschritten.
N Anzahl der Bereiche an, in die das zu integrierende Intervall zerlegt wird. Ein guter Wert von N ist häufig das Doppelte der Anzahl der Maxima der Funktion im betrachteten Intervall.
Diese Funktion berechnet ein Kurvenintegral in der komplexen Ebene noch dem Gauss-Algorithmus. Dazu müssen der Funktion die Adressen von drei Funktionen übergeben werden, die Sie selbst definieren müssen. Diese Funktionen werden dann während der Berechnung von Cintegral_Gauss aufgerufen.
In jedem Bereich wird unabhängig von den anderen eine Gauss-Integration durchgeführt. Die Anzahl der Bereiche muß der Variation der Funktion über den zu integrierenden Bereich angepaßt werden; je größer die Variation, desto mehr Bereiche. Zu viele Bereiche vergrößern die Rechenzeit, zu wenige jedoch auch, da die Routine dann die ersten Rekursionsschritte des Verfahrens damit verbringt, überall im Intervall eine genügend feine Intervallaufteilung zu generieren. Die Intervalle werden rekursiv in immer kleinere Gebiete zerteilt, bis
Er# unterschritten wird. Natürlich gibt Er# nicht den maximalen Absolutfehler an, da sich die Fehler über mehrere Iterationsschritte aufsummieren!
Beispiel:
Als ganz einfaches Beispiel wollen wir als Funktion die Multiplikation mit der reellen Zahl 2 nehmen. Die Integration soll dabei entlang einer Parabel erfolgen, beim Punkt (0,0) beginnen und bei (2,4) enden. Da der Integrationsweg eine Parabel sein soll, läuft wegen der Parabelgleichung
(X#=T#, Y#=T#^2) der Parameter T# von 0 bis 2. Die Ableitung des Realteils nach T# ist also konstant 1 und die Ableitung des Imaginärteils 2*T#. Das Ergebnis der Integration ist übrigens -12+i16, wie man auch leicht analytisch nachrechnen kann.
Cinit
T=&FN Times_2$("")
P=&FN Path$(0)
D=&FN Derivative$(0)
I$=FN Cintegral_Gauss$(T,P,D,0,2,0.1,2)

Cprint(I$)
INPUT "Ende mit [Return]";Dummy
Cexit
END


'Jetzt müssen wir noch die drei Funktionen definieren.
DEF FN Times_2$(Z$)=FN Rmul$(2,Z$)
DEF FN Path$(T#)=FN Cmplx$(T#,T#^2)
DEF FN Derivative$(T#)=FN Cmplx$(1,2*T#)
Beispiel:
Als zweites Beispiel definieren wir als Funktion
Z$^2+Z$+3.

Cinit
T=&FN Square$("")
P=&FN Path$(0)
D=&FN Derivative$(0)
I$=FN Cintegral_Gauss$(T,P,D,0,2,0.1,2)

Cprint(I$)
INPUT "Ende mit [Return]";Dummy
Cexit
END


'Jetzt müssen wir noch die drei Funktionen definieren.
DEF FN Square$(Z$):LOCAL Temp$
 Temp$=FN Cadd$(Z$,C_R$):'Hornerschema verwendet.
 Temp$=FN Cmul$(Temp$,Z$)
 Three$=FN Rmul$(3,C_R$)
RETURN FN Cadd$(Temp$,Three$)
DEF FN Path$(T#)=FN Cmplx$(T#,T#^2)
DEF FN Derivative$(T#)=FN Cmplx$(1,2*T#)
Beispiel:
Das Programm "Integral.BAS" im DEMO Ordner gibt ein weiteres Beispiel für die Benutzung der Integrationsroutine. Es wird ein Kurvenintegral über eine geschlossene Kurve berechnet. Nach dem Residuensatz ist damit das Ergebnis gerade
i*2*PI mal die Summe der Residuen der Funktion innerhalb des Bereichs. Als Integrationsweg wird in diesem Beispiel der Kreis mit Radius 1 um einen eingebbaren Punkt der komplexen Ebene gewählt. Die Funktion ist l/Z, das einzige Residuum liegt damit im Ursprung. Wenn also der Kreis, entlang dem integriert wird, den Nullpunkt umschließt, dann ist das Ergebnis i*2*PI, sonst Null.
Wenn der Iterationsweg sehr nahe an einer Polstelle der Funktion (an einem Residuum) vorbeiführt (im Beispiel:
0+i0), führt das zu einer größeren Iterationstiefe, um die vorgegebene relative Genauigkeit zu erreichen. Die Rechenzeit wird dadurch wesentlich größer. Auch nimmt die absolute Genauigkeit stark ab, wenn der Integrationsweg nahe am Pol vorbeiführt. Es kann erforderlich sein, die relative Genauigkeit zu vergrößern, um in solchen Fallen noch akzeptable Ergebnisse zu erhalten.
 
 
FN Cintegral_Gauss2$(&FN Func$(""),&FN Path$(0),&FN Der$(0), A#,B#,N)
FN Func$(Z$) Die zu integrierende Funktion. Ihr wird ein komplexer Parameter übergeben und als Ergebnis muß sie den komplexen Funktionswert der übergebenen Zahl zurückliefern.
FN Path$(T#) Diese Funktion muß den Integrationsweg in Abhängigkeit von einem reellen Parameter T#, der von Cintegral_Gauss an diese Funktion übergeben wird, beschreiben.
FN Der$(T#) Diese Funktion muß die erste Ableitung nach T# berechnen und als komplexe Zahl zurückliefern.
A# Anfangswert der parametrisierten Kurve.
B# Endwert der parametrisierten Kurve.
N Anzahl der Bereiche an, in die das zu integrierende Intervall zerlegt wird. Ein guter Wert von N ist häufig das Doppelte der Anzahl der Maxima der Funktion im betrachteten Intervall.
Auch diese Funktion berechnet das komplexe Kurvenintegral. Im Gegensatz zu ihrem großen Bruder Cintegral_Gauss$ iteriert aber diese Funktion hier nicht solange, bis ein vorgegebener Fehler unterschritten wird, sondern berechnet das Integral einmal mit der vorgegebenen Anzahl an Bereichen. Bei harmlosen Funktionen ist das die schnellere Methode, sie versagt aber in der Nähe von Divergenzen und Unstetigkeiten.
Das sehen Sie deutlich, wenn Sie im Programm "Integral.BAS" als Mittelpunkt
(0.999#,0) eingeben und mit 4 Stützstellen integrieren. Das Ergebnis ist i4.18 statt i6.28. Wenn Sie dann bei Cintegral_Gauss$ als relativen Fehler 1D-15 verwenden, erhalten Sie den genauen Wert.
Beispiel:
Als Beispiel definieren wir wieder als Funktion
Z$^2+Z$+3, berechnen die Funktionswerte diesmal aber über die Polynomfunktionen der Complex Library:

Cinit

DIM Poly$(2)
Poly=&Poly$(0)
Poly$(0)=FN Cmplx$(3,0)
Poly$(1)=C_R$:Poly$(2)=C_R$
T=&FN Square$("")
P=&FN Path$(0)
D=&FN Derivative$(0)
I$=FN Cintegral_Gauss2$(T,P,D,0,2,2)

Cprint(I$)
INPUT "Ende mit [Return]";Dummy
Cexit
END

'Jetzt müssen wir noch die drei Funktionen definieren.
DEF FN Square$(Z$)=FN Cpoly_Value$(Poly,Z$,2)

DEF FN Path$(T#)=FN Cmplx$(T#,T#^2)
DEF FN Derivative$(T#)=FN Cmplx$(1,2*T#)
 
 
 

 Omikron Basic im Internet: http://www.berkhan.de

Allgemeines -blättern- Inhaltsverzeichnis

Copyright 1998-1999 by Berkhan-Software