Flächeninhalt mit Monte carlo verfahren berechnen
-
huhu,
Ich habe ein Problem. Ich soll die Fläche einer Kurve mit dem Monte carlo verfahren berechnen. x1, x2 und die Höhe sollen eingegeben werden und der Flächeninhalt dann Nährungsweise mit A = (x2-x1)*h*(T/N) berechnet werden. Aber irgendwie kommt bei mir nur Blödsinn raus, kann mir einer einen Tip geben!
#include <stdio.h> #include <math.h> #include <stdlib.h> int main() { double x1, x2, hoehe, gesammtflaeche, flaeche, funktion ; int zahlen, i, anzahl, x_start, x_start2, treffer; int x=3; funktion = exp(x); printf("Ich bin ein gelungeses Programm das einen Flaecheninhalt naehrungsweise ausrechnet, \n"); printf("Bitte geben sie X1 ein, \n"); scanf("%lf", &x1); printf("Bitte geben sie X2 ein, \n"); scanf("%lf", &x1); printf("Bitte geben sie die hoehe H ein, \n"); scanf("%lf", &hoehe); printf("Bitte geben sie die Anzahl das Zufallszahlen N ein, \n"); scanf("%d", &anzahl); for( i=0;i<anzahl; i++) { x_start = x1*rand()/RAND_MAX; x_start2 = x2*rand()/RAND_MAX; if( x_start*x_start2 <= 1) { treffer++; } } flaeche = (x2-x1)*hoehe*(treffer/i); printf("Zeige: %lf", flaeche); return 0; }
-
was ist x1, x2 und H?
x_start und x_start2 sind ints. alle gleitkommazahlen werden abgeschnitten. beachte das.
-
Naja... das ist so eine Sachen... ich steig teilweise selber nicht mehr durch ( bin noch Anfänger ) also die Aufgebenstellung ist folgende:
Es soll der Flächeninhalt zwischen der x-Achse und einem (nicht negativen) Funktionsgraphen y=f(x) mit Hilfe der Monte Carlo Methode näherungsweise berechnet werden.
Es werden dazu N Paare von Zufallszahlen der Form (x,y) erzeugt, die alle innerhalb des Rechtecks x1, x2, H1, H2 liegen müssen. Wenn nun y<f(x) ist, liegt der entsprechende Punkt unter dem Graphen. Liegen von den N Punkten T unter dem Graphen, so kann der
Flächeninhalt A näherungsweise durch folgende Formel bestimmt werden:
A = (x2-x1)*h*(T/N)So, also x1 und x2 sind die Randwerte des Definitionsbereiches und H die höhe. Also ich steig da nicht mehr durch und wäre über Hilfe echt dankbar!
-
Dann setz' doch auch das, was du da erzählt hast, in C um
//1. Bestimme Koordinaten x1<=x<=x2, 0<=y<=h x_pos=(x2-x1)*(rand()/(double)RAND_MAX)+x1; y_pos=h*(rand()/double)RAND_MAX); //2. Bestimme Position bzgl. Funktion if(y_pos<=f(x_pos) treffer++;