begin process at 2012 02 14 06:44:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

Maths

 > 

Trapèzes et intégrales


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Trapèzes et intégrales

lundi 31 mars 2003 à 15:33:15 | Trapèzes et intégrales

Pallas4

Voila je dois faire un programme calculant une intégrale par la méthode des trapèzes, plus précisément celle de Romberg. Et il faudrait qu'au lancement du programme, l'utilisateur puisse choisir les fonctions qui pourront être utiliées dans le programme.
exemple : l'utilisateur lance le programme, il a le choix entre : exponentielle, cosinus, ln, sinus, tangeante, ch,sh et th.
C'est assez pressé, merci d'avance.


lundi 31 mars 2003 à 15:36:12 | Re : Trapèzes et intégrales

Pallas4





-------------------------------
Réponse au message :
-------------------------------

> Voila je dois faire un programme calculant une intégrale par la méthode des trapèzes, plus précisément celle de Romberg. Et il faudrait qu'au lancement du programme, l'utilisateur puisse choisir les fonctions qui pourront être utiliées dans le programme.
> exemple : l'utilisateur lance le programme, il a le choix entre : exponentielle, cosinus, ln, sinus, tangeante, ch,sh et th.
> C'est assez pressé, merci d'avance.
>
>
>
lundi 4 juillet 2005 à 09:34:35 | Re : Trapèzes et intégrales

Yves Dubois


Voici le code que mon collègue Michel Bernard a écrit,
Cette méthode converge très rapidememt.

En espérant cette réponse pas  trop ardive (je viens de m'inscrire).
Si vous avez entretemps une autre méthode qui convergerait encore plus ramidement,
n'hesitez pas à nous  la transmettre !

Bien à vous,

Yves

#include <iostream>

#include <string>

#include <sstream>

#include <vector>

#include <math.h>

using namespace std;

double RombergIntegrator( double func(double), ///< Function to integrate

double a, ///< Lower bound of the integral

double b, ///< Upper bound of the integral

double eps = 1.E-9 ///< Accuracy

)

{

double h = (b-a)/2.; // initial step

int n = 0; // iteration counter

int pow2 = 1; // powers of 2

double i00, iprev;

vector< double > I; // store extrapolated values from the Neville's algorithm

int k;

// compute I(0,0)

double i = h*( (*func)(a) + (*func)(b) );

double i0 = i;

while ( n<20 )

{

I.push_back(i);

// save latest estimation

iprev = i;

// save I(n,0)

i00 = i0;

// compute I(n+1,0) with recursive trapezoidal rule

i0 = 0;

for (k=1;k<=pow2;k++)

{

i0 += (*func)( a + h*(2.*k - 1) );

}

i = i0 = i00/2 + h * i0;

// Richardson extrapolation using Neville's algorithm

int pow4 = 1;

for (k=0;k<=n;k++)

{

pow4 *= 4;

double itemp = I[k];

cout << "I(" << n << "," << k << ") = " << itemp << '\t';

I[k] = i;

i = (pow4 * i - itemp) / (pow4 - 1);

}

cout << endl;

// exit if wanted accuracy has been raached

if ( fabs( i - iprev ) <= eps*fabs(i) ) return i;

n++;

pow2 *= 2;

h /= 2;

}

cout << "Too many steps in RombergIntegrator" << endl;

return 0.;

}

double f(double x)

{

return ( x*x + x + 1) * cos(x);

}

double g(double x)

{

return ( x*x*x*x*log( x + sqrt( x*x + 1 ) ) );

}

main()

{

double pi=3.1415926535;

cout.precision(15);

cout << "I(f)=" << RombergIntegrator( f, 0., pi/2. ) << endl;

cout << "I(g)=" << RombergIntegrator( g, 0., 2. ) << endl;

return 0;

}

lundi 4 juillet 2005 à 09:36:37 | Re : Trapèzes et intégrales

Yves Dubois


Voici le code que mon collègue Michel Bernard a écrit,
Cette méthode converge très rapidememt.

En espérant cette réponse pas  trop ardive (je viens de m'inscrire).
Si vous avez entretemps une autre méthode qui convergerait encore plus ramidement,
n'hesitez pas à nous  la transmettre !

Bien à vous,

Yves

#include <iostream>

#include <string>

#include <sstream>

#include <vector>

#include <math.h>

using namespace std;

double RombergIntegrator( double func(double), ///< Function to integrate

                                     double a, ///< Lower bound of the integral

                                     double b, ///< Upper bound of the integral

                                    double eps = 1.E-9 ///< Accuracy

                                    )

{

double h = (b-a)/2.; // initial step

int n = 0; // iteration counter

int pow2 = 1; // powers of 2

double i00, iprev;

vector< double > I; // store extrapolated values from the Neville's algorithm

int k;

// compute I(0,0)

double i = h*( (*func)(a) + (*func)(b) );

double i0 = i;

while ( n<20 )

{

I.push_back(i);

// save latest estimation

iprev = i;

// save I(n,0)

i00 = i0;

// compute I(n+1,0) with recursive trapezoidal rule

i0 = 0;

for (k=1;k<=pow2;k++)

{

i0 += (*func)( a + h*(2.*k - 1) );

}

i = i0 = i00/2 + h * i0;

// Richardson extrapolation using Neville's algorithm

int pow4 = 1;

for (k=0;k<=n;k++)

{

pow4 *= 4;

double itemp = I[k];

cout << "I(" << n << "," << k << ") = " << itemp << '\t';

I[k] = i;

i = (pow4 * i - itemp) / (pow4 - 1);

}

cout << endl;

// exit if wanted accuracy has been raached

if ( fabs( i - iprev ) <= eps*fabs(i) ) return i;

n++;

pow2 *= 2;

h /= 2;

}

cout << "Too many steps in RombergIntegrator" << endl;

return 0.;

}

double f(double x)

{

return ( x*x + x + 1) * cos(x);

}

double g(double x)

{

return ( x*x*x*x*log( x + sqrt( x*x + 1 ) ) );

}

main()

{

double pi=3.1415926535;

cout.precision(15);

cout << "I(f)=" << RombergIntegrator( f, 0., pi/2. ) << endl;

cout << "I(g)=" << RombergIntegrator( g, 0., 2. ) << endl;

return 0;

}



Cette discussion est classée dans : programme, utilisateur, trapèzes, intégrales, img


Répondre à ce message

Sujets en rapport avec ce message

base de données (besoin d'aide) [ par Hansol ] Bonjour,Je suis en train de créer un programme de Budget. Mon problème est que lorsqu'un utilisateur utilise le programme, il doit inscrire son préno Programme de téléphone [ par smitchel ] LE but serai de fabriquer un prog pour téléphoné en répétiton via le modem en enregistrant en un temp donné ce qui passe sur la ligneYoman Propagation sur le principe d'un vers [ par Florian95 ] Bonjour,Voila je developpe un petit programme de gestion à distance, d'aide a distance, enfin il a plein d'application...Pour le moment il marche sur Gestionnaire d'impression [ par danyboy94 ] BonjourJe suis sur le développement d'un gestionnaire d'impression,et j'ai besoin d'aide pour trouver codes source ou documentations.J'explique,Dans u [C#] Dialog Box - Input Box [ par bibicool ] Bonjour à tous,Je suis face à un problème, je dois poser une question à un utilisateur, et absolument attendre sa réponse avant de continuer mon code. Arrêt du programme [ par mltgn ] Salut,Je souhaite arrêter mon application quand l'utilisateur ne travaille plus la dessus. C'est à dire quand certain temps passe sans que l'utilisate PHPbb [ par Ben2998 ] Bonjour,Je commence à créer un programme assez simple d'utilisation mais pour l'utiliser, il me faudrait faire une Form pour me connecter sur le serve MOt de passe [ par tekila_bandita ] Je fais un programme vb qui demande à l'utilisateur de créer un mot de passe, le probleme, c'est que je ne sais pas comment faire pour que "frmPswd"  Ouvrir plusieurs fichiers, définis par l'utilisateur [ par dhartex ] Bonjour, je souhaiterai, dans mon programme, que l'utilisateur puisse choisir un certain nombre de fichier pour qu'ils soient traités par le programme Faire attendre un programme... [ par Simouss33 ] Bonjour tout le monde!Je vais aller droit au but (je programme sur Visual Studio 2003). J'ai créé un bouton qui exécute une requête nécessitant des pa


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales