Oppure

Loading
01/07/14 13:41
nuares
Salve ragazzi, sono nuovo del forum (spero abbia aperto questa discussione nel posto giusto :asd::asd::asd: )

Ho un problema riguardo alla risoluzione di un programma: la risoluzione di un integrale definito (usando uno dei vari metodi esistenti) con almeno 4 cifre decimali esatte.

L' integrale da risolvere è : \int fra 0 e 3 della radq (x*e)^-x dx.

Qualche buon anima è in grado di risolverlo o a darmi qualche dritta?:rofl::rofl::rofl::rofl:

Grazie mille:k:
aaa
01/07/14 14:29
nessuno
Ma devi fare il programma in C che calcola l'integrale o solo il calcolo dell'integrale?

Per il programma, comincia a fornire qualche tua idea dato che non è possibile scriverlo interamente al posto tuo ...

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/07/14 14:58
nuares
Si beh è sottinteso che devo fare il programma in C!:rotfl::rotfl::rotfl::rotfl:

Comunque il mio professore mi ha postato questo codice come guida (utilizza il metodo del punto medio).

Ma ho provato e non riesco ad adattarlo per riuscire a risolvere l' integrale che ho scritto sopra.

:(:(:(

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

float f(float);
float midpoint(float (*)(float), float, float, int);

int main()
{
float a, b, acc, tmp;
float in, i2n;
int n;

printf("Programma per il calcolo del valore di un integrale\n";);
printf(" usando il metodo del punto medio\n";);

printf("Entra gli estremi dell'intervallo ";);
scanf("%f %f",&a,&b);
if (a > b) {
tmp = a;
a = b;
b = tmp;
}
if (a == b) {
printf("Errore! Gli estremi devono essere diversi\n";);
return 1;
}

printf("Entra l'accuratezza ";);
scanf("%f",&acc);
if (acc <= 0) {
printf("Errore! L'accuratezza deve essere positiva\n";);
return 1;
}

n = 1;
while(1) {
in = midpoint(f,a,b,n);
i2n = midpoint(f,a,b,2*n);
if (fabs(in-i2n) < acc) break;
n = 2*n;
}

/*
do {
in = midpoint(f,a,b,n);
i2n = midpoint(f,a,b,2*n);
n = 2*n;
} while(fabs(in-i2n) < acc);
*/

printf("L'integrale (calcolato con %d sottointervalli) vale %f\n",n,i2n);
return 0;
}

float f(float x)
{
return sin(x);
}

float midpoint(float func(float), float a, float b, int n)
{
float sum=0.;
float h, xi, xi1;
int i;

h = (b - a)/n;
for (i=0; i<n; i++) {
xi = a + i*h;
xi1 = xi + h;
sum = sum + func( (xi+xi1)/2 );
}

sum = sum*h;
return sum;
}

/*
Per compilare questo programma:

cc midpoint.c -o midpoint -lm

*/
aaa
01/07/14 17:08
nessuno
E che hai fatto?

Devi cambiare questa

return sin(x);

indicando la tua funzione
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/07/14 19:47
nuares
Ho trovato questo sorgente fatto circa un mesetto fa, che però calcola l integrale tra 1 e 0 di x^2 (una parabola)

#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<math.h>
int i,n;
float a,b,dx,x,s,ve,err_perc;
char continua=' ';
main()
{for(;;) //loop generale
{system("CLS";);
printf("Calcolo integrale definito di sqrt{x*e^-x}";);
printf("\n\nIntroduci a,b: ";);
scanf("%f,%f",&a,&b);
printf("\n\nNumero rettangoli: ";);
scanf("%d",&n);
dx=fabs((b-a)/n);
s=0;
x=a;
for(i=1;i<=n;i++)
{s=s+dx*pow(x,2);
x=x+dx;}
ve=(pow(b,3)-pow(a,3))/3; //ve=
err_perc=fabs(((ve-s)/ve)*100);
printf("\n\nValore esatto = %f",ve);
printf("\n\nValore calcolato = %f",s);
printf("\n\nErrore percentuale = %f",err_perc);
printf("\n\nAltri calcoli? ";);
scanf("%s",&continua);
if(continua=='n' || continua=='N')
{break;}
}//chiude loop generale
}


QUESTO programma funziona benissimo e dà il risultato perfetto.

Il problema è che non so da dove iniziare a modificarlo in modo da verificare l integrale scritto nel post precedente!

riesci a darmi una mano?:k::k::k::k::k::k::k::k::k:
aaa
01/07/14 20:07
nessuno
La funzione è

pow(x,2);

devi sostituirla alla tua scrivendola in C
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.