moin moin,
ich soll für die näherungsweise Berechnung einer Nullstelle für die Funktion: f(x)= e^-x² -w
ein Programm schreiben, nach Regula-Falsi-Schema (ich hoffe einige von euch kennen es, ansonsten kann ich gern nochmal erklären.
Es gilt: w>0
w, beide intervallgrenzen, die maximalen iterationsschritte und die genauigkeitsschranke können über textfelder eingegeben werden.
es gilt dafür sgn(f(u)) ungleich sgn(f(v)) und u(i+1)=u(i); v(i+1) =t für sgn(f(t)) = sgn(f(vi))
folgendes habe ich schon erarbeitet (vorsicht, vba-anfänger )
mein problem ist nun folgendes. meine if-anweisung mit do-loop-schleife erkennt schonmal richtig die vorzeichen. nun möchte ich aber, dass jeder schritt einzeln durchlaufen wird (am ende muss jeder schritt ein in einer picturebox gezeichnet werden). ist es dann besser eine for-schleife zu nehmen? die durchläuft dann aber doch die schleife so oft, welcher der maximale wert ist, in diesem fall itmax.
ich weiß auch nicht recht, ob die schleife so funktioniert. ich hab so die vermutung, dass die immer nur einmal durchlaufen wird.
bitte um hilfe.
vielen dank für eure zeit
ich soll für die näherungsweise Berechnung einer Nullstelle für die Funktion: f(x)= e^-x² -w
ein Programm schreiben, nach Regula-Falsi-Schema (ich hoffe einige von euch kennen es, ansonsten kann ich gern nochmal erklären.
Es gilt: w>0
w, beide intervallgrenzen, die maximalen iterationsschritte und die genauigkeitsschranke können über textfelder eingegeben werden.
es gilt dafür sgn(f(u)) ungleich sgn(f(v)) und u(i+1)=u(i); v(i+1) =t für sgn(f(t)) = sgn(f(vi))
folgendes habe ich schon erarbeitet (vorsicht, vba-anfänger )
Quellcode
- Private Sub Command1_Click()
- Dim w As Integer, itmax As Integer, it As Integer, u As Integer, v As Integer
- Dim genauigkeit As Double, t As Double, ft As Double, fv As Double, fu As Double
- it = 0
- 'Deklarierung der Eingabewerte
- w = TextW.Text
- itmax = TextIterationsschritt.Text
- u = TextU.Text
- v = TextV.Text
- genauigkeit = TextGenauigkeitsschranke.Text
- 'Funktion für f(u)
- fu = (e ^ (u ^ 2)) - w
- 'Funktion für f(v)
- fv = (e ^ (v ^ 2)) - w
- 'Funktion für t
- t = v - fv * ((v - u) / (fv - fu))
- 'Funktion für f(t)
- ft = (e ^ (t ^ 2)) - w
- 'Anweisung
- If fu <> fv Then
- Do While it < itmax
- t = v - fv * ((v - u) / (fv - fu))
- ft = (e ^ (t ^ 2)) - w
- If ft <> fu Then
- v = t
- fv = ft
- Else
- u = t
- fu = ft
- End If
- it = it + 1
- If ft <= genauigkeit Then
- Debug.Print "Sie haben die gewünschte Genauigkeit nach " & it & ". Schritten erreicht. Der Wert ist " & t
- End If
- Exit Do
- Loop
- Debug.Print "Nach " & itmax & " maximalen Schritten ist der Wert " & t & " und Sie haben die gewünschte Genauigkeit damit nicht erreicht"
- Else
- MsgBox "In diesem Intervall gibt es keine Nullstelle!"
- End If
- End Sub
mein problem ist nun folgendes. meine if-anweisung mit do-loop-schleife erkennt schonmal richtig die vorzeichen. nun möchte ich aber, dass jeder schritt einzeln durchlaufen wird (am ende muss jeder schritt ein in einer picturebox gezeichnet werden). ist es dann besser eine for-schleife zu nehmen? die durchläuft dann aber doch die schleife so oft, welcher der maximale wert ist, in diesem fall itmax.
ich weiß auch nicht recht, ob die schleife so funktioniert. ich hab so die vermutung, dass die immer nur einmal durchlaufen wird.
bitte um hilfe.
vielen dank für eure zeit