TD
-
Projet 1 :
nouvel énoncé du projet (fichier pdf) : la
question Q4 ne demande plus l'utilisation d'une méthode itérative pour
la résolution du système linéaire.
-
-
Nouvelles
indications pour la réalisation du projet :
-
Rapport :
-
Le rapport
doit être rédigé en LateX et doit inclure (sous forme de figures) les
graphes illustrant les résultats obtenus. Il n'est pas nécessaire
d'inclure dans le texte les programmes C++.
-
-
Comment utiliser LateX pour rédiger
un rapport
-
Pour vous aider : le fichier source de l'énoncé du projet
projet1_2011.tex.
-
-
Comment générer des figures
(fichiers pdf) à partir des graphes tracés sous Gnuplot
-
-
-
Programmes C++ :
-
Mettez les schémas numériques sous forme
matricielle pour pouvoir utiliser la classe (MatTriDiag.hpp et MatTriDiag.cpp)
écrite pour modéliser les matrices
tridiagonales.
-
Pour avancer la solution en temps, nous avons
besoin de trois vecteurs seulement
- U0[j] pour U^{n-1}_j, U1[j] pour U^{n}_j
et U2[j] pour U^{n+1}_j
-
- Ces vecteurs seront actualisés à chaque nouveau
pas de temps : on calcule toutes les composantes de U2 suivant
la formule (8), ensuite on fait le "transfert" U0 = U1, U1 =
U2 et on continue avec un nouveau pas de temps.
-
- Si nécessaire, les valeurs de la solution U2 correspondant
à un instant de temps donné seront sauvegardées dans un fichier.
-
-
Sauvegardez la solution
numérique pour plusieurs instants de temps sur la période T : par
exemple, t=0, T/4, 3T/4, T. Vous avez deux
possibilités:
-
- Utilisez des fichiers
différents, dont le nom est généré suivant l'exemple du
ex_caracteres.cpp.
- Utilisez le même fichier pour écrire la
solution pour plusieurs instants de temps
- Dans la boucle en temps on peut écrire dans
fics (défini comme ofstream
avant cette boucle)
for(int i=0;i<N;i++)
fics << x[i] <<" " << temps <<" "<< U2[i]
<< endl;
fics<<endl<<endl; // deux lignes vides pour
indiquer à Gnuplot qu'une nouvelle courbe sera tracée
Si le fichier contenant la solution est "res.dat", on peut
utiliser les commandes Gnuplot
plot
"res.dat" u 1:3 w l
splot "res.dat" w l
Si l'on veut tracer seulement quelques courbes, on utilisera l'option
index ;
par exemple, pour tracer les courbes de 0 à 50 par pas de 10, on
utilise les commandes Gnuplot suivantes
plot "res.dat" u 1:3
index 0:50:10 title "sol numerique" w l
splot "res.dat" u 1:2:3 index 0:50:10 title "sol numerique" w l
-
- Sur les graphs tracés précédemment, il faut
superposer la solution numérique et la solution exacte
(question Q2) pour plusieurs instants de temps.
- Si l'on veut sauvegarder dans le fichier
résultat "toutes les 10 courbes", par exemple, utiliser l'opérateur
"modulo" % (nt compte le nombre de pas de temps)
if(nt %10 == 0){ for(int i=0;i<N;i++)
fics << x[i] <<" " << temps <<" "<< u[i]
<< endl;
fics<<endl<<endl;}
-
-
-
Exercice 1 :
héritage et méthodes virtuelles
- Télécharger les programmes
ClassAB.cpp et ClassABC.cpp
- (ClassAB.cpp) Analyser l'appel des
constructeurs dans les classes dérivées par rapport au type de
pointeur.
-
- (ClassABC.cpp) Analyser l'appel des méthodes
virtuelles. Quel est le résultat sans la définition des méthodes
comme virtuelles ?
-
|