Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Integrale definito in C con almeno quattro cifre decimali esatte
Forum - C/C++ - Integrale definito in C con almeno quattro cifre decimali esatte

Avatar
nuares (Normal User)
Newbie


Messaggi: 5
Iscritto: 01/07/2014

Segnala al moderatore
Postato alle 15:41
Martedì, 01/07/2014
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:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:29
Martedì, 01/07/2014
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 ...
PM Quote
Avatar
nuares (Normal User)
Newbie


Messaggi: 5
Iscritto: 01/07/2014

Segnala al moderatore
Postato alle 16:58
Martedì, 01/07/2014
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

*/

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:08
Martedì, 01/07/2014
E che hai fatto?

Devi cambiare questa

return sin(x);

indicando la tua funzione


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
nuares (Normal User)
Newbie


Messaggi: 5
Iscritto: 01/07/2014

Segnala al moderatore
Postato alle 21:47
Martedì, 01/07/2014
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:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:07
Martedì, 01/07/2014
La funzione è

pow(x,2);

devi sostituirla alla tua scrivendola in C


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote