Le programme en C++ est le suivant:
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include "rgrafpor.h"
const int M = 100;
const float dx = 0.1;
const int jmax = 200;
typedef enum{ texte,graphique } affiche;
class data
{ public:
float k, T0, TM, Te;
float a[M];
void read();
};
void init( float* T, data& d);
void relax( float* T, data& d);
void showresult( affiche mode, float* T);
void data::read()
{
cout << "enter k:"; cin >> k;
cout << "enter Te:"; cin >> Te;
cout << "enter T0:"; cin >> T0;
cout << "enter TM:"; cin >> TM;
for(int m = 0; m< M ; m++)
a[m] = float(m)*float(m)/(M-1.)/(M-1.);
}
void init( float* T, data& d)
{
for(int m = 0; m<= M; m++)
T[m]=d.T0 * float(M- m)/float(M) + d.TM *float(m)/float(M);
}
void relax( float* T, data& d)
{
const float kdx2 = d.k / dx / dx;
for(int m = 1; m< M; m++)
T[m] = (kdx2 * (T[m+1] +T[m-1])
+ d.a[m] * d.Te) / (d.a[m]+ 2 * kdx2);
}
void showresult( affiche mode, float* T)
{ int m;
if(mode==graphique)
{
initgraphique();
move2( 0, (int)T[0]);
for( m = 1; m<= M; m++)
line2( m, (int)T[m]);
rattente(1);
closegraphique();
} else if(mode==texte)
for( m = 0; m<= M; m++)
cout<<T[m]<<endl;
}
void main()
{
float* T = new float[M+1];
data d;
d.read();
init(T, d);
for (int j= 0; j< jmax; j++)
relax(T, d);
showresult(texte, T);
}
Cet exemple simple nous montre les quatre étapes d'un logiciel de calcul scientifique :
Les étapes de programmation sont les étapes 2 à 4, l'étape 1 étant une étape de modélisation et d'analyse numérique. Même sur cet exemple simple, le nombre d'instructions dans les parties pré et post-processeurs est plus grand que le nombre d'instructions dans la partie calcul. Cela signifie que le programmeur a passé plus de temps à écrire les pré et post-processeurs. Cette situation est assez générale en calcul scientifique, et c'est la raison principale pour laquelle les personnes qui programment préfèrent utiliser des logiciels commerciaux plutôt que d'écrire eux-mêmes leurs propres programmes d'entrée des données ou d'exploitation graphique.
Enfin remarquons que le programme que nous avons écrit n'est pas très convivial , et ceci pour plusieurs raisons :
a=x*x-1,et c'est le pré-processeur qui génère ensuite le tableau a.