TP informatique LTM n°1 2004-2005


Vous ferez ce TP par binôme. Vous me ferez un petit rapport (pour deux) expliquant les principales difficultés que vous avez rencontrées (que vous me rendez soit aujourd'hui, soit lundi prochain). Vous me transmettrez le fichier source contenant tous vos sous-programmes et le programme principal permettant de les tester. (soit par mail soit en le transférant par sftp). Le sujet est long, faites en le maximum.

Nous supposons qu'après de longs et savants calculs, vous avez déterminé que les solutions X à un problème physique, en fonction de 4 paramètres A, B, C et D, devaient vérifier l'équation :

Vous n'êtes intéressés que par les racines positives et inférieures à 100 (car les solutions au dessus sont trop difficilement réalisables). Le but de ce TP est de déterminer ces solutions. Vous pourrez tester vos programmes avec les 4 jeux de paramètres suivants : 3, 11, 100, 120 / 8, 10, 23, 10 / 5, 1.5, 33, 30 / 1, 10, 120, 2 (les 4 paramètres seront demandés à l'utilisateur)

Supposons que, d'après le comportement du système étudié, on soit assuré que l'écart entre deux racines est obligatoirement supérieur à 1. Vous allez donc chercher à encadrer les racines par deux entiers adjacents. Pour cela, vous allez calculer f(x) pour toutes les valeurs possibles et vous regarderez quand f(x) change de signe. Si la fonction change de signe, cela signifie obligatoirement qu'elle est passée par 0.

Vous allez désormais rechercher plus précisément chacune des racines. Vous créerez un sous programme (ou une fonction) pour cela. Vous utiliserez une méthode très efficace : la dichotomie. Puisque vous savez à peu près où est la racine (dans un intervalle de 1), il suffit de couper cet intervalle de recherche en deux et regarder dans quelle moitié se trouve la racine. Puis on recommence (couper l'intervalle en deux) jusqu'à ce qu'on encadre la racine avec une précision donnée (par exemple 10-3).

Afin de décomposer l'étude en deux phases (recherche préalable de toutes les racines inférieures à 100, puis analyse de ces points), il faut stocker toutes ces racines dans un tableau (et les avoir comptées, évidement). Faites le. Le tableau et les paramètres sont des variables du programme principal, mais la recherche des racines se fait dans un sous-programme.

Il est intéressant, pour une racine donnée, de savoir quel paramètre a le plus d'influence. Pour cela, il faudrait dériver f par rapport à chaque paramètre, et voir laquelle de ces 4 dérivées a la plus grande valeur (en valeur absolue) au niveau de cette racine. Une valeur exacte n'ayant aucun intérêt, nous allons approximer df/da par (f(a+d)-f(a-d))/(2d) avec d suffisamment petit, par exemple 10-3 (idem évidemment pour les trois autres paramètres). Ecrivez un sous-programme qui pour un x donné calcule et affiche les 4 dérivées.

Autre donnée intéressante à connaître, l' « écart » entre deux racines successives. Cet écart est l'intégrale de f(x) entre ces deux racines (c'est à dire la surface entre la courbe et l'axe des x). Pour calculer cette surface, vous utiliserez la méthode des trapèzes : il s'agit de découper cette surface en petit trapèzes de largeur « d » suffisamment petit, et de faire la somme de leurs surfaces. La surface d'un tel trapèze est f(x)+f(x+d)*(d/2). Attention, si l'on fait trop de calculs, on obtient une erreur importante, on se limitera donc à un découpage en 104 trapèzes. Ecrivez une fonction à qui l'on donne en argument deux racines successives (et toutes les autres informations nécessaires) et qui retourne l'écart calculé de cette manière.


Pour vous aider, j'ai tracé la courbe pour les quatre exemples proposés : ici (ou en pdf). La correction est aussi disponible : source ou pdf.


sujet TP1 sujet TP2 sujet TP3 sujet TP4 retour sommaire TP cours Fortran P. Trau