PDA

Visualizza la versione completa : [C] Integrazione con metodo dei rettangoli, trapezi e simpson


argobakis
23-07-2014, 16:51
Ciao a tutti
Sono alle prime armi in C, e devo risolvere un problema riguardo il risolvimento di un programma che calcoli l' integrale tra 0 e pi/2 di sqrt (sin(x))dx.
Ho trovato questo sorgente, qualcuno in grado di spiegarmelo a grandi linee?

GRAZIE MILLE PER L' AIUTO! :D:D:D:D:D:D:D

ps: NATURALMENTE LA PRIMA PARTE LA CAPISCO, SE MI POTETE SPIEGARE QUANDO INIZIANO LE FUNZIONI (RETTANGOLO, TRAPEZIO E SIMPSON)....AH E ANCHE A COSA SERVE IL PUNTATORE (*fp)

GRAZIEEEEEEEEEEEEE :unz::unz::unz::unz::unz::unz:


#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#define A 0 /* Estremi dell’intervallo di integrazione A e B */
#define B M_PI/2 /* M_PI la costante pigreco in C*/


double funzione(double x);
double rettangoli(double(*fp)(double), double a, double b, int n); //sintassi funzione: tipo di ritorno (*nome puntatore)(parametro1, parametro2...")//
double trapezi(double(*fp)(double), double a, double b, int n);
double simpson(double(*fp)(double), double a, double b, int n);


int main(void) //Inizio del Main//
{

int k, n;

for (k=0;k<=11;k++)
n=pow(2,k);


printf(" INTEGRATE from 0 to pi/2 of sqrt sen(x)dx\n\n\n");
printf("\n RISULTATI CON I VARI METODI:\n\n\n");
printf("Metodo dei rettangoli: %f\n", rettangoli(funzione, A, B, n));
printf("Metodo dei trapezi : %f\n", trapezi(funzione, A, B, n));
printf("Metodo simpson : %f\n", simpson(funzione, A, B, n));

system ("pause");
return 0;
}

double funzione(double x)
{
return sqrt(sin(x)); /* Funzione da integrare */
}

double rettangoli(double(*fp)(double), double a, double b, int n) //funzione metodo del rettangolo o MID POINT//
{
double h=0, value=0, i=0;
h=(b-a)/n;
for(i=0;i<b;i+=h) value+=h*(*fp)(i+h/2);
return value;
}

double trapezi(double(*fp)(double), double a, double b, int n) //funzione metodo dei trapezi//
{
double h=0, value=0, i=0;
h=(b-a)/n;
for(i=0;i<b;i+=h) value+=(((*fp)(i)+(*fp)(i+h))*h/2);
return value ;
}
double simpson(double(*fp)(double), double a, double b, int n) //funzione metodo di cavalieri-simpson//
{
double h=0, i=0, pari=0, dispari=0;
int j=0;
if ( n % 2 ) ++n;
h=(b-a)/n;
for(i=0+h;i<b;i+=h){
if(j%2==0) pari+=(*fp)(i);
else dispari+=(*fp)(i);
j++;
}
return h* ((*fp)(a)/3 + 4*pari/3 + 2*dispari/3 + (*fp)(b)/3);

oregon
23-07-2014, 18:18
Te l'hanno gi spiegato in

http://www.pierotofy.it/pages/extras/forum/2/1051929-integrale_definito/

argobakis
23-07-2014, 20:49
Volevo un chiarimento pi dettagliato del metodo Simpson..... :jam:

MItaly
23-07-2014, 23:25
Letta la pagina di Wikipedia? Cosa non ti chiaro?

Loading