Folgende Elemente aus dem 1. Teil werden hier verwendet:
(Mathematik mit VBA - Teil 1)
Rechnen mit komplexen Zahlen
Wenn man eine Zahl mit geradem Exponenten potenziert, erhält man als Ergebnis immer eine positive Zahl, z. B. 2²=4, (-2)²=4. Daher gibt es für eine gerade Wurzel einer negativen Zahl keine reelle Lösung. Es gibt jedoch die imaginäre Einheit i, die durch i²=-1 definiert ist.
Eine komplexe Zahl erhält man, indem man zu einer reellen Zahl (Realteil) ein Vielfaches von i (Imaginärteil) addiert. Beispiele: 2*i (=Sqr(-4)), 1+1,5*i. In der komplexen Zahlenebene sind auf der „x-Achse“ die reellen Zahlen abgebildet, auf der „y-Achse“ die imaginären Zahlen. Realteil und Imaginärteil stellen also kartesische Koordinaten der komplexen Zahlenebene dar.
Man kann eine komplexe Zahl aber auch durch Polarkoordinaten darstellen: Wenn man den Punkt in der Zahlenebene, der die komplexe Zahl darstellt, mit dem Null-Punkt verbindet, erhält man durch die Länge dieser Strecke den Betrag der komplexen Zahl. Der Winkel, den diese Strecke mit der positiven reellen Achse bildet, stellt das Argument der komplexen Zahl dar. Die Polarkoordinaten sind vor allem nützlich, wenn man Potenzen und Wurzeln von komplexen Zahlen berechnen will. Da für das Argument nur Winkel von 0° bis <360° (sprich 2*pi) Sinn machen, habe ich eine Funktion gemacht, die den Winkel in diesen Bereich verlagert (Winkel2pi).
Hier zunächst grundlegende Datentypen und Funktionen:
(Mathematik mit VBA - Teil 1)
Rechnen mit komplexen Zahlen
Wenn man eine Zahl mit geradem Exponenten potenziert, erhält man als Ergebnis immer eine positive Zahl, z. B. 2²=4, (-2)²=4. Daher gibt es für eine gerade Wurzel einer negativen Zahl keine reelle Lösung. Es gibt jedoch die imaginäre Einheit i, die durch i²=-1 definiert ist.
Eine komplexe Zahl erhält man, indem man zu einer reellen Zahl (Realteil) ein Vielfaches von i (Imaginärteil) addiert. Beispiele: 2*i (=Sqr(-4)), 1+1,5*i. In der komplexen Zahlenebene sind auf der „x-Achse“ die reellen Zahlen abgebildet, auf der „y-Achse“ die imaginären Zahlen. Realteil und Imaginärteil stellen also kartesische Koordinaten der komplexen Zahlenebene dar.
Man kann eine komplexe Zahl aber auch durch Polarkoordinaten darstellen: Wenn man den Punkt in der Zahlenebene, der die komplexe Zahl darstellt, mit dem Null-Punkt verbindet, erhält man durch die Länge dieser Strecke den Betrag der komplexen Zahl. Der Winkel, den diese Strecke mit der positiven reellen Achse bildet, stellt das Argument der komplexen Zahl dar. Die Polarkoordinaten sind vor allem nützlich, wenn man Potenzen und Wurzeln von komplexen Zahlen berechnen will. Da für das Argument nur Winkel von 0° bis <360° (sprich 2*pi) Sinn machen, habe ich eine Funktion gemacht, die den Winkel in diesen Bereich verlagert (Winkel2pi).
Hier zunächst grundlegende Datentypen und Funktionen:
Visual Basic-Quellcode
- Type komplexK
- 'Typ für komplexe Zahlen mit Angabe von kartesischen Koordinaten.
- 'Entspricht der Form z=a+b*i (a=Realteil, b=Imaginärteil)
- Realteil As Double
- Imaginärteil As Double
- End Type
- Type komplexP
- 'Typ für komplexe Zahlen mit Angabe von Polarkoordinaten.
- 'Entspricht der Form z=r*(cos(phi)+sin(phi)*i) (r=Betrag, phi=Argument)
- Betrag As Double
- Argument As Double
- End Type
Visual Basic-Quellcode
- Function pi() As Double
- pi = 4 * Atn(1)
- End Function
- Function Winkel2pi(Winkel As Double) As Double
- 'Sorgt dafür, dass "Winkel" im Bereich 0 <= Winkel < 2pi ist.
- Winkel2pi = (Winkel / (2 * pi) - Int(Winkel / (2 * pi))) * (2 * pi)
- End Function
- Function kompTextK(z As komplexK) As String
- 'Liefert einen String, der "z" in der Form a+b*i darstellt.
- '(ausgehend von kartesischen Koordinaten)
- Dim Text1 As String, Text2 As String, TextMitte As String
- If Abs(z.Realteil) < 10 ^ -15 Then z.Realteil = 0
- If Abs(z.Imaginärteil) < 10 ^ -15 Then z.Imaginärteil = 0
- If z.Realteil = 0 Then Text1 = "" Else Text1 = z.Realteil
- Select Case Abs(z.Imaginärteil)
- Case 0: Text2 = ""
- Case 1: Text2 = "i"
- Case Else: Text2 = Abs(z.Imaginärteil) & " · i"
- End Select
- Select Case Sgn(z.Imaginärteil)
- Case 0: TextMitte = ""
- Case 1: If Text1 = "" Then TextMitte = "" Else TextMitte = " + "
- Case -1: If Text1 = "" Then TextMitte = "-" Else TextMitte = " " & Chr(150) & " "
- End Select
- kompTextK = Text1 & TextMitte & Text2
- If kompTextK = "" Then kompTextK = "0"
- End Function
- Function kompTextP(z As komplexP) As String
- 'Liefert einen String, der "z" in der Form a+b*i darstellt.
- '(ausgehend von Polarkoordinaten)
- kompTextP = kompTextK(PnachK(z))
- End Function
- Function KnachP(z As komplexK) As komplexP
- 'Rechnet kartesische Koordinaten in Polarkoordinaten um.
- KnachP.Betrag = Sqr(z.Realteil ^ 2 + z.Imaginärteil ^ 2)
- If z.Realteil = 0 And z.Imaginärteil = 0 Then
- KnachP.Argument = Empty
- ElseIf z.Imaginärteil = 0 Then
- If z.Realteil > 0 Then KnachP.Argument = 0 Else KnachP.Argument = pi
- ElseIf z.Realteil = 0 Then
- If z.Imaginärteil > 0 Then KnachP.Argument = pi / 2 Else KnachP.Argument = pi * 3 / 2
- Else
- KnachP.Argument = Atn(z.Imaginärteil / z.Realteil)
- If z.Realteil < 0 Then KnachP.Argument = KnachP.Argument + pi
- KnachP.Argument = Winkel2pi(KnachP.Argument)
- End If
- End Function
- Function PnachK(z As komplexP) As komplexK
- 'Rechnet Polarkoordinaten in kartesische Koordinaten um.
- If z.Betrag < 0 Then MsgBox "Ungültiger Parameterwert", vbCritical: Stop
- If z.Betrag = 0 Then
- PnachK.Realteil = 0
- PnachK.Imaginärteil = 0
- Else
- PnachK.Realteil = z.Betrag * Cos(z.Argument)
- PnachK.Imaginärteil = z.Betrag * Sin(z.Argument)
- End If
- End Function
- Function konjugiertK(z As komplexK) As komplexK
- 'Liefert die konjugiert komplexe Zahl zu "z".
- konjugiertK.Realteil = z.Realteil
- konjugiertK.Imaginärteil = -z.Imaginärteil
- End Function
- Function konjugiertP(z As komplexP) As komplexP
- 'Liefert die konjugiert komplexe Zahl zu "z".
- konjugiertP = KnachP(konjugiertK(PnachK(z)))
- End Function
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „roddy“ ()