# Hilfe bei Regula Falsi Programmierung



## thomas255 (2. Mai 2011)

Hallo,

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.

Mein Problem ist jetzt nun, dass ich die sache mit dem vorzeichenwechsel nicht ganz implementieren kann, es gilt ja    

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  )


```
Option Explicit

'Globale Variable Eulersche Zahl
Const e As Double = 2.718281828459


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, ausgabeT As Double, vy As Double, uy As Double

it = 0

'Deklarierung der Eingabewerte
w = TextW.Text
iteration = TextIterationsschritt.Text
u = TextU.Text
v = TextV.Text
genauigkeit = TextGenauigkeitsschranke.Text

'Funktion für f(u)
uy = ((e ^ (u ^ 2)) - w)

'Funktion für f(v)
vy = ((e ^ (v ^ 2)) - w)

'Funktion für t
t = v - vy * ((v - u) / (vy - uy))

'Funktion für f(t)
ausgabeT = ((e ^ (t ^ 2)) - w)

'Ausgabeanweisung
If ausgabeT <= genauigkeit Then
    MsgBox "Sie haben die gewünschte Genauigkeit erreicht. Der Wert ist " & ausgabeT
End If

End Sub
```

ich habe schon andere lösungsansätze gefunden, wollte es aber gern mit der sgn-funktion machen, wenn mir einer von euch helfen könnte.

Vielen Dank für eure Zeit.


----------



## thomas255 (2. Mai 2011)

ich hab jetzt mal n bisschen rumprobiert und sowas dabei rausbekommen:


```
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 ausgabeT <= genauigkeit Then
                MsgBox "Sie haben die gewünschte Genauigkeit erreicht. Der Wert ist " & ft
            End If
        
        Loop
            MsgBox "Nach " & itmax & " maximalen Schritten ist der Wert " & ft
End If
```

oder ist es besser die do-while nach der genauigkeit zu bestimmen und für die iterationsschritte eine for-schleife zu machen****


----------

