cell.dat
. Les valeurs du courant
doivent être stockées dans un vecteur List_x(1:n)
et les valeurs de la tension dans un vecteur List_y(1:n)
.
n
est ici le nombre de lignes dans le fichier cell.dat
.
spline
et splint
,
vous allez ensuite interpoler la courbe y(x) qui passe par les
points lus précédemment. Vous représenterez le
résultat de cette interpolation sur une centaine de points
compris entre List_x(1)
et List_x(n)
.
func(x)
qui calcule la puissance I.V pour un
courant x
quelconque. Comme dans l'étape
précédente, cette fonction utilisera
splint
. x
étant le seul argument
permis pour func(x)
, vous transmettrez les autres informations
nécessaires via un module donnees_communes
.
Une fois réalisée, vous représenterez cette
fonction func(x)
sur une centaine de points entre
List_x(1)
et List_x(n)
.
golden
et chercherez le minimum d'une fonction
func(x)
modifiée donnant -I.V.
Les routines et modules nécessaires sont:
Ces sous-routines et fonctions marchent en simple précision. Tout le programme doit donc être écrit en simple précision (r
=4 ou SP
).
list_interface
.
On les invoque en faisant, dans le
programme principal par exemple, use nr, only: spline, splint, golden
.
func(x)
, qui sera minimisée par
golden.f90, doit être créée explicitement et son interface
également présente dans list_interface
. Comme dit
précédemment, les paramètres dont la fonction
func(x)
peut avoir besoin, en
dehors de x
lui-même, doivent être
passés par un module donnees_communes
(cfr
exemple).
Voici le Makefile à utiliser avec le gfortran (le programme principal doit s'appeler Interpolation.f90).
subroutine spline(List_x,List_y,yp1,ypn,List_y2)
Etant donnés deux vecteurs de même dimension List_x(1:n)
et
List_y(1:n)
, ainsi que les dérivées premières yp1
et
ypn
en List_x(1)
et List_x(n)
,
la sous-routine renvoie un vecteur List_y2(1:n)
qui contient
les dérivées secondes de la fonction en chaque point.
Pour obtenir une spline naturelle (dérivée seconde nulle aux
extrémités), vous prendrez yp1
=ypn
=1.E30_4.
function splint(List_x,List_y,List_y2,x)
Etant donnés trois vecteurs de même dimension
List_x(1:n)
, List_y(1:n)
et List_y2(1:n)
qui reprennent respectivement les abscisses, les ordonnées et les
dérivées secondes d'une fonction
échantillonnée, y=splint(List_x,List_y,List_y2,x)
interpole la fonction au point x
.
function golden(a,b,c,func,tol,xmin)
Cette fonction recherche le minimum entre a
et
c
d'une fonction
func(x)
à une seule variable x
.
Il faut lui fournir le nom de la fonction func
à
minimiser ainsi que les points a
, b
et
c
.
Ceux-ci sont choisis de telle sorte que a
< b
<
c
et que
func(b)
soit inférieur à
func(a)
et func(c)
.
La fonction golden
utilise la méthode golden search
et renvoit le minimum de la fonction func(x)
.
L'incertitude absolue sur x
est spécifiée par
tol
(prenez tol
=1.E-7_4).
L'abscisse du minimum trouvé est retournée dans xmin
.