Simpson Formel mit VB

Tassi

Grünschnabel
Hallo erstmal ;o)

Da hat man sich gerade neu hier angemeldet und muß die Leute schon mit den ersten Fragen nerven. Hoffe Ihr nehmt es einem nicht gleich übel. ABer ich habe folgendes Problem:

Ich muss ein VB-Programm schreiben, das für eine reelle Funktion das Integral näherungsweise mit der Simpsonregel berechnet. Das Programm ansich ist dabei gar nicht das Problem, weil ich alle nötigen Formeln habe. Allerdings habe ich Probleme damit die Formeln in VB umzusetzen. Das ganze muss ja dann mit einer Schleife gelöst werden. Aber bei der Simpsonregel habe ich absolut keinen Plan wie ich das jetzt umsetzen soll.
Hoffe das mir einer dabei behilflich sein kann, da ich hier langsam verzweifel. Danke schonmal im vorraus dafür.
 
Mit anderen Worten: du willst eine Routine schreiben, die eine beliebige Funktion beliebigen Grades berechnen kann. Habe ich das richtig verstanden? Ach ja, der Name "Simpsonregel" sagt mir nichts (aber vielleicht lern ich das ja noch in der Schule)
 
Is sehr unwahrscheinlich, das du das in der Schule lernst ;)

Hab das mal in C programmiert, der Code berechnet das Integral von 0 bis 1 der Funktion e^(x^2) in 8 Teilintervallen. Ich hoffe das hilft dir.

Code:
#include <stdio.h>
#include <math.h>

int main(int argc, char* args[]) {
	double werte[9]; //Die Summe der f(x) kommt hier rein
	double summeS = 0;
	int i;
	for (i = 0; i < 9; i++) {
		double help = i/8.0; //i soll 8 Teilintervalle zwischen 0 und 1 sein
		double fact;
  		help = help * help; //x^2
    	        help = pow(M_E, help); //e^(x^2)
     	        werte[i] = help;
     	        printf("f(xj): %f\n", werte[i]);
     	
     	        fact = 2.0;
     	        if (i % 2 == 1) fact = 4.0;
     	        if ((i == 0) || (i == 8)) fact = 1.0;
     	        summeS += fact * werte[i]; //Die Summe der Simpsonregel
	}
	summeS = summeS * (1/8.0) / 3.0;
	printf("Ergebnis Simpsonregel: %f\n", summeS);
}
 
Hallo zusammen,

erstmal danke für die raschen Antworten. Der C Code von Grimreaper hilft mir ein bissle weiter, allerdings bin ich in VB ein echter wie hier gern genannter Grünschnabel, und damit fällt mir die Umsetzung des ganzen doch ein bissle schwer. Vielleicht gibt es ja noch jemanden der das ganze "einfach" umsetzen kann, weil er den Durchblick hat in VB. Ich werde mich erstmal dran versuchen. Danke nochmals an alle.
 
Ich kann dazu nur sagen, dass ich in VB mittlerweile recht gut durchblicke, allerdings nicht in C. Deswegen hilft mir der C-Code auch nicht weiter.
 
Mensch, ich hab doch extra Kommentare reingehauen :)
Na gut, spätestens am Wochenende werd ich nochmal das gleiche in VB schreiben und posten.

mfg Grimreaper
 
Danke Grimreaper, das wäre echt super. Steh da im Augenblick echt auf dem Schlauch. Kann mich dann schonmal langsam in Datenbanken einarbeiten, da hab ich wenigstens ein bissle Ahnung von. Wünsche euch / Dir noch einen schönen Abend.

Gruß
Tassi
 
Simpson

So hoffe das es so die richtigen Werte ausgibt.
-------------------------------------------------------------------------------------------------------------
Option Explicit
Function Simpson(ByVal a As Double, ByVal b As Double, N As Integer)
Dim k As Integer
Dim h, summe1, summe2 As Double
summe1 = 0
summe2 = 0

h = (b - a) / N

For k = 1 To (N - 1)
summe1 = summe1 + Func_f_x(a + 2 * h * k)
Next k
summe1 = summe1 * 2

For k = 0 To (N - 1)
summe2 = summe2 + Func_f_x(a + (2 * k + 1) * h)
Next k
summe2 = summe2 * 4

Simpson = (summe1 + summe2 + Func_f_x(a) + Func_f_x(b)) * (h / 3)

End Function

Private Sub cmdCALCULATE_Click()
Dim j As Integer, N As Integer
Dim a, b, ergebnis As Double

a = Val(txtX0.Text) 'Start x0
b = Val(txtXN.Text) 'End xN
N = Val(txtN.Text) 'Number of intervals

txtRESULT.Text = Simpson(a, b, N)

End Sub

Function Func_f_x(X1)
'Funktion f(x) die zu integrieren ist
ScriptControl1.Reset
Func_f_x = ScriptControl1.Eval(Trim(Text7.Text)) zu berechnen
End Function

--------------------------------------------------------------------------------------------------------------
 
Zurück