Programmi Integrazione numerica in C

Kawa46
Buona sera a tutti
scrivo questo post per chiedere aiuto riguardo a tre programmi che ho scritto in C per risolvere numericamente degli integrali.
Si tratta dei metodi dei Rettangoli dei Trapezi e del metodo di Simpson. I programmi li ho scritti nella maniera più semplice possibile, utilizzando solo le righe di codice che ritenevo strettamente necessarie però non essendo un esperto non sono sicuro che siano corretti in quanto provandoli non sempre forniscono risultati corretti. Vi sarei grato se riusciste a correggermi qualora i programmi fossero sbagliati

METODO DEI RETTANGOLI
#include <stdio.h>
#include<math.h>

float funzione (float x);
float funzione (float x) 
 {
  return exp(x)+3*x;
 }

int main() {
	float h,a,b,inte,n,i;
	printf("Inserisci gli estremi di integrazione");
	scanf("%f %f", &a , &b);
	printf("Inserisci il numero di intervalli di suddivisione");
	scanf("%f", &n);
	h=(a+b)/n;
	for(i=a; i<b; i=i+h) {
	 inte=inte+h*funzione(i+h/2);
	}
	printf("l integrale della funzione vale %f", inte);
	return 0;
}

METODO DEI TRAPEZI

(tutto uguale, cambia l'algoritmo all'interno del ciclo for)
for(i=a; i<b; i=i+h) {
inte=inte+h*(funzione(i)+funzione(i+h))/2;
}

METODO DI SIMPSON
(tutto uguale, cambia l'algoritmo all'interno del ciclo for)
for(i=a+h; i<b;i=i+2*h) {
inte=inte+h*(funzione(i-h)+4*funzione(i)+funzione(i+h))/3;
}

Risposte
apatriarca
A prima vista direi che non hai inizializzato inte.

Kawa46
grazie della risposta, in effetti è vero non avevo inizializzato a 0 la variabile inte. Ora sembrano funzionare con regolarità anche se ho notato che per avere una stima buona è necessario un numero elevatissimo di sottointervalli (sia con funzioni logaritmiche che esponenziali o semplicemente polinomiali). Può dipendere da un qualche errore che ho commesso nella scrittura dell'algoritmo?

apatriarca
Quali sono gli intervalli di integrazione che prendi in considerazione? Quali le funzioni? Quanto è grande il tuo numero elevatissimo? Ad una occhiata veloce non noto errori, ma noti almeno differenze tra i diversi metodi?

Kawa46
ad esempio con la funzione $e^x +3x^3$ integrandola da $7$ a $12$ suddividendo in $1500-2000$ intervalli si ha un errore del 2% circa con tutti e tre i metodi, mi sembra un errore piuttosto grosso con un numero cosi alto di suddivisioni

apatriarca
Non direi.. Il problema è che la funzione che hai scritto è abbastanza difficile da integrare. Nota che in quell'intervallo varia da valori intorno a 2000 a valori intorno ai 170000. 1500-2000 intervalli non sono poi tanti comunque. Quello che mi stupisce di più è che tutti i metodi hanno più o meno lo stesso errore.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.