Mathc matrices/08n
Apparence
Installer et compiler ces fichiers dans votre répertoire de travail.
c00h.c |
|---|
/* ------------------------------------ */
/* Save as : c00h.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define V R1
/* ------------------------------------ */
#define RAb R2
#define CA C6
#define Cb C1
/* ------------------------------------ */
# define FREEV C5
/* ------------------------------------ */
/* ------------------------------------ */
#define UARRAY FREEV
#define VARRAY V
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ab[RAb*(CA+C1)]={
-18, -549, -119, -715, -233, -640, 0, /* V[0]|0 */
-0, -0, -0, -0, -0, -0, 0
};
double **Ab = ca_A_mR(ab, i_Abr_Ac_bc_mR(RAb, CA, Cb));
double **Ab_free = i_Abr_Ac_bc_mR(CA, CA, Cb + FREEV);
double **b_free = i_mR(CA, Cb + FREEV);
double **A = c_Ab_A_mR(Ab, i_mR(RAb, CA));
double **At = transpose_mR(A, i_mR(CA, RAb));
/* ------------------------------------ */
double **u [UARRAY];
double **vt[VARRAY];
/* ------------------------------------ */
int c,r;
/* Compute the free variables (b_free) */
gj_PP_mR(Ab,NO);
put_zeroR_mR(Ab,Ab_free);
put_freeV_mR(Ab_free);
gj_PP_mR(Ab_free,YES);
c_Ab_b_mR(Ab_free,b_free);
clrscrn();
printf(" Compute the orthogonal vectors to V :\n\n\n");
for(c=C0; c<VARRAY; c++)
{
vt[c] = i_mR(CA,C1);
c_c_mR(At,(c+C1),vt[c],C1);
printf(" v^t[%d]:",c);
p_mR(vt[c], S10,P4,C1);
}
stop();
clrscrn();
for(c=C0; c<UARRAY; c++)
{
u[c] = i_mR(CA,C1);
c_c_mR(b_free,(c+C2), u[c],C1);
printf(" u[%d] :",c);
p_mR(u[c], S10,P4,C1);
}
printf(" The free vectors of the system"
" are the orthogonal vectors to V :\n\n\n");
stop();
clrscrn();
printf(" \n\n\n"
" You can verify if"
" the free vectors of the system\n"
" are orthogonal to V : \n\n"
" <u,v> = v^t u \n\n");
for(c=C0; c<VARRAY; c++)
for(r=C0; r<UARRAY; r++)
printf(" v^t[%d] u[%d] = %+.4f\n",c,r, dot_R(vt[c],u[r]));
printf("\n\n\n");
stop();
f_mR(Ab);
f_mR(Ab_free);
f_mR(b_free);
/* --- Free the memory of the Arrays -- */
for(c=C0; c<UARRAY; c++)
f_mR( u[c]);
for(c=C0; c<VARRAY; c++)
f_mR(vt[c]);
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Dans cet exemple, j'ajoute une ligne de zéros au système pour garantir la présence d'au moins deux lignes. La bibliothèque ne fonctionne pas avec les systèmes à une seule ligne. Si le produit scalaire de deux vecteurs est nul, cela signifie qu'ils sont orthogonaux.
Exemple de sortie écran :
Compute the orthogonal vectors to V :
v^t[0]:
-18.0000
-549.0000
-119.0000
-715.0000
-233.0000
-640.0000
Press return to continue.
u[0] :
-30.5000
+1.0000
+0.0000
+0.0000
+0.0000
+0.0000
u[1] :
-6.6111
+0.0000
+1.0000
+0.0000
+0.0000
+0.0000
u[2] :
-39.7222
+0.0000
+0.0000
+1.0000
+0.0000
+0.0000
u[3] :
-12.9444
+0.0000
+0.0000
+0.0000
+1.0000
+0.0000
u[4] :
-35.5556
+0.0000
+0.0000
+0.0000
+0.0000
+1.0000
The free vectors of the system are the orthogonal vectors to V :
Press return to continue.
You can verify if the free vectors of the system
are orthogonal to V :
<u,v> = v^t u
v^t[0] u[0] = +0.0000
v^t[0] u[1] = +0.0000
v^t[0] u[2] = +0.0000
v^t[0] u[3] = -0.0000
v^t[0] u[4] = +0.0000
Press return to continue.