Mathc matrices/c09a01
Apparence
Installer et compiler ces fichiers dans votre répertoire de travail.
inv01.c |
---|
/* ------------------------------------ */
/* Save as : inv01.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **XX_invgj_mR(
double **A,
double **invA
)
{
double **ID = i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]);
double **AID;
int r = A[R_SIZE][C0];
r--;
AID = i_Abr_Ac_bc_mR(r,r,r);
eye_mR(ID);
c_A_b_Ab_mR(A,ID,AID);
invgj_pivot_mR(AID);
sort_c_mR(AID);
sort_r_mR(AID);
c_Inv_A_mR(AID,invA);
f_mR(AID);
f_mR(ID);
return(invA);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r)
{
double **A = r_mR( i_mR(r,r), 99.);
double **Inv = i_mR(r,r);
double **AInv = i_mR(r,r);
clrscrn();
printf(" Copy/Past into the octave window.\n\n");
printf("format short e\n");
p_Octave_mR(A,"A",P0);
printf(" inv(A)");
XX_invgj_mR(A,Inv);
pE_mR(Inv,S12,P4,C6);
printf(" A * inv(A)");
mul_mR(A,Inv,AInv);
p_mR(AInv,S12,P4,C6);
f_mR(AInv);
f_mR(Inv);
f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(rp_I(C2)+C2);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Nous avons introduit la fonction invgj_mR(); que nous allons étudier. Comme cette fonction est dans la bibliothèque, nous allons l'appeler XX_invgj_mR();
Éssayer de lire le contenu de la fonction :
- Créer la matrice Ab (AID) avec r lignes, Ac colonnes (A) et bc colonnes (ID).
- Construire la matrice identité (ID).
- Copier la matrice A (A) et b (ID) dans Ab (AID).
- Inverser la matrice avec la méthode de gaussjordan.
- Trier les colonnes.
- Trier les lignes.
- Copier la matrice inverse dans la matrice invA.
Exemple de sortie écran :
------------------------------------
Copy/Past into the octave window.
format short e
A=[
-59,+78,+44,-49;
+18,+32,-73,-69;
-65,+62,-73,-11;
-89,+94,-47,-27]
inv(A)
-1.1886e-01 +2.2621e-02 -2.6560e-01 +2.6611e-01
-1.3967e-01 +2.1247e-02 -3.1675e-01 +3.2822e-01
+1.9604e-03 -2.7208e-03 -1.6243e-02 +1.0013e-02
-9.7855e-02 +4.1405e-03 -1.9900e-01 +2.1104e-01
A * inv(A)
+1.0000 -0.0000 +0.0000 +0.0000
-0.0000 +1.0000 -0.0000 +0.0000
-0.0000 +0.0000 +1.0000 +0.0000
+0.0000 -0.0000 +0.0000 +1.0000
Press return to continue
Press X to stop