<figure><img src="image_1.png" /></figure>

HAL
open science

# Programme d'aide à la sélection de modèles

Jacques Maratray, J.P. Noirot

► To cite this version:

Jacques Maratray, J.P. Noirot. Programme d'aide à la sélection de modèles. Cahier des Techniques de l'INRA, 1989, 22, pp.65-76. hal-02703137

HAL Id: hal-02703137

https://hal.inrae.fr/hal-02703137v1

Submitted on 2 Sep 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_2.png" /></figure>

Distributed under a Creative Commons Attribution - ShareAlike 4.0 International License
# Programme d'aide à la sélection de modèles

J.MARATRAY et J.P.NOIROT

INRA, Plate-forme de prédéveloppement en Biotechnologie
17 rue SULLY - 21034 DIJON cédex

Le programme dont la description va suivre permet de sélectionner rapidement et sans utiliser des méthodes statistiques très complexes, un modèle pour un type de levure lors d'une fermentation alcoolique. Il sera possible, en utilisant le même principe d'ajouter d'autres modèles ou d'utiliser le concept de ce programme pour un autre type d'essai en changeant les équations.

## Présentation du problème.

Commencons par une présentation sommaire du phénomène. Une levure placée en anaérobiose produit de l'éthanol et un peu de biomasse. Ces deux composés sont produits avec une certaine vitesse qui est maximale au départ et qui décroit au cours du temps. On désigne par Vm la vitesse maximale de production d'éthanol et par µm le taux de croissance maximal de la levure. Par voie de conséquence V et µ seront respectivement la vitesse et le taux de croissance à un instant t donné. La façon la plus courante de présenter l'évolution du phénomène consiste à l'énoncer sous la forme de deux équations V=f(P) et µ=f(P) où P désigne la quantité d'éthanol produit (Pm sera la quantité maximale).

De nombreux modèles sont proposés par la littérature, aussi nous nous sommes limités aux cinq suivants :

$$V=Vm-kP \quad (1)$$

$$\mu=\mu m-k'P \quad (2)$$

$$V=Vm-kP\alpha \quad (4)$$

$$\mu=\mu m-k'P\beta \quad (5)$$

$$V=Vm \quad (3)$$

$$\mu=\mu m \quad (2)$$

$$V=Vm(Kp/(Kp+P)) \quad (5)$$

$$\mu=\mu m(Kp'/(Kp'+P)) \quad (4)$$

$$V=Vm(1-P/Pm)^\alpha \quad (1)$$

$$\mu=\mu m(1-P/Pm')^\beta \quad (3)$$
Les coefficients k, k', k1, k1', α, β, Kp, Kp' sont spécifiques à une souche. Voyons maintenant comment les calculer.

## Méthode de résolution

Au départ, nous sommes en possession de deux séries de points expérimentaux $P=f(t)$ et $X=f(t)$. Le premier traitement consiste à réaliser une régression polynômiale (méthode du pivot) sur ces deux séries de points. Les deux fonctions étant continues cela ne pose aucun problème. On obtient donc les coefficients de ces polynômes. Pour obtenir les vitesses il suffit de dériver ces deux expressions en fonction du temps. On a alors:

$$ 
\begin{array}{l@{\hspace{2em}}l@{\hspace{2em}}l}
dP & dX & \\
V = -- & \mu = -- & \\
dt & dt & \\
\end{array}
 $$

A partir de ces deux polynômes on réalise une interpolation pour obtenir quatre séries de valeurs $P=f(t)$, $V=f(t)$, $X=f(t)$, et $\mu=f(t)$ calculées.

Nous exprimons ensuite $\mu$ et $V$ en fonction de $P$, de façon à résoudre nos équations. Nous les ramenons ensuite à l'unité en les divisant par la biomasse $X$. On obtient alors les deux séries de points sur lesquelles nous allons calculer les différents coefficients.

$$ 
\begin{array}{l@{\hspace{2em}}l@{\hspace{2em}}l}
dP & dX & \\
V = -- & \mu = -- & \\
Xdt & Xdt & \\
\end{array}
 $$

Arrivé à ce stade, on considère les modèles un à un. Dans la suite de cet article nous ne considérerons que l'équation $V=f(P)$, le traitement sur $\mu=f(P)$ étant identique.

### Modèle 1 :

Pour obtenir les coefficients, il suffit de réaliser une régression linéaire $V=f(P)$, la pente et l'ordonnée à l'origine nous donnent respectivement $k$ et $Vm$.

### Modèle 2 :

En prenant le logarithme de l'équation, on obtient:

$$ \log(V)=\log(Vm)-k1P $$

En effectuant une régression linéaire, la pente nous donnera $k1$ et $Vm$ sera égale à l'exponentielle de l'ordonnée à l'origine.

### Modèle 3 :

Pour ce modèle il est nécessaire d'entrer la valeur expérimentale de $Pm$. En prenant le logarithme de l'équation on obtient:

$$ \log(V)=\log(Vm)-\alpha \log(1-P/Pm) $$

Après une nouvelle régression linéaire on obtiendra $Vm$ de la même façon qu'au modèle 2 et $\alpha$ sera la pente.

### Modèle 4 :

Une régression linéaire est réalisée au préalable sur les premiers points pour obtenir la valeur de $Vm$, puis on établit l'équation:

$$ \log(Vm-V)=\alpha \log(P)+\log(k) $$

Suit un traitement identique au précédent.
Modèle 5 :

L'équation du modèle après transformation devient :

$$1/V=1/V_m+P/V_mK_p$$

Nouvelle régression linéaire pour obtenir $V_m$ et $K_p$.

Lorsque tous ces différents coefficients ont été obtenu nous passons à l'étape suivante qui est celle de la sélection.

## Sélection du modèle

Nous sommes donc en possession de cinq modèles et pour déterminer le plus proche de la réalité nous allons calculer pour chacun d'entre eux la somme des carrés des écarts entre les valeurs expérimentales et les valeurs calculées. Le meilleur modèle sera celui dont la somme sera la plus faible. Ainsi nous aurons trouvé le plus représentatif du phénomène biologique.

Ce programme pourra être complété par un autre programme réalisant un algorithme de MARQUARDT qui minimise cette somme des carrés des écarts en faisant varier les paramètres du modèle sélectionné.

## Analyse du programme

Ce programme doit comporter différents modules qui sont les suivants :

- Présentation sur écran

- Saisie des données expérimentales

- Régression polynômiale

- Interpolation polynômiale

- Régression linéaire

- Tri des valeurs

- Les modules de calcul des modèles

- Calcul des sommes des carrés des écarts

- Edition des résultats

Ces modules sont appelés par un programme principal.

Le module de tri est nécessaire pour éliminer les vitesse de production de biomasse inférieure ou égales à 0, cette production stoppant bien avant celle de l'éthanol.

Le programme a été codé en TURBO PASCAL 4.0 et ne présente aucune difficulté particulière.

Il comprend donc outre la déclaration des types et variables 13 procédures et un programme principal.

## Utilisation du programme

L'utilisation est des plus simples. Lorsque l'on exécute le programme, après avoir pris soin de connecter l'imprimante, on donne les valeurs expérimentales des triplets de points, puis les valeurs expérimentales de $P_m$ et de $P_m'$ du modèle 3. Les résultats apparaîtront sur imprimante à la fin de l'exécution. Il est recommandé de ne pas employer plus de dix triplets de points expérimentaux car les résultats de la régression polynômiale et donc de l'interpolation risquent d'être entachés d'erreurs celles-ci étant dues aux approximations inévitables lorsque les valeurs des coefficients du polynôme deviennent trop élevés.
## Conclusion

Ce programme très simple de conception et d'utilisation permet rapidement d'avoir une idée assez précise de l'allure mathématique d'un phénomène. La détermination du modèle devra bien entendu être affinée par des méthodes plus élaborées. Ce programme a été écrit dans le cadre de travaux pour l'obtention d'une thèse de troisième cycle de l'université de Bourgogne dont le titre est : Etude de l'utilisation de modèles mathématiques de la fermentation alcoolique pour la sélection de levures, par J.P.Noirot.

## Table des variables

*********************

## Variables globales

I : variable itérative

NOMENR : nombre de données expérimentales

NOME : nombre de données après interpolation

NVX : nombre de données pour la biomasse après tri

ABSCI : tableau des temps expérimentaux

ORDO1 : tableau des valeurs de P expérimentales

ORDO2 : tableau des valeurs de X expérimentales

ABI : tableau des temps après interpolation

ORI1 : tableau des P après interpolation

ORI2 : tableau des X après interpolation

ORE1 : tableau des V après interpolation

ORE2 : tableau des μ après interpolation

COEF1 : tableau des coefficients de la régression polynômiale pour P

COEF2 : tableau des coefficients de la régression polynômiale pour X

BINF : borne inférieure pour l'interpolation

BSUP : borne supérieure pour l'interpolation

PAS : pas de l'interpolation

OROR : ordonnée à l'origine de la régression linéaire

PENTE : pente de la régression linéaire

COCOR : coefficient de corrélation linéaire

CORMX : tableau des coefficients de corrélation pour X

CORMP : tableau des coefficients de corrélation pour V

COMOX : tableau des coefficients des modèles pour X

COMOP : tableau des coefficients des modèles pour P

SOX : tableau des sommes des carrés pour X

SOP : tableau des sommes des carrés pour P

## Variables locales

Procédure REGREPOL

ORDON : référence à ORD01 et ORD02

COEF : référence à COEF1 et COEF2

J et K : variables itératives

MAT et VA1 : matrice et variable de calcul

PIVO : pivot de la régression
### Procédure INTERPOL

ORI : référence à ORI1 et ORI2

ORE : référence à ORE2 et ORE2

COEF : référence à COEF1 et COEF2

J : variable itérative

### Procédure REGLIN

NOMV : référence à NOMENR, NOM1 et NVX

ABR : référence à ORI1, ORI et ORII

ORR : référence à ORE1, ORE2, OR1 et OREE

SOM : produit de la somme des X par la somme des Y

SOMX : somme des X

SOMY : somme des Y

SOMXY : somme des XY

SOMX2 : somme des X au carré

SOMY2 : somme des Y au carré

MOY : moyenne des Y

MOX : moyenne des X

VA1 et VA2 : variables de calcul

### Procédures MODELE1 à 5

NOM1 : référence à NOME et NVX

COMO1 à 12 : référence à COMOX et COMOP

ORI : référence à ORI1

ORE : référence à ORE1 et ORE2

OREE : valeurs calculées des tableaux d'ordonnées

ORII : valeurs calculées du tableau d'abscisses

### Procédure CARECART

NOM1 : référence à NOME et NVX

SOC : référence à SOP et SOX

COMI : référence à COMOP et COMOX

ORI : référence à ORI1

ORE : référence à ORE1 et ORE2
PROGRAM SELECTION:

USES

PRINTER,CRT;

TYPE

TAB=ARRAY[0..100] OF REAL;

MATR=ARRAY[0..10,0..10] OF REAL;

NOM=STRING[20];

COMO=ARRAY[0..15] OF REAL;

VAR

I,NOMENR,NOME,NVX:INTEGER;

ABSI,ORD01,ORD02,ABI,ORI1,ORI2,ORE1,ORE2,COEF1,COEF2:TAB;

BINF,BSUP,PAS,OROR,COCOR,PENTE:REAL;

COMOX,COMOP,SOX,SOP,CORMX,CORMP:COMO;

PROCEDURE ECRAN;

BEGIN

CLRSCR;

WRITELN('

PROGRAMME DE SELECTION DE MODELES');

WRITELN('

******************************');

WRITELN;

WRITELN;

END;

PROCEDURE SAISIE;

BEGIN

ECRAN;

WRITE('Nombre de triplets de données à entrer : ');

READLN(NOMENR);

NOMENR:=NOMENR;

FOR I:=1 TO NOMENR DO

BEGIN

GOTOXY(5,5+I);WRITE('Temps : ');

READ(ABSI[I]);

GOTOXY(20,5+I);WRITE('Ethanol : ');

READ(ORD01[I]);

GOTOXY(40,5+I);WRITE('Biomasse : ');

READ(ORD02[I]);

END;

END;

PROCEDURE REGREPOL(VAR ORDON,COEF:TAB);

VAR

PIVO,VA1:REAL;

MAT:MATR;

J,K:INTEGER;

BEGIN

FOR I:=0 TO NOMENR-1 DO

BEGIN

ABSI[I]:=ABSI[I+1];

ORDON[I]:=ORDON[I+1];

END;

NOMENR:=NOMENR-1;
FOR I:=0 TO NOMENR DO
BEGIN
  FOR J:=0 TO NOMENR DO
    MAT[I,J]:=EXP(J*LN(ABSI[I]));
    MAT[I,NOMENR+1]:=ORDON[I];
  END;
  FOR K:=0 TO NOMENR DO
    BEGIN
      PIVO:=MAT[K,K];
      IF PIVO=0 THEN
        BEGIN
          FOR I:=K+1 TO NOMENR DO
            BEGIN
              IF MAT[K,I]<>0 THEN
                BEGIN
                  FOR J:=K TO NOMENR+1 DO
                    MAT[K,J]:=MAT[K,J]+MAT[I,J];
                END;
              END;
            END;
          FOR J:=K TO NOMENR+1 DO
            MAT[K,J]:=MAT[K,J]/PIVO;
          IF K<>NOMENR THEN
            BEGIN
              FOR I:=K+1 TO NOMENR DO
                BEGIN
                  VA1:=MAT[I,K];
                  FOR J:=K TO NOMENR+1 DO
                    MAT[I,J]:=MAT[I,J]-VA1*MAT[K,J];
                END;
              END;
            END;
          COEF[NOMENR]:=MAT[NOMENR,NOMENR+1];
          FOR K:=NOMENR-1 DOWNTO 0 DO
            BEGIN
              VA1:=MAT[K,NOMENR+1];
              FOR J:=K+1 TO NOMENR DO
                VA1:=VA1-COEF[J]*MAT[K,J];
              COEF[K]:=VA1;
            END;
          FOR I:=NOMENR DOWNTO 0 DO
            ABSI[I+1]:=ABSI[I];
          NOMENR:=NOMENR+1;
        END;
      PROCEDURE INTERPOL(VAR ORI,ORE,COEF:TAB);
      VAR
        J:INTEGER;
      BEGIN
        NOMENR:=NOMENR-1;
        NOME:=1;
        ABI[NOME]:=BINF;
        REPEAT
          ORI[NOME]:=COEF[0];
          FOR J:=1 TO NOMENR DO
ORI[NOME] := ORI[NOME] + COEF[J]*EXP(J*LN(ABI[NOME ghost));
ORE[NOME] := COEF[1];
FOR J := 2 TO NOMENR DO
  ORE[NOME] := ORE[NOME] + COEF[J]*J*EXP((J-1)*LN(ABI[NOME ghost));
  NOME := NOME + 1;
  ABI[NOME] := ABI[NOME-1] + PAS;
UNTIL ABI[NOME] > BSUP;
NOME := NOME - 1;
NOMENR := NOMENR + 1;
END;

PROCEDURE TRI;
BEGIN
  NVX := 0;
  REPEAT
    NVX := NVX + 1;
    UNTIL ORE2[NVX] <= 0;
    NVX := NVX - 1;
  END;

PROCEDURE REGLIN(NOMV:INTEGER; VAR ABR,ORR:TAB);
VAR
  SOM, SOMX, SOMY, SOMXY, SOMX2, SOMY2, MOX, MOY, VA1, VA2:REAL;
BEGIN
  SOMX := 0;
  SOMY := 0;
  SOMXY := 0;
  SOMX2 := 0;
  SOMY2 := 0;
  FOR I := 1 TO NOMV DO
    BEGIN
      SOMX := SOMX + ABR[I];
      SOMY := SOMY + ORR[I];
      SOMXY := SOMXY + ABR[I] * ORR[I];
      SOMX2 := SOMX2 + ABR[I] * ABR[I];
      SOMY2 := SOMY2 + ORR[I] * ORR[I];
    END;
  SOM := SOMX * SOMY;
  MOX := SOMX / NOMV;
  MOY := SOMY / NOMV;
  PENTE := (SOMXY * MOY * SOMX) / (SOMX2 * MOX * SOMX);
  OROR := MOY * PENTE * MOX;
  VA1 := SOMX2 * NOMV * MOX * MOX;
  VA2 := SOMY2 * NOMV * MOY * MOY;
  COCOR := (SOMXY * NOMV * MOX * MOY) / SQRT(VA1 * VA2);
  END;

PROCEDURE MODELE1(NOM1:INTEGER; VAR
COMO1,COMO2,CORM1:REAL; ORI,ORE:TAB);
BEGIN
  REGLIN(NOM1,ORI,ORE);
  COMO1 := OROR;
  COMO2 := PENTE;
  CORM1 := COCOR;
  END;
PROCEDURE MODELE2(NOM1:INTEGER;VAR
COMO3,COMO4,CORM2:REAL;ORI,ORE:TAB);

VAR
OREE:TAB;

BEGIN
FOR I:=1 TO NOM1 DO
OREE[I]:=LN(ORE[I]);
REGLIN(NOM1,ORI,OREE);
COMO3:=EXP(OROR);
COMO4:=PENTE;
CORM2:=COCOR;

END;

PROCEDURE MODELE3(NOM1:INTEGER;VAR
COMO5,COMO6,COMO7,CORM3:REAL;ORI,ORE:TAB);

VAR
OREE,ORII:TAB;

BEGIN
FOR I:=1 TO NOM1 DO
BEGIN
OREE[I]:=LN(ORE[I]);
ORII[I]:=LN(1-(ORI[I]/COMO6));
END;
REGLIN(NOM1,ORII,OREE);
COMO5:=EXP(OROR);
COMO7:=PENTE;

CORM3:=COCOR;

END;

PROCEDURE MODELE4(NOM1:INTEGER;VAR
COMO8,COMO9,COMO10,CORM4:REAL;ORI,ORE:TAB);

VAR
OREE,ORII:TAB;

BEGIN
FOR I:=1 TO NOM1 DO
BEGIN
OREE[I]:=LN(COMO8-ORE[I]);
ORII[I]:=LN(ORI[I]);
END;
REGLIN(NOM1,ORII,OREE);
COMO9:=EXP(OROR);

COMO10:=PENTE;
CORM4:=COCOR;

END;

PROCEDURE MODELE5(NOM1:INTEGER;VAR
COMO11,COMO12,CORM5:REAL;ORI,ORE:TAB);

VAR
OREE:TAB;

BEGIN
FOR I:=1 TO NOM1 DO
OREE[I]:=1/ORE[I];
REGLIN(NOM1,ORI,OREE);
COMO11:=1/OROR;
COMO12:=1/(COMO11*PENTE);
CORM5:=COCOR;
END;

PROCEDURE CARECART(NOM1:INTEGER;VAR
SOC,COMI:COMO;ORI,ORE:TAB);
BEGIN
  FOR I:=1 TO 6 DO
    SOC[I]:=0;
  FOR I:=1 TO NOM1 DO
    BEGIN
      SOC[1]:=SOC[1]+SQR(ORE[I]-(COMI[1]-(COMI[2]*ORI[I])));
      SOC[2]:=SOC[2]+SQR(ORE[I]-(COMI[3]*EXP(-COMI[4]*ORI[I])));
      SOC[3]:=SOC[3]+SQR(ORE[I]-
        (COMI[5]*EXP(COMI[7]*LN(1-ORI[I]/COMI[6]))));
      SOC[4]:=SOC[4]+SQR(ORE[I]-
        (COMI[8]-COMI[9]*EXP(COMI[10]*LN(ORI[I]))));
      SOC[5]:=SOC[5]+SQR(ORE[I]-
        (COMI[11]*COMI[12]/(COMI[12]+ORI[I])));
    END;
    END;

PROCEDURE RESULT;
  VAR
    NOMS:NOM;
  BEGIN
    ECRAN;
    WRITELN('SORTIE DES RESULTATS SUR
      IMPRIMANTE');
    WRITELN;
    WRITE('Nom de la souche : ');
    READLN(NOMS);
    WRITELN(LST,#12);
    WRITELN(LST,'PROGRAMME D'AIDE A LA SELECTION DE MODELES');
    WRITELN(LST,'****************************************');
    WRITELN(LST);
    WRITELN(LST,'Nom de la souche : ',NOMS);
    WRITELN(LST,'-----------------');
    WRITELN(LST);
    WRITELN(LST,'Points expérimentaux');
    WRITELN(LST,'------------------');
    WRITELN(LST);
    NOMENR:=NOMENR-1;
    FOR I:=0 TO NOMENR DO
      BEGIN
        ABSI[I]:=ABSI[I+1];
        WRITELN(LST,ABSI[I]:10:3,' ',ORDO1[I]:10:3,' ',ORDO2[I]:10:3);
      END;
    WRITELN(LST);
    WRITELN(LST);
    WRITELN(LST,'Coefficients des modèles');
    WRITELN(LST,'---------------------');
    WRITELN(LST);
    WRITELN(LST,'Modèle : V=Vm-kP U=Um-k'P');
  end
end.
WRITELN(LST, 'Vm = ',COMOP[1]:10:3,' Um =
,COMOX[1]:10:3);
WRITELN(LST, 'k = ',COMOP[2]:10:3,' k'' =
,COMOX[2]:10:3);
WRITELN(LST, 'r = ',CORMP[1]:10:3,' r'' =
,CORMX[1]:10:3);
WRITELN(LST);
WRITELN(LST, 'Modèle : V=Vm exp (-k1P) U=Um exp (-k1''P)');
WRITELN(LST, 'Vm = ',COMOP[3]:10:3,' Um =
,COMOX[3]:10:3);
WRITELN(LST, 'k1 = ',COMOP[4]:10:3,' k''1=
,COMOX[4]:10:3);
WRITELN(LST, 'r = ',CORMP[2]:10:3,' r'' =
,CORMX[2]:10:3);
WRITELN(LST);
WRITELN(LST, 'Modèle : V=Vm(1-P/Pm)''a U=Um(1-P/Pm'')''β');
WRITELN(LST, 'Vm = ',COMOP[5]:10:3,' Um =
,COMOX[5]:10:3);
WRITELN(LST, 'Pm = ',COMOP[6]:10:3,' Pm'' =
,COMOX[6]:10:3);
WRITELN(LST, 'a = ',COMOP[7]:10:3,' b =
,COMOX[7]:10:3);
WRITELN(LST, 'r = ',CORMP[3]:10:3,' r'' =
,CORMX[3]:10:3);
WRITELN(LST);
WRITELN(LST, 'Modèle : V=Vm-kP''a U=Um-k''P''b');
WRITELN(LST, 'Vm = ',COMOP[8]:10:3,' Um =
,COMOX[8]:10:3);
WRITELN(LST, 'k = ',COMOP[9]:10:3,' k'' =
,COMOX[9]:10:3);
WRITELN(LST, 'a = ',COMOP[10]:10:3,' b =
,COMOX[10]:10:3);
WRITELN(LST, 'r = ',CORMP[4]:10:3,' r'' =
,CORMX[4]:10:3);
WRITELN(LST);
WRITELN(LST, 'Modèle : V=Vm(Kp/(Kp+P)) U=Um(Kp''/(Kp''+P))');
WRITELN(LST, 'Vm = ',COMOP[11]:10:3,' Um =
,COMOX[11]:10:3);
WRITELN(LST, 'Kp = ',COMOP[12]:10:3,' Kp'' =
,COMOX[12]:10:3);
WRITELN(LST, 'r = ',CORMP[5]:10:3,' r'' =
,CORMX[5]:10:3);
WRITELN(LST);
WRITELN(LST, 'Somme des carrés des écarts');
WRITELN(LST, '--------------------------------');
WRITELN(LST);
WRITELN(LST, 'Modèle 1 : ',SOP[1]:10:3,' ',SOX[1]:10:3);
WRITELN(LST, 'Modèle 2 : ',SOP[2]:10:3,' ',SOX[2]:10:3);
WRITELN(LST, 'Modèle 3 : ',SOP[3]:10:3,' ',SOX[3]:10:3);
WRITELN(LST, 'Modèle 4 : ',SOP[4]:10:3,' ',SOX[4]:10:3);
WRITELN(LST, 'Modèle 5 : ',SOP[5]:10:3,' ',SOX[5]:10:3);
WRITELN(LST,#12)
END;
BEGIN
  SAISIE;
  ECRAN;
  WRITELN('Régressions');
  REGREPOL(ORDO1,COEF1);
  REGREPOL(ORDO2,COEF2);
  ECRAN;
  WRITELN('Interpolations');
  WRITELN;
  WRITE('Borne inférieure : ');
  READLN(BINF);
  WRITE('Borne supérieure : ');
  READLN(BSUP);
  WRITE('Pas de l''itération : ');
  READLN(PAS);
  INTERPOL(ORI1,ORE1,COEF1);
  INTERPOL(ORI2,ORE2,COEF2);
  FOR I:=1 TO NOME DO
    BEGIN
      ORE1[I]:=ORE1[I]/ORI2[I];
      ORE2[I]:=ORE2[I]/ORI2[I];
    END;
  ECRAN;
  TRI;
  WRITELN('Calculs des coefficients');
  MODELE1(NOME,COMOP[1],COMOP[2],CORMP[1],ORI1,ORE1);
  MODELE1(NVX,COMOX[1],COMOX[2],CORMX[1],ORI1,ORE2);
  MODELE2(NOME,COMOP[3],COMOP[4],CORMP[2],ORI1,ORE1);
  MODELE2(NVX,COMOX[3],COMOX[4],CORMX[2],ORI1,ORE2);
  ECRAN;
  WRITE('Valeur du Pm du modèle 3 : ');
  READLN(COMOP[6]);
  MODELE3(NOME,COMOP[5],COMOP[6],COMOP[7],CORMP[3],ORI1,ORE1);
  ECRAN;
  WRITE('Valeur du Pm'' du modèle 3 : ');
  READLN(COMOX[6]);
  MODELE3(NVX,COMOX[5],COMOX[6],COMOX[7],CORMX[3],ORI1,ORE2);
  REGLIN(4,ORI1,ORE1);
  COMOP[8]:=OROR;
  MODELE4(NOME,COMOP[8],COMOP[9],COMOP[10],CORMP[4],ORI1,ORE1);
  REGLIN(4,ORI1,ORE2);
  COMOX[8]:=OROR;
  MODELE4(NVX,COMOX[8],COMOX[9],COMOX[10],CORMX[4],ORI1,ORE2);
  MODELE5(NOME,COMOP[11],COMOP[12],CORMP[5],ORI1,ORE1);
  MODELE5(NVX,COMOX[11],COMOX[12],CORMX[5],ORI1,ORE2);
  ECRAN;
  WRITELN('Calcul de la somme des carrés des écarts');
  CARECART(NOME,SOP,COMOP,ORI1,ORE1);
  CARECART(NVX,SOX,COMOX,ORI1,ORE2);
  RESULT
END.