Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

calka Monte Carlo

Ostatnio zmodyfikowano 2019-02-19 15:53
Autor Wiadomość
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
C/C++
#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()
{
    const int N = 10000; //liczba punktów losowych
    double xp, xk, s, dx;
    int i;
   
    cout << setprecision( 3 ) // 3 cyfry po przecinku
    << fixed; // format stałoprzecinkowy
   
    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;
}
P-174010
pekfos
» 2019-02-19 15:08:38
Trzymaj współczynniki w tablicy i sumuj wartości w[i] * xi.
P-174011
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;
}
P-174012
pekfos
» 2019-02-19 15:53:58
P-174013
« 1 »
  Strona 1 z 1