Komplexe Zahlen Komplexe Zahlen

Ähnliche Dokumente
Beispiele für den Einsatz einer TextBox Validierung von Eingaben

Die Klasse Collection (gb) implementiert eine Hash-Tabelle, deren Elemente aus einem Wert-Schlüssel-Paar

GridView Daten-Import aus einer csv-datei GridView Daten-Import aus einer csv-datei

JAVA - Methoden

Mathematischer Vorkurs NAT-ING II

02. Komplexe Zahlen. a = Re z ist der Realteil von z, b = Im z der Imaginärteil von z.

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Menge der irrationalen Zahlen C = {z z = a + bi; a, b R, i 2 = 1} Menge der komplexen Zahlen R C Somit ergibt sich: N N Z Q R C

Grundlagen komplexe Zahlen. natürliche Zahlen

Lösung der Übungsaufgabenserie 12 Grundlagen der Informatik und Numerik

Diese geometrischen Formen (Linien oder Flächen oder Text) in sechs Kategorien können Sie auf die Zeichenfläche zeichnen:

Mathematischer Vorkurs NAT-ING1

LINEARE ALGEBRA UND ANALYSIS FÜR FUNKTIONEN EINER VARIABLEN

System.out.println("TEXT");

Modul 122 VBA Scribt.docx

EPROG 2.Teilprüfung. Aufgabe 1:

Addition, Subtraktion und Multiplikation von komplexen Zahlen z 1 = (a 1, b 1 ) und z 2 = (a 2, b 2 ):

Die komplexen Zahlen

10 Komplexe Zahlen. 2. Februar Komplexe Multiplikation: Für zwei Vektoren. z 1 =

Javakurs für Anfänger

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Quadratische Funktion

Inhaltsübersicht. Definition und erste Eigenschaften komplexer Zahlen

Klausur WS 2013/14 EDV 2 Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Die Klasse java.lang.object. Thorsten Treffer

Komplexe Zahlen. Allgemeines. Definition. Darstellungsformen. Umrechnungen

Erste Schularbeit Mathematik Klasse 7A G am

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

2 Programmieren in Java I noch ohne Nachbearbeitung

Einstieg in die Informatik mit Java

Einführung in die Programmierung mit VBA

Einstieg in die Informatik mit Java

Kapitel

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Grundrechenarten für komplexe Zahlen

Die komplexen Zahlen

Für den Aufruf der Wetterdaten für den Ort Osterburg in Deutschland wurden diese Werte verwendet:

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Grundlagen der Programmierung

Abbildung : Aufruf des Wikis (Server: Interner Web-Server HTTPD auf Port 8080)

1. Definition der komplexen Zahlen Ziel: neuerliche Zahlbereichserweiterung, so dass auch Quadratwurzeln aus negativen Zahlen

Komplexe Zahlen. Darstellung

Teil II. Datentypen. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2017/

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

1 Potenzen und Polynome

VII Komplexe Zahlen. Propädeutikum Holger Wuschke. 24. September 2018

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Vorlesung. Komplexe Zahlen

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Die komplexen Zahlen. 1. Einführung. A) Erweiterung des Zahlenkörpers. Def. 1 (imaginäre Einheit)

Brückenkurs Mathematik für Studierende der Chemie

FACHHOCHSCHULE MANNHEIM

Objektorientiertes Programmieren (Java)

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Rechner. Verlauf ansehen. Ausdruck teilen. Graph Gleichungen. OXY Seite öffnen. SCI/ENG Schreibweise. Eigene Gleichung zuweisen

Einführung in die Programmierung

2.2 Einfache Datenstrukturen

2 Teil 2: Nassi-Schneiderman

Tag 2 Repetitorium Informatik (Java)

GRUNDLAGEN MATHEMATIK

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

EXCEL VBA Cheat Sheet

= 2 i 2= 2 2 i, z 4. = 1.5, z 8

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Visual Basic. Einführung

Programmieren in Python

Javakurs für Anfänger

Übungsblatt 1. Java Vorkurs (WS 2017)

Grundlagen der Programmierung

Grundelemente objektorientierter Sprachen (1)

17 Grundrechenarten für komplexe Zahlen

Implementieren von Klassen

Excel VBA. Teil Zusammenfassung! Was wir können sollten! V

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Ausdrücke der Programmiersprache Java

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Crash-Kurs Komplexe Zahlen

Excel VBA Arrays, Enumeration und benutzerdefinierte Typen

Erste Schularbeit Mathematik Klasse 7A G am

Serie 6: Komplexe Zahlen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Ausgabe:

JAVA - Methoden - Rekursion

Brückenkurs Mathematik für Studierende der Chemie

ACCESS. Formulare per VBA referenzieren FORMULARE MIT VBA PROGRAMMIEREN FORMULARE PER VBA REFERENZIEREN BASICS

Transkript:

Komplexe Zahlen 29.1 Komplexe Zahlen Auch wenn die Verwendung von komplexen Zahlen nicht zum täglichen Rechnen mit Zahlen gehört für bestimmte Anwendungen aus der Elektrotechnik oder der Quantenphysik sind komplexe Zahlen aber die erste Wahl. Ein Blick auf diese Seite http://de.wikipedia.org/wiki/komplexe_zahl liefert wertvolle Informationen und Grundlagenwissen. Die Klasse Complex (gb.complex) implementiert komplexe Zahlen. In diesem Zahlenbereich werden die folgenden arithmetischen Operatoren und Funktionen: +, -, *, /, ^, =, <> und Abs() unterstützt, wobei der Absolutwert einer komplexen Zahl auch Modul genannt wird. Eine komplexe Zahl repräsentiert einen Zeiger in der komplexen Zahlenebene. Senkrecht zum reellen Zahlenstrahl mit der Einheit 1 steht der imaginäre Zahlenstrahl im Zentrum der Ebene. Für die komplexe Zahl ist die Schreibweise z = a +bi = üblich. Dabei sind i die imaginäre Einheit i, für die i² = -1 gilt, a der Realteil und b der Imaginärteil. Wenn einer reellen Zahl in Gambas unmittelbar ein "i" oder "I" folgt, dann wird angenommen, das es sich um eine komplexe Zahl(-Konstante) handelt. In diesem Fall wird die Komponente gb.complex automatisch geladen und fügt eine neue Complex-Klasse zum Interpreter hinzu. Ein 'i' oder 'I' allein als komplexe Zahl ohne Realteil wird als ungültiger Bezeichner erkannt! Schreiben Sie deshalb für i stets 1i. Die Schreibweise mit dem Großbuchstaben I ist offenbar gambas-spezifisch. 29.1.1 Eigenschaften Die Klasse Complex verfügt über zwei Eigenschaften: Eigenschaft Datentyp Beschreibung Real Float Setzt den reellen Teil einer komplexen Zahl oder gibt diesen zurück. Imag Float Setzt den imaginären Teil einer komplexen Zahl oder gibt diesen zurück. Tabelle 29.1.1.1 : Eigenschaften der Klasse Complex 29.1.2 Methoden Die Klasse Complex verfügt über eine statische Methode und mehrere weitere Methoden, deren Beschreibung Sie in der nächsten Tabelle finden, wobei auf die unterschiedlichen Rückgabetypen zu achten ist: Methode Rückgabetyp Beschreibung Abs2() Arg() Conj() Float Float Complex Setzt die Wurzel aus dem Absolutwert einer komplexen Zahl oder gibt diesen zurück. Gibt das Argument im Bogenmaß einer komplexen Zahl zurück. Gemeint ist der Winkel zwischen dem Zeiger, der die komplexe Zahl in der Zahlenebene repräsentiert und der positiven reellen Achse. Gibt die konjugiert komplexe Zahl z c zu einer vorhandenen komplexen Zahl z zurück. Copy() Complex Gibt eine Kopie einer komplexen Zahl zurück. Inv() Complex Gibt die inverse komplexe Zahl einer komplexen Zahl zurück. ToString([Local As Boolean ]) String Tabelle 29.1.2.1 : Methoden der Klasse Complex Methode Complex.Polar() Konvertiert eine komplexe Zahl in einen String. Ist der Wert der boolschen Variablen Local gleich TRUE, dann wird die lokalisierte Zahl ausgegeben; in Deutschland mit dem Komma als Dezimal-Trennzeichen. Ist der Wert der boolschen Variablen Local gleich FALSE, dann wird ein String zurückgegeben, der mit der Funktion 'Eval' ausgewertet werden kann. Die statische Methode Complex.Polar( [ Abs As Float, Arg As Float ] ) As Complex gibt eine komplexe Zahl zurück. Als Argumente werden die Daten des Zeigers (Betrag Abs und Winkel Arg (Bogenmaß) gegen die positive reelle Achse) eingesetzt, der die komplexe Zahl in der komplexen Zahlenebene repräsentiert. 1

Kapitel 29.1 - Komplexe Zahlen 29.1.3 Erzeugen komplexer Zahlen Es gibt mehrere Möglichkeiten komplexe Zahlen zu erzeugen: Einsatz der (statischen) Methode Polar( [ Abs As Float, Arg As Float ] ). Verwendung der Methoden Conj(), Inv() und Copy(). Achten Sie auf die notwendigen Klammern! Einsatz der Funktion Complex( [ Real As Float, Imag As Float ] ). Erstellen Sie damit eine neue komplexe Zahl aus ihrem Real- und Imaginär-Teil. Wenn der Real- oder Imaginär-Teil nicht angegeben ist, dann wird angenommen, das dieser Null ist. Konvertierung einer Zeichenkette aus einer geeigneten (Eingabe-)Komponente in eine komplexe Zahl. Beispiel für die Nutzung der Methoden Polar(..), Conj(), Inv(), Copy(), Complex(..) und ToString(..): Dim cz1, cz2 As Complex cz1 = Complex(4, 3) cz2 = Complex.Polar(4.66, Pi / 3) Print cz1 + cz2 ' Summe von 2 komplexen Zahlen Z1 und Z2 Print cz1 cz2 ' Differenz von 2 komplexen Zahlen Z1 und Z2 Print cz1 * cz2 ' Produkt von 2 komplexen Zahlen Z1 und Z2 Print cz1 ^ 3 ' 3. Potenz der komplexen Zahl Z1 Print Abs(cZ1) ' Betrag der komplexen Zahl Z1 Print cz1.abs2() ' Quadrat des Betrages der komplexen Zahl Z1 'Winkel zwischen Zeiger von Z1 und der positiven reellen Achse (im Bogenmaß) Print cz1.arg() & String.Chr(8596) & Deg(cZ1.Arg() + 2 * Pi) & " " Print cz1.conj() ' Konjugiert komplexe Zahl zu Z1 Print cz1.copy() ' Kopie der komplexen Zahl Z1 als neue komplexe Zahl Print cz1.inv() ' Inverse komplexe Zahl zu Z1 Print cz1.real ' Real Teil der komplexen Zahlen Z1 Print cz1.imag ' Imaginär Teil der komplexen Zahlen Z1 Print cz2.tostring(true) ' Konvertierung Z2 in einen String (lokalisiert Komma als Dezimaltrennzeichen) Print cz2.tostring() ' Konvertierung Z2 in einen String Print Complex( cz1.real, cz1.imag) ' Komplexe Zahl aus dem invertierten Real und Imaginär Teil von Z1 Das sind die Ausgaben in der Konsole der Gambas-IDE: [1] 6,33+1,03567838163548i [2] 1,67 7,03567838163548i [3] 21,4270351449065+9,15271352654193i [4] 44 117i [5] 5 [6] 25 [7] 0.64350110879328 323.130102354156 [8] 4+3i [9] 4 3i [10] 0,16+0,12i [11] 4 [12] 3 [13] 2,33+4,03567838163548i [14] 2.33+4.03567838163548i [15] 4+3i 29.1.4 Beispiele Die folgenden Beispiele sind erprobt und gewähren einen ersten Einblick in die Arbeit mit komplexen Zahlen. Im Download-Bereich finden Sie zwei Projekte. 29.1.4.1 Beispiel 1 Lösungen von quadratischen Gleichungen in der Normalform Ein klassisches Beispiel ist die Berechnung der Lösungen einer quadratischen Gleichung in der allgemeinen Form a x²+b x+c = 0. Diese wird zuerst in die Normalform x²+p x+q = 0 transformiert, um die Probe nach Vieta für die beiden Lösungen x1 und x2 mit x1+x2 = -p und x1 x2 = q einfach zu gestalten. Danach bestimmen Sie deren Lösungsvielfalt mit Hilfe der Diskriminante D mit D = (p²/4-q) und kommen auf genau 3 unterscheidbare Fälle: D > 0 2 verschiedene reelle Lösungen oder D = 0 2 gleiche reelle Lösungen (Doppel-Lösung) oder D < 0 2 konjugiert komplexe Lösungen. 2

Komplexe Zahlen Anschließend müssen Sie je nach Wert der Diskriminante D jeweils genau 2 Lösungen berechnen; entweder die zwei reellen oder die zwei komplexen. Mit dem Einsatz der Klasse gb.complex können Sie den o.a. Ansatz schnell umsetzen. Hier ein Auszug aus dem verwendeten Quelltext: Public Function Calculate(fP As Float, fq As Float) As Variant[] Dim fdiskriminante As Float = 0 Dim fx1, fx2 As Float Dim fxc1, fxc2 As Complex fdiskriminante = (fp * fp) / 4 fq Select Sgn(fDiskriminante) Case 1 ' D>0 fx1 = fp / 2 Sqr(fDiskriminante) fx2 = fp / 2 + Sqr(fDiskriminante) Return [fx1, fx2] Case 0 ' D=0 fx1 = fp / 2 fx2 = fx1 Return [fx1, fx2] Case Else ' D<0 fxc1 = Complex( fp / 2, Sqr( fdiskriminante)) fxc2 = fxc1.conj() Return [fxc1, fxc2] End Select End ' Calculate(fP As Float, fq As Float) As Variant[] Public Sub btnqg_click() Dim velement As Variant Dim icount As Integer = 1 ' Randomize ' For Each velement In Calculate(Rnd( 2, 2), Rnd( 9, 9)) ' Zufallswerte für die Parameter For Each velement In Calculate( 4, 13) Print "x" & Str(iCount) & " = " & velement Inc icount Next ' velement ' Alternative: ' Print "x1 = " & Calculate( 4, 13)[0] ' Print "x2 = " & Calculate( 4, 13)[1] End ' btnqg_click() Die Lösungen der quadratischen Gleichung x²-4 x+13 = 0 sind die zwei konjugiert komplexen Zahlen: x1 = 2 3i, x2 = 2+3i Da die reellen in den komplexen Zahlen enthalten sind, könnte man statt Variant[] auch Complex[] zurückgeben. Damit wird der Quelltext etwas reduziert. In den ersten beiden Fällen haben dann die komplexen Nullstellen einen Imaginärteil von 0. ' Gambas module file Public Sub Main() ' Diskriminante positiv Print "Lösungen von x²+4x 21" PrintRoots(4, 21) ' Diskriminante 0 Print "Lösungen von x² 4x+4" PrintRoots( 4, 4) ' Diskriminante negativ Print "Lösungen von x²+4x+21" PrintRoots(4, 21) End ' Main() Public Sub PrintRoots(fP As Float, fq As Float) ' Es sind immer *genau* zwei komplexe Nullstellen (Fundamentalsatz der Algebra) Print " " With CalculateRoots(fP, fq) Print "z1 = ";.[0] Print "z2 = ";.[1] End With Print End ' PrintRoots(..) 3

Kapitel 29.1 - Komplexe Zahlen Public Function CalculateRoots(fP As Float, fq As Float) As Complex[] ' Array komplexer Zahlen (!) Dim fd As Float ' Diskriminante Dim zroot As Complex ' Komplexe Wurzeln fd = (fp ^ 2) / 4 fq zroot = New Complex(Sqr(0.5 * (Abs(fD) + fd)), Sqr(0.5 * (Abs(fD) fd))) Return [ fp / 2 + zroot, fp / 2 zroot] End ' CalculateRoots(..) Ausgabe der Lösungen: Lösungen von x²+4x 21 z1 = 3 z2 = 7 Lösungen von x² 4x+4 z1 = 2 z2 = 2 Lösungen von x²+4x+21 z1 = 2+4,12310562561766i z2 = 2 4,12310562561766i 29.1.4.2 Beispiel 2 Einsatz einer eigenen Funktion IsComplex(..) Für die interaktive Eingabe einer komplexen Zahl können Sie einen String aus einer geeigneten Eingabe-Komponente wie zum Beispiel einer TextBox auslesen. Es ist vorteilhaft, vor der Konvertierung String Komplexe Zahl zu prüfen, ob die eingelesene Zeichenkette auf das Muster a+bi passt, wobei a und b reelle Zahlen sind. Mit der Funktion IsComplex(string) können Sie prüfen, ob es sich bei der eingelesenen Zeichenkette um eine komplexe Zahl a+bi handelt. Mit Erfolg können Sie die neue seit Gambas 3.5 verfügbare Syntax ( If sinput MATCH spattern Then) der Komponente gb.pcre einsetzen: Public Function IsComplex(sInput As String) As Boolean Dim spattern As String sinput = Trim(sInput) If sinput = "0 0i" Or sinput = "0+0i" Then Return False ' Sonderfälle behandeln... spattern = "^([ +]?[0 9]+(,[0 9]+)?)[ +][0 9]+(,[0 9]+)?[i]$" If sinput Match spattern Then Return True Else Return False Endif ' Match Pattern End ' Function IsComplex(sInput As String) As Boolean Es ist von Vorteil, wenn Sie ein Eingabe-Alphabet als Menge der zulässigen Eingabe-Zeichen verwenden, denn es reduziert mögliche Fehleingaben: Public Sub txbinputcomplex1_keypress() CheckInput("+,i0123456789") End ' txbinputcomplex_keypress() Public Sub CheckInput(sAllowed As String) ' Idee von Charles Guerin + Benoît Minisini Dim iallow As Integer = 0 If Key.Code = Key.Left Then iallow = 1 If Key.Code = Key.Right Then iallow = 1 If Key.Code = Key.BackSpace Then iallow = 1 If Key.Code = Key.Delete Then iallow = 1 If Key.Code = Key.End Then iallow = 1 If Key.Code = Key.Home Then iallow = 1 If txbinputcomplex1.text And (Key.Code = Key.Enter Or Key.Code = Key.Return) Then iallow = 1 Endif If Key.Text And (InStr(sAllowed, Key.Text) > 0) Then iallow = 1 If iallow = 0 Then Stop Event End ' CheckInput(sAllowed As String) Die Konvertierung String Komplexe Zahl erfolgt mit der Funktion ValComplex(sInput As String), die als Funktionswert eine komplexe Zahl liefert, wenn sinput als komplexe Zahl interpretiert werden kann: 4

Komplexe Zahlen Public Function ValComplex(sInput As String) As Complex Dim complexnumber As Complex Dim icount As Integer Dim sreal, simaginary As String sinput = Trim(sInput) For icount = Len(sInput) To 1 Step 1 ' Invertierte Iteration If (Mid(sInput, icount, 1) = "+") Or (Mid(sInput, icount, 1) = " ") Then sreal = Left(sInput, icount 1) simaginary = Mid(sInput, icount, Len(sInput) icount) complexnumber = Complex(Val(sReal), Val(sImaginary)) Return complexnumber Endif ' + oder? Next ' icount End ' Function ValComplex(sInput As String) As Complex Mit den beiden vorgestellten Funktionen können Sie prüfen, ob eine eingelesene Zeichenkette formal eine komplexe Zahl a+bi repräsentiert und anschließend die valide Zeichenkette in eine komplexe Zahl konvertieren und nach Bedarf in einer geeigneten Variablen speichern. 29.1.4.3 Beispiel 3 Rechnen mit komplexen Zahlen Abbildung 29.1.4.3.1: Test-Programm zum Rechnen mit komplexen Zahlen Der folgende Quelltext-Ausschnitt zeigt Ihnen den Einsatz der beiden vorgestellten Funktionen IsComplex(..) und ValComplex(..) in zwei Varianten: Public Sub btnconvert_click() If txbinputcomplex1.text Then txboutputcomplex.clear If IsComplex(txbInputComplex1.Text) = True Then txboutputcomplex.text = ValComplex(txbInputComplex1.Text).ToString(True) Else Message.Error("Der Eingabe String kann\nnicht\nals komplexe Zahl interpretiert werden!") txbinputcomplex1.setfocus Endif ' IsComplex(..)? Endif ' txbinputcomplex.text End ' btnconvert_click() Hier eine Variante zum o.a. Quelltext-Ausschnitt, in der die Funktion IsComplex(..) nicht genutzt wird. Dafür kommt die Try-Anweisung aus dem Fehler-Management von Gambas zum Einsatz, um Fehler abzufangen. Der tritt mit Sicherheit genau dann auf, wenn der Eingabe-String nicht als komplexe Zahl interpretiert werden kann: Public Sub btnconvert_click() If txbinputcomplex1.text Then 5

Kapitel 29.1 - Komplexe Zahlen txboutputcomplex.clear Try txboutputcomplex.text = ValComplex(txbInputComplex1.Text).ToString(True) If Error Then Message.Error("Der Eingabe String kann\nnicht\nals komplexe Zahl interpretiert werden!") txbinputcomplex1.setfocus Endif ' ERROR? Endif ' txbinputcomplex.text End ' btnconvert_click() Das vollständige Projekt Complex finden Sie im Download-Bereich. 6