Całka Monte Carlo

0

"Napisz program liczący przybliżoną wartość całki
oznaczonej f(x)dx metoda Monte Carlo. Załóż, ze wartości funkcji podcałkowej są dodatnie. Metoda Monte Carlo
obliczania całek oznaczonych działa w następujący sposób: Znajdź pole prostokąta
zawierajacego wykres funkcji; generuj w sposób losowy punkty z tego prostokata.
Przybliżoną wartość całki jest równa polu prostokąta pomnożonemu przez ułamek określający, ile z wylosowanych punktów trafiło w obszar pod
wykresem funkcji."

Jak pisałem program liczący miejsca zerowe funkcji kwadratowej to od użytkownika programu brałem tylko współczynniki i podstawiałem do wzorów i miałem wynik. Jak uzyskać od użytkownika programu cały wzór, a nie tylko współczynniki funkcji np. "(cos(x+5)/(4+x^3)"?

0

Nic nie zrozumiałem z tego co napisałeś.

Wytrzeźwiej i napisz jeszcze raz.

No i nawias ci się nie zgadza.

Masz tam napisane, że masz zaznaczyć kwadrat, w którym się funkcja mieści.

I losujesz punkty i zliczasz ile punktów wypadło i ile punktów z nich było pod wykresem funkcji i masz stosunek proporcji.

Looknij sobie jak się liczy liczbę PI metodą monte carlo koło wpisane w kwadrat na wikipedii masz.

0

@Chory Kot "Masz tam napisane, że masz zaznaczyć kwadrat, w którym się funkcja mieści." Tam nie jest tak napisane, radzę wytrzeźwieć lub nauczyć się czytać.
Wiem jak działa ten program, ale nie potrafię go napisać.
To jest program który napisałem, do obliczania miejsc zerowych:

#include "winbgi2.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

void rownanie(double a, double b, double c, double*p, double *q, double *k, double *n){
	if (b*b-4*a*c>0){
		*p = (-b-sqrt(b*b-4*a*c))/(2*a);
		*q = (-b+sqrt(b*b-4*a*c))/(2*a);
		*n = 2;
	}
	else if(b*b-4*a*c==0){
		*k = (-b)/(2*a);
		*n = 1;
	}
	else *n=0;
}

void main(){
	double a,b,c,x1,x2,x0,opcje;
	printf("Prosze podac wspolczynnik a \n");
	scanf("%lf",&a);
	printf("Prosze podac wspolczynnik b \n");
	scanf("%lf",&b);
	printf("Prosze podac wspolczynnik c \n");
	scanf("%lf",&c);
	rownanie(a,b,c,&x1,&x2,&x0,&opcje);
	if (opcje==0){
		printf("Rownanie nie ma pierwiastkow \n");
	}
	else if(opcje==1){
		printf("Pierwiastek podwojny rownania to %lf \n",x0);
	}
	else if(opcje==2){
		printf("Pierwiastek X1 = %lf \t Pierwiastek X2 = %lf",x1,x2);
	}


 wait();

}

W tym programie skanowałem a,b,c robiłem obliczenia na tych parametrach i to mi wystarczyło. Teraz potrzebuje zeskanować od użytkownika całą funkcję, a nie tylko parametr czyli de facto liczbę.

np.(cos(x+5))/(4+x^3) , a później podstawię liczbę pod x i obliczę f(a) i f(b) i będę już mógł z tego wyliczyć pole prostokąta, a później wylosuje liczby z przedziały <a,b> i sprawdzę czy funkcja przyjmuję większe czy mniejsze wartości dla tych wylosowanych liczb i będę miał ułamek.
Teraz jest zrozumiale?

0

Musiałbyś napisać parser wyrażeń matematycznych - szukaj informacji pod kątem c parsing expressions.
Natomiast uprzedzam, że nie jest to łatwa sprawa :-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1