Sehr geehrte Community,
ich bin neu hier und blutiger Anfänger in Excel VBA, weshalb ich für jeden Rat dankbar bin. Zur Lösung von Integralen mittels Trapezregel möchte ich das unten stehende Programm verwenden. Nach Durchlaufen aller Schleifen soll mir zu Ende angegeben werden, wie viele Iterationen durchgeführt wurden. Das Programm soll dabei folgendermaßen funktionieren:
- Der Benutzer muss zuerst die obere und die untere Integralgrenze sowie die erforderliche Genauigkeitsschranke eingeben.
- im ersten Schritt steht die Berechnung eines Trapezintegrals als solches
- der erste Teil der Schleife berechnet zu dem iterierten X- Wert den zugehörigen Y- Wert, solange die t1 größer ist als epsilon. Im zweiten Teil der Schleife wird dann die Schrittweite halbiert.
Gerne würde ich die X- Werte und die Y- Werte in einem Array mit 5 Werten speichern. Könnt ihr mir sagen, wie ich das Array deklarieren muss? Auch bei dem untenstehenden Code bin ich mir nicht sicher, ob Fehler vorhanden sind.
Option Explicit
Function Trapez_mit_Abbruchkriterium(a As Double, b As Double, eps As Double) As Double ' a und b bilden die Intervallgrenzen; eps gibt die Genauigkeit an
Dim i As Integer, h As Double, n As Integer, t1 As Double, t0 As Double, Dim f() As Variant, Dim x() As Variant, Dim Y() As Variant, counter As Integer
' i die Laufzahl der Teilintervalle; h die Streifenbreite; n die Anzahl der Teilintervalle
x [0] = a
' In x(n) stehen die Stützstellen, in Y(n) die zugehörigen Stützwerte
x [1] = b
Y [0] = f(a)
Y [1] = f(b)
n = 1 ' Zählvariable initialisieren
h = (b - a) ' Streifenbreite (über das ganze Intervall)
t1 = h * (Y(0) + Y(1)) / 2 ' Berechnung eines Trapezes
' Starten der Iteration: in t0 und t1 stehen die berechneten Trapezsummen zu t0 und t1
Do While Abs(t1 - t0) > eps
counter = 0
t0 = t1
For i = n To 1 Step 1
x[2 * i] = x[i]
x[2 * i - 1] = (x[i] + x[i - 1]) / 2
Y[2 * i] = Y[i]
Y[2 * i - 1] = f(x[2 * i - 1])
' Halbieren der Schrittweite
n = 2 * n
h = h / 2
t1 = 0
For i = 1 To n - 1 Step 1
t1 = t1 + Y[i]
counter = counter + 1
Loop
MsgBox "Die Schleife wurde " & counter & " mal durchlaufen."
End Function
Function h(x) As Double
'Hierhin schreibt man die Funktion, für die das bestimmte Integral berechnet werden soll.
h = (x * x) * Exp(-x)
End Function
Sub test()
End Sub
Vielen Dank schon im Voraus!!
|