« Mathc matrices/c30e » : différence entre les versions

Contenu supprimé Contenu ajouté
modification mineure
 
modification mineure
Ligne 10 :
 
 
{{Fichier|c02cc02b.c|largeur=70%|info=|icon=Crystal Clear mimetype source c.png}}
<syntaxhighlight lang="c">
/* ------------------------------------ */
/* Save as : c2cc2b.c */
/* ------------------------------------ */
#include "v_a.h"
Ligne 19 :
int main(void)
{
double a[R3R4*C6C8]={
1, 3, 2, 3, 1,0,0,0,
29, 81, 1, 2, 0,1,0,0,
12, 43, -68, 5, 0,0,1,0,
3, 4, 8, 1, 0,0,0,1,
};
 
double inva[R3R4*C3C4]={
-403./9789., +521118./139789., -30247./139789., +21208./139789.,
+3783./9789., -13390./139789., +9-2418./139789., -5+1521./139789.,
-1846./9789., -0247./139789., +11079./139789., -2+637./139789.,
+845./9789., +182./9789., +1781./9789., -2015./9789.
};
 
double **A = ca_A_mR(a, i_mR(R3R4,C6C8));
double **invA = ca_A_mR(inva,i_mR(R3R4,C3C4));
double **T = i_mR(R3R4,C3C4);
 
int i = 1;
 
/* 1-----------------------------------
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+2.009 +8.001 +1.00 +2 +0.00 +1.00 +0.00 +0
+1.002 +4.003 -6.00+8 +5 +0.00 +0.00 +1.00 +0
+3 +4 +8 +1 +0 +0 +0 +1
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S11S8,P2P0,C8);
printf(" R2 = -29*R1 + R2 \n");addR_mR(A, -29,R1,R2);
printf(" R3 = -12*R1 + R3 \n");addR_mR(A, -12,R1,R3);
printf(" R4 = -3*R1 + R4 \n");addR_mR(A, -3,R1,R4);
p_mR(A,S11,P2,C8);
p_mR(A,S8,P0,C8);
stop();
 
/* 21-----------------------------------
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 -3 +1.004 -9.001 -1.002 +0.00 +1.00 +0
+0 -5 +2 -8 -3 +0 +0 +1
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S11S8,P2P0,C8);
printf(" R3 = 2-26*R3 \n"); mulR_mR(A, 2-26.,R3);
printf(" R3R4 = -126*R2 + R3R4 \n");addR_mR mulR_mR(A,-126.,R2,R3R4);
p_mR(A,S11,P2,C8);
printf(" R3 = 3*R2 + R3 \n");addR_mR(A, 3.,R2,R3);
printf(" R4 = 5*R2 + R4 \n");addR_mR(A, 5.,R2,R4);
p_mR(A,S8,P0,C8);
stop();
 
/* 31-----------------------------------
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 +0.00 -13.00155 -49 +0.0025 +3 -1.0026 +2.000
+0 +0 -137 +83 +33 +5 +0 -26
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S11S8,P2P0,C8);
printf(" R1R4 = 13.-155*R 1R4 \n"); mulR_mR(A, 13-155.,R1R4);
printf(" R2R4 = 13.137*R2R3 + R4 \n"); mulR_mRaddR_mR(A, 13137.,R2R3,R4);
printf(" R3 = -1. *R3\n\n"); mulR_mRp_mR(A, -1.S8,P0,R3 C8);
printf(" R1 = -3*R3 + R1 \n");addR_mR(A, -3.,R3,R1);
printf(" R2 = +5*R3 + R2 \n");addR_mR(A, +5.,R3,R2);
p_mR(A,S11,P2,C8);
stop();
 
/* 41-----------------------------------
+13.001 +39.003 +0.002 +13.003 -3.00+1 +6.000 +0 +0
+0.00 +-26.00 -17 -25 +0.00 -26.009 +18.001 -10.00 +0 +0
-+0.00 -+0.00 -155 +13.00 -49 -0.00 +25 +1.00 +3 -2.0026 +0
+0 +0 +0 -19578 -1690 -364 -3562 +4030
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S8,P0,C8);
printf(" R4 = 1./2.*R4 \n");mulR_mR(A,1./2.,R4);
p_mR(A,S8,P0,C8);
stop();
/* 1-----------------------------------
+1 +3 +2 +3 +1 +0 +0 +0
+0 -26 -17 -25 -9 +1 +0 +0
+0 +0 -155 -49 +25 +3 -26 +0
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S8,P0,C8);
printf(" R1 = -9789.*R1 \n"); mulR_mR(A,-9789.,R1);
printf(" R2 = -9789.*R2 \n"); mulR_mR(A,-9789.,R2);
printf(" R3 = -9789.*R3\n\n"); mulR_mR(A,-9789.,R3);
printf(" R1 = -3*R4 + R1 \n");addR_mR(A, -3.,R4,R1);
printf(" R2 = 25*R4 + R2 \n");addR_mR(A, 25.,R4,R2);
printf(" R3 = 49*R4 + R3 \n");addR_mR(A, 49.,R4,R3);
p_mR(A,S8,P0,C8);
stop();
 
/* 1-----------------------------------
-9789 -29367 -19578 +0 -7254 +546 +5343 -6045
+0 +254514 +166413 +0 +66976 -14339 -44525 +50375
+0 +0 +1517295 +0 -286130 -38285 +167245 +98735
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S11S8,P2P0,C8);
printf(" R2R3 = -1./2155.*R2R3 \n");mulR_mR(A,-1./2155.,R2R3);
p_mR(A,S11S8,P2P0,C8);
stop();
 
/* 1-----------------------------------
-9789 -29367 -19578 +0 -7254 +546 +5343 -6045
+0 +254514 +166413 +0 +66976 -14339 -44525 +50375
-0 -0 -9789 -0 +1846 +247 -1079 -637
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S8,P0,C8);
printf(" R1 = -2*R3 + R1 ( 2*9789 = 19578)\n");addR_mR(A, -2.,R3,R1);
printf(" R2 = +17*R3 + R2 (17*9789 = 166413)\n");addR_mR(A,+17.,R3,R2);
p_mR(A,S8,P0,C8);
stop();
 
/* 51-----------------------------------
-9789 +13.00 -29367 +39.000 +0.00 -10946 +13.00 +52 -3.00+7501 +6.00-4771
+0.00 +13.00254514 +0.00 -13.00 +0 +98358 +9.00-10140 -62868 -5.00+39546
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S11S8,P2P0,C8);
printf(" R1R2 = -3 1./26.*R2 + R1 (3*13 = 39)\n");addR_mRmulR_mR(A, -31./26.,R2,R1);
p_mR(A,S11S8,P2P0,C8);
stop();
/* 61-----------------------------------
-9789 +13.00 -29367 +0.00 +0.00 -10946 +52.00 +52 -30.00 +7501 +21.00-4771
+-0.00 -9789 +13.00 +-0.00 -13.000 -3783 +9.00390 +2418 -5.001521
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" (%d) \n\n",i++);
p_mR(A,S8,P0,C8);
printf(" R1 =-3*R2 + R1 (3*-9789 = 29367) \n");addR_mR(A,-3.,R2,R1);
p_mR(A,S8,P0,C8);
stop();
/* 1-----------------------------------
-9789 +0 +0 +0 +403 -1118 +247 -208
-0 -9789 -0 -0 -3783 +390 +2418 -1521
-0 -0 -9789 -0 +1846 +247 -1079 -637
+0 +0 +0 -9789 -845 -182 -1781 +2015
------------------------------------ */
clrscrn();
printf(" A : ");
ca_A_mR(a, A);
p_mR(A,S11,P2P5,C6C4);
printf(" A : inv_mR(invA, T); [see : double inva[R3R4*C3C4] ]");
inv_mR(invA, T);
p_mR(T, S11, P2, C6);
stop();
 
f_mR(A);
f_mR(invA);
f_mR(T);
 
 
return 0;
Ligne 127 ⟶ 194 :
/* ------------------------------------ */
/* ------------------------------------ */
 
</syntaxhighlight>
 
 
Le but de ces exemples est d'inverser une matrice sans faire apparaître de fraction. La matrice double inva[R3R4*C3C4] donne le résultat calculé dans le fichier et permet de vérifier que inv(invA) = A.
 
Ligne 136 ⟶ 204 :
<syntaxhighlight lang="dos">
------------------------------------
 
(1)
 
 
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+2.009 +8.001 +1.00 +2 +0.00 +1.00 +0.00 +0
+1.002 +4.003 -6.00+8 +5 +0.00 +0.00 +1.00 +0
+3 +4 +8 +1 +0 +0 +0 +1
 
R2 = -29*R1 + R2
R3 = -12*R1 + R3
R4 = -3*R1 + R4
 
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 -3 +1.004 -9.001 -1.002 +0.00 +1.00 +0
+0 -5 +2 -8 -3 +0 +0 +1
 
Press return to continue.
Ligne 157 ⟶ 229 :
 
 
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 -3 +1.004 -9.001 -1.002 +0.00 +1.00 +0
+0 -5 +2 -8 -3 +0 +0 +1
 
R3 = 2-26*R3
R3R4 = -126*R2 + R3R4
R3 = 3*R2 + R3
R4 = 5*R2 + R4
 
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 +0.00 -13.00155 -49 +0.0025 +3 -1.0026 +2.000
+0 +0 -137 +83 +33 +5 +0 -26
 
Press return to continue.
 
------------------------------------
(3)
 
 
+1 +3 +2 +3 +1 +0 +0 +0
+0 -26 -17 -25 -9 +1 +0 +0
+0 +0 -155 -49 +25 +3 -26 +0
+0 +0 -137 +83 +33 +5 +0 -26
 
R4 = -155*R4
R4 = 137*R3 + R4
 
+1 +3 +2 +3 +1 +0 +0 +0
+0 -26 -17 -25 -9 +1 +0 +0
+0 +0 -155 -49 +25 +3 -26 +0
+0 +0 +0 -19578 -1690 -364 -3562 +4030
 
Press return to continue.
 
 
------------------------------------
(34)
 
 
+1 +3 +2 +3 +1 +0 +0 +0
+0 -26 -17 -25 -9 +1 +0 +0
+0 +0 -155 -49 +25 +3 -26 +0
+0 +0 +0 -19578 -1690 -364 -3562 +4030
 
R4 = 1./2.*R4
 
+1 +3 +2 +3 +1 +0 +0 +0
+0 -26 -17 -25 -9 +1 +0 +0
+0 +0 -155 -49 +25 +3 -26 +0
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
 
------------------------------------
(5)
 
 
+1.00 +3.00 +2 +3.00 +1.00 +0.00 +0.00 +0
+0.00 -26 +2.00 -17 -5.0025 -2.009 +1.00 +0.00 +0
+0.00 +0.00 -13.00155 -49 +0.0025 +3 -1.0026 +2.000
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
R1 = 13-9789.*RR1 1
R2 = 13-9789.*R2
R3 = -19789. *R3
 
R1 = -3*R3R4 + R1
R2 = +5 25*R3R4 + R2
R3 = 49*R4 + R3
 
-9789 +13.00 -29367 +39.00-19578 +0.00 -7254 +13.00 +546 -3.00+5343 +6.00-6045
+0.00 +254514 +26.00166413 +0.00 +66976 -26.0014339 -44525 +18.00 -10.0050375
-+0.00 -+0.00 +13.001517295 -+0.00 -286130 -38285 +1.00167245 -2.00+98735
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
Ligne 195 ⟶ 310 :
 
------------------------------------
(46)
 
 
-9789 -29367 -19578 +0 -7254 +546 +5343 -6045
+0 +254514 +166413 +0 +66976 -14339 -44525 +50375
+0 +0 +1517295 +0 -286130 -38285 +167245 +98735
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
R3 = -1./155.*R3
 
-9789 -29367 -19578 +0 -7254 +546 +5343 -6045
+0 +254514 +166413 +0 +66976 -14339 -44525 +50375
-0 -0 -9789 -0 +1846 +247 -1079 -637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
------------------------------------
(7)
 
 
-9789 +13.00 -29367 +39.00-19578 +0.00 -7254 +13.00 +546 -3.00+5343 +6.00-6045
+0.00 +254514 +26.00166413 +0.00 +66976 -26.0014339 -44525 +18.00 -10.0050375
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
R2R1 = 1./ -2.*R2R3 + R1 ( 2*9789 = 19578)
R2 = +17*R3 + R2 (17*9789 = 166413)
 
-9789 +13.00 -29367 +39.000 +0.00 -10946 +13.00 +52 -3.00+7501 +6.00-4771
+0.00 +13.00254514 +0.00 -13.00 +0 +98358 +9.00-10140 -62868 -5.00+39546
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
Ligne 212 ⟶ 349 :
 
------------------------------------
(58)
 
 
-9789 +13.00 -29367 +39.000 +0.00 -10946 +13.00 +52 -3.00+7501 +6.00-4771
+0.00 +13.00254514 +0.00 -13.00 +0 +98358 +9.00-10140 -62868 -5.00+39546
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
R1R2 = -3 1./26.*R2 + R1 (3*13 = 39)
 
-9789 +13.00 -29367 +0.00 +0.00 -10946 +52.00 +52 -30.00 +7501 +21.00-4771
+-0.00 -9789 +13.00 +-0.00 -13.000 -3783 +9.00390 +2418 -5.001521
-0.00 -0.00 +13.00-9789 -0.00 +1846 +1.00247 -1079 -2.00637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
 
 
------------------------------------
(9)
 
 
-9789 -29367 +0 +0 -10946 +52 +7501 -4771
-0 -9789 -0 -0 -3783 +390 +2418 -1521
-0 -0 -9789 -0 +1846 +247 -1079 -637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
R1 =-3*R2 + R1 (3*-9789 = 29367)
 
-9789 +0 +0 +0 +403 -1118 +247 -208
-0 -9789 -0 -0 -3783 +390 +2418 -1521
-0 -0 -9789 -0 +1846 +247 -1079 -637
+0 +0 +0 -9789 -845 -182 -1781 +2015
 
Press return to continue.
 
 
------------------------------------
A :
+1.00 00000 +3.00 00000 +32.00 00000 +1.00 +0.00 +03.0000000
+29.00 +8.00 00000 +1.00 +0.00 00000 +1.00 00000 +02.0000000
+12.00 00000 +43.00 -6.00 00000 +08.00 +0.00 00000 +15.0000000
+3.00000 +4.00000 +8.00000 +1.00000
 
+1.00000 +0.00000 +0.00000 +0.00000
+0.00000 +1.00000 +0.00000 +0.00000
+0.00000 +0.00000 +1.00000 +0.00000
+0.00000 +0.00000 +0.00000 +1.00000
 
A : inv_mR(invA, T); [see : double inva[R3R4*C3C4] ]
+1.00 +3.00 +2.00 +3.00
+29.00 +81.00 +1.00 +2.00
+12.00 +43.00 -6+8.00 +5.00
+3.00 +4.00 +8.00 +1.00
 
Press return to continue.