Le fichier source est ${UPS_HOME}/upsvtm/demo/${UPS_LANGUAGE}/matrice3.upl.
Cet exemple utilise les instructions de l'extension d'Up ! 5GL pour Up ! Mathematical.
Pour analyser le fichier source, UpsMat.upi doit être déclaré parmi les modules importés dans le fichier ${UPS_HOME}/ini/${UPS_USER}/upsp5l.ini.
upscmp Source=matrice3.upl
matrice3
upssng Source=matrice3.upl
Source Composant "Exemple d'emploi du type Matrice" Version 4.0.0;
Procedure EcrireMatrice(Libelle : Caractere, M : Matrice[?,?] De Nul Ou Complexe)
/*******************************************************************************/
Variable
/******/
I : Entier;
J : Entier;
Ligne : Nul Ou Caractere;
Debut
Ecran.Ecrire(Libelle);
Ecran.Ecrire("-------------");
Pour I=0 JusquA M.NbLignes-1 Faire
Si I==0 Alors
Ligne="{{";
Sinon
Ligne=" {";
Fin Si
Pour J=0 JusquA M.NbColonnes-1 Faire
Si J!=0 Alors
Ligne+=", ";
Fin Si
Ligne+=M[I,J].VersCaractere("-&&&.&&&.&&&.&,#&&.&&&");
Fin Pour
Si I==M.NbLignes-1 Alors
Ligne+="}}";
Sinon
Ligne+="}";
Fin Si
Ecran.Ecrire(Ligne);
Fin Pour
Fin Procedure
Procedure Appliquer1(C : Nul Ou Complexe)
/***************************************/
Debut
Ecran.Ecrire(C.VersCaractere("-&&&.&&&.&&&.&,#&&"));
Fin Procedure
Procedure Appliquer2(C1 : Nul Ou Complexe, C2 : Nul Ou Complexe)
/**************************************************************/
Debut
Ecran.Ecrire(C1.VersCaractere("-&&&.&&&.&&&.&,#&&")+"+"+C2.VersCaractere("-&&&.&&&.&&&.&,#&&"));
Fin Procedure
Fonction Appliquer3(C : Nul Ou Complexe) Retourner Nul Ou Complexe
/****************************************************************/
Debut
Retourner -C;
Fin Fonction
Fonction Appliquer4(C1 : Nul Ou Complexe, C2 : Nul Ou Complexe) Retourner Nul Ou Complexe
/***************************************************************************************/
Debut
Retourner -(C1+C2);
Fin Fonction
Principal
/*******/
Variable
/******/
A : Matrice[3,3] De Nul Ou Complexe;
B : Matrice[3,3] De Nul Ou Complexe;
C : Nul Ou Matrice[?,?] De Nul Ou Complexe;
Q : Nul Ou Matrice[?,?] De Nul Ou Complexe;
R : Nul Ou Matrice[?,?] De Nul Ou Complexe;
P : Nul Ou Matrice[?,?] De Nul Ou Complexe;
L : Nul Ou Matrice[?,?] De Nul Ou Complexe;
D : Nul Ou Matrice[?,?] De Nul Ou Complexe;
U : Nul Ou Matrice[?,?] De Nul Ou Complexe;
V : Nul Ou Matrice[?,?] De Nul Ou Complexe;
X : Nul Ou Complexe;
Y : Nul Ou Entier;
Debut
A[0,0]=Complexe(1.0);
A[0,1]=Complexe(2.0);
A[0,2]=Complexe(3.0);
A[1,0]=Complexe(4.0);
A[1,1]=Complexe(6.0);
A[1,2]=Complexe(5.0);
A[2,0]=Complexe(7.0);
A[2,1]=Complexe(8.0);
A[2,2]=Complexe(9.0);
EcrireMatrice("A", A);
B={{Complexe(4.0), Complexe(5.0), Complexe(6.0)}, {Complexe(7.0), Complexe(8.0), Complexe(9.0)}, {Complexe(1.0), Complexe(2.0), Complexe(3.0)}};
EcrireMatrice("B", B);
Ecran.Ecrire(");
C=A+B;
EcrireMatrice("A+B", C);
C=-A;
EcrireMatrice("-A", C);
C=A-B;
EcrireMatrice("A-B", C);
C=A*B;
EcrireMatrice("A*B", C);
C=B/A;
EcrireMatrice("B/A", C);
C=A.Cloner();
EcrireMatrice("++C", ++C);
EcrireMatrice("--C", --C);
C=C^4;
EcrireMatrice("C^4", C);
Ecran.Ecrire(");
C=Complexe(2.0);
EcrireMatrice("C=2.0", C);
C+=Complexe(3.0);
EcrireMatrice("C+=3.0", C);
C-=Complexe(3.0);
EcrireMatrice("C-=3.0", C);
C*=Complexe(3.0);
EcrireMatrice("C*=3.0", C);
C/=Complexe(3.0);
EcrireMatrice("C/=3.0", C);
C^=4;
EcrireMatrice("C^=4", C);
Ecran.Ecrire(");
C=A.Copier(0, 0, 3, 3);
EcrireMatrice("Copier()", C);
C=Complexe(0.0);
C.Coller(0, 0, A);
EcrireMatrice("Coller()", C);
C=A.InsererColonne(1, Complexe(10.0));
EcrireMatrice("InsererColonne()", C);
C=A.InsererLigne(1, Complexe(10.0));
EcrireMatrice("InsererLigne()", C);
C=A.SupprimerColonne(1);
EcrireMatrice("SupprimerColonne()", C);
C=A.SupprimerLigne(1);
EcrireMatrice("SupprimerLigne()", C);
C=A.Copier(0, 0, 3, 3);
C.PermuterColonnes(0, 2);
EcrireMatrice("PermuterColonnes()", C);
C=A.Copier(0, 0, 3, 3);
C.PermuterLignes(0, 2);
EcrireMatrice("PermuterLignes()", C);
C=A.Copier(0, 0, 3, 3);
C.Transposer();
EcrireMatrice("Transposer()", C);
C=A.Copier(0, 0, 3, 3);
C.AppliquerSymetrieVerticale();
EcrireMatrice("AppliquerSymetrieVerticale()", C);
C=A.Copier(0, 0, 3, 3);
C.AppliquerSymetrieHorizontale();
EcrireMatrice("AppliquerSymetrieHorizontale()", C);
Si C.EstDiagonale() Alors
Ecran.Ecrire("EstDiagonale");
Sinon
Ecran.Ecrire("Non EstDiagonale");
Fin Si
Si C.EstTriangulaireSuperieure() Alors
Ecran.Ecrire("EstTriangulaireSuperieure");
Sinon
Ecran.Ecrire("Non EstTriangulaireSuperieure");
Fin Si
Si C.EstTriangulaireInferieure() Alors
Ecran.Ecrire("EstTriangulaireInferieure");
Sinon
Ecran.Ecrire("Non EstTriangulaireInferieure");
Fin Si
Si C.EstSymetrique() Alors
Ecran.Ecrire("EstSymetrique");
Sinon
Ecran.Ecrire("Non EstSymetrique");
Fin Si
Si C.EstAntiSymetrique() Alors
Ecran.Ecrire("EstAntiSymetrique");
Sinon
Ecran.Ecrire("Non EstAntiSymetrique");
Fin Si
Ecran.Ecrire(");
A.Appliquer(Appliquer1);
A.Appliquer(Appliquer2, B);
C=A.Appliquer(Appliquer3);
EcrireMatrice("Appliquer3()", C);
C=A.Appliquer(Appliquer4, B);
EcrireMatrice("Appliquer4()", C);
Ecran.Ecrire(");
A={{Complexe(1.0), Complexe(1.0), Complexe(2.0)}, {Complexe(1.0), Complexe(0.0), Complexe(-2.0)}, {Complexe(-1.0), Complexe(2.0), Complexe(3.0)}};
DecomposerQR(A, Q, R);
EcrireMatrice("Q", Q);
EcrireMatrice("R", R);
DecomposerPLU(A, P, L, U);
EcrireMatrice("P", P);
EcrireMatrice("L", L);
EcrireMatrice("U", U);
DecomposerPLDU(A, P, L, D, U);
EcrireMatrice("P", P);
EcrireMatrice("L", L);
EcrireMatrice("D", D);
EcrireMatrice("U", U);
A={{Complexe(1.0), Complexe(2.0), Complexe(3.0)}, {Complexe(4.0), Complexe(6.0), Complexe(5.0)}, {Complexe(7.0), Complexe(8.0), Complexe(9.0)}};
DecomposerVL(A, V, L);
EcrireMatrice("V", V);
EcrireMatrice("L", L);
C=Inv(A);
EcrireMatrice("Inv(A)", C);
X=Complexe(Det(A));
Ecran.Ecrire("Det(A)="+X.VersCaractere("-&&&.&&&.&&&.&,#&&.&&&"));
X=Complexe(Trc(A));
Ecran.Ecrire("Trc(A)="+X.VersCaractere("-&&&.&&&.&&&.&,#&&.&&&"));
Y=Rng(A);
Ecran.Ecrire("Rng(A)="+Caractere(Y));
A={{Complexe(5.0), Complexe(-4.0), Complexe(1.0)}, {Complexe(-4.0), Complexe(6.0), Complexe(-4.0)}, {Complexe(0.0), Complexe(-4.0), Complexe(5.0)}};
C=Exp(A);
EcrireMatrice("Exp(A)", C);
C=Log(A);
EcrireMatrice("Log(A)", C);
C=Racine(A);
EcrireMatrice("Racine(A)", C);
Ecran.Ecrire(");
Fin Principal