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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote