Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Integrazione con metodo dei rettangoli, trapezi e simpson

    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!

    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
    codice:
    #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);
    Ultima modifica di MItaly; 23-07-2014 a 22:24

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Volevo un chiarimento più dettagliato del metodo Simpson.....

  4. #4
    Letta la pagina di Wikipedia? Cosa non ti è chiaro?
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.