calka Monte Carlo
Ostatnio zmodyfikowano 2019-02-19 15:53
Chrusniak Temat założony przez niniejszego użytkownika |
calka Monte Carlo » 2019-02-19 15:00:03 Cześć Koledzy, Koleżanki! Dostalem takie zadanie. Obliczanie całki oznaczonej wielomianu n-tego stopnia metodą Monte Carlo typu orzeł-reszka Napisz program, który obliczy wartość całki oznaczonej w przedziale (k; l) dla dowolnego, wprowadzonego wielomianu n -tego stopnia. Mam juz cos takiego niestety nie umiem zmienić, aby wpisywac za kazdym razem inna funkcję, bardzo prosilbym o pomoc #include <iomanip> #include <iostream> #include <cstdlib> #include <time.h>
using namespace std;
double f( double x ) { return( x * x + 2 * x ); }
int main() { const int N = 10000; double xp, xk, s, dx; int i; cout << setprecision( 3 ) << fixed; cout << "Obliczanie calki oznaczonej\n" " Metoda Monte Carlo\n" "---------------------------\n" "Podaj poczatek przedzialu calkowania\n\n" "xp = "; cin >> xp; cout << "\nPodaj koniec przedzialu calkowania\n\n" "xk = "; cin >> xk; cout << endl; srand( time( NULL ) ); s = 0; dx = xk - xp; for( i = 1; i <= N; i++ ) s += f( xp +(( double ) rand() /( double )( RAND_MAX + 1 ) * dx ) ); s = dx * s / N; cout << "Wartosc calki wynosi : " << setw( 8 ) << s << endl << endl; system( "pause" ); return 0; } |
|
pekfos |
» 2019-02-19 15:08:38 Trzymaj współczynniki w tablicy i sumuj wartości w[i] * xi. |
|
Chrusniak Temat założony przez niniejszego użytkownika |
» 2019-02-19 15:41:32 Cześć, chcialbym recznie wpisywac wielomian, tak jak teraz mam w kodzie, ale nie wiem jak go przeniesc do funkcji by ją policzyl program
#include <iomanip> #include <iostream> #include <cstdlib> #include <time.h>
using namespace std;
//******************************* //** Tutaj definiujemy funkcję ** //*******************************
double f(double x) { return(x * x + 2 * x); }
//******************** //** Program główny ** //********************
int main() { double xp,xk,calka,dx,N; int i,an;
cout << "Obliczanie calki oznaczonej\n" " Metoda Monte Carlo\n" "---------------------------\n" "Podaj wspolczynnik przy n-tej potedze: " << endl; cin >> an;
int * wspolczynniki = new int[ an ];
for( i = 0; i <= an; i++ ) { if( i == 0 ) cout << "Podaj wartosc wyrazu wolnego: " << endl; else cout << "Podaj wspolczynnik " << i << "stopnia wielomianu" << endl; cin >> wspolczynniki[ i ]; }
cout << setprecision(3) // 3 cyfry po przecinku << fixed; // format stałoprzecinkowy
cout << "Podaj poczatek przedzialu calkowania\n\n" "xp = "; cin >> xp; cout << "\nPodaj koniec przedzialu calkowania\n\n" "xk = "; cin >> xk; cout << endl;
// Losowanie w punktow cout << "Podaj liczbe losowaE: " << endl << "Uwaga! Zakres od 1 do 2^32 - 1" << endl; cin >> N;
// Wypisanie pobranej funkcji cout << "Wprowadzony wielomian to: " << endl; for( i = an; i >= 0; i-- ) { if( i == 0 ) cout << wspolczynniki[ i ]<< endl; else cout << wspolczynniki[ i ] << "x^" << i; if( i > 0 ) if( wspolczynniki[ i ] >= 0 ) cout << "+"; else cout << "-"; }
srand(time(NULL)); calka = 0; dx = xk - xp; for(i = 1; i <= N; i++) calka += f(xp+((double)rand()/(double)(RAND_MAX+1)*dx)); calka = dx * calka / N; cout << "Wartosc calki wynosi : " << setw(8) << calka << endl << endl; system("pause"); return 0; }
|
|
pekfos |
» 2019-02-19 15:53:58 |
|
« 1 » |