Hi, ich arbeite das 1.mal mit vba und möchte ein Programm schreiben zur Lösung einer kubischen Gleichung
x³+ax²+bx+c=0
Ich habe zuerst eine Funktion zur Diskriminanten geschrieben:
Public Function Disc(ByVal p As Double, ByVal q As Double) As Double
Disc = (p / 3) ^ 3 + (q / 2) ^ 2
End Function
Nun sollen in excel a,b und c mit Werten gefüllt werden und danach die Diskriminante berechnet werden. Ist D>0 gibt es eine reele Lösung, die ausgegeben werden soll, und hier hängt des. Bis hierhin sieht dann mein main-Programm so aus:
Sub Loesung()
Dim u As Double, v As Double
Dim x_1 As Double
Dim a, b, c As Double
a = Tabelle1.Cells(10, 3)
b = Tabelle1.Cells(11, 3)
c = Tabelle1.Cells(12, 3)
p = (3 * b - a ^ 2) / 3
q = (2 * a ^ 3) / 27 - (a * b) / 3 + c
If Disc(p, q) > 0 Then
u = ((-q / 2) + (Disc(p, q)) ^ (1 / 2)) ^ (1 / 3)
v = ((-q / 2) - (Disc(p, q)) ^ (1 / 2)) ^ (1 / 3)
x_1 = u + v - a / 3
Tabelle1.Cells(17, 3) = x_1
ElseIf Disc(p, q) <= 0 Then
MsgBox "3 Lösungen"
End If
End Sub
Ich bekomme nun beim Debuggen "Lautzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument. Der Fehler liegt irgendwo in der Zeile
v = ((-q / 2) - (Disc(p, q)) ^ (1 / 2)) ^ (1 / 3)
Ändere ich das "-" vor der Funktion Disc z.b. in ein "+" , dann ist der Fehler weg und mein Wert wird berechnet, natürlich ist er dann falsch, aber es funktioniert alles. Nach gleichem Schema habe ich übrigens das für eine quadratische Gleichung gemacht, und hier funktioniert alles einwandfrei.
Danke für eure Hilfe!
|