Aller au contenu

Mathc matrices/095

Un livre de Wikilivres.


Application

Installer et compiler ces fichiers dans votre répertoire de travail.

c00e.c
/* ------------------------------------ */
/*  Save as :   c00e.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RAb R3
#define   CA  C4
#define   Cb  C1
#define   Rv  C4
/* ------------------------------------ */
# define FREEV C1
/* ------------------------------------ */
int main(void)
{
double ab[RAb*(CA+Cb)]={ 
+4, +3, -1, -2,  -0,  /* V1|0  See c00a.c */ 
-1, -1, +2, -3,  -0,  /* V2|0             */
-2, -5, +4, -3,  -0   /* V3|0             */      
};

double Projp[Rv*C1] ={
  -12.062500000000, 
  -13.750000000000, 
  +15.375000000000, 
  -15.750000000000  
};

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 **vPp     =      ca_A_mR(Projp,   i_mR(Rv,C1));   
double **v1      =                       i_mR(Rv,C1); 
double **v2      =                       i_mR(Rv,C1);
double **v3      =                       i_mR(Rv,C1);
double **vQ      =                       i_mR(Rv,C1);


/*  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:         (See c00a .c)\n\n" 
         " v1:");      
  p_mR(c_c_mR(At,(C1), v1,C1), S10,P4,C1);       
  printf(" v2:");      
  p_mR(c_c_mR(At,(C2), v2,C1), S10,P4,C1);
  printf(" v3:");      
  p_mR(c_c_mR(At,(C3), v3,C1), S10,P4,C1);  
  stop();

  clrscrn();
  printf(" vQ is orthogonal to the vectors v1,v2 and v3.\n\n"
         " The equation of a hyperplan defined by v1, v2 and v3\n"
         " is ax + by + cz + dt=0, where a,b,c,d are the coordinates\n"
         " of the vector orthogonal (vQ).\n\n"
         " vQ:");       
  p_mR(c_c_mR(b_free,C2, vQ,C1), S10,P12,C1);                     
  stop();

  clrscrn();
  printf(" vPp is the projection of a point P onto the hyperplan (See c00d.c)\n\n"
         " vPp:");   
  p_mR(vPp, S10,P12,C1);   
  printf(" vQ is orthogonal to the hyperplan defined by the vectors v1,v2 and v3.\n\n"
         " vQ:");   
  p_mR(vQ, S10,P12,C1);   
  printf(" dot(vPp,vQ)  = %.9f\n\n"
         " The dot product of vQ and vPp say that the vector vPp   \n"
         " is orthogonal to the vector vQ. Then the point p is in\n"
         " the hyperplan v1, v2 and v3.\n\n",
           dot_R(vPp,vQ));    
  stop();  
  
  f_mR(Ab);
  f_mR(Ab_free);
  f_mR(b_free);
  f_mR(v1);          
  f_mR(v2);
  f_mR(vQ);
    
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Vérifiez si la projection d'un point P appartient à l'hyperplan. Si la projection du point P, le vecteur vPp, est perpendiculaire au vecteur vQ, alors le produit scalaire de ces deux vecteurs est nul et le point Pp appartient bien à l'hyperplan.

Exemple de sortie écran :

Compute the orthogonal vectors to:         (See c00a .c)

 v1:
   +4.0000 
   +3.0000 
   -1.0000 
   -2.0000 

 v2:
   -1.0000 
   -1.0000 
   +2.0000 
   -3.0000 

 v3:
   -2.0000 
   -5.0000 
   +4.0000 
   -3.0000 

 Press return to continue. 


 vQ is orthogonal to the vectors v1,v2 and v3.

 The equation of a hyperplan defined by v1, v2 and v3
 is ax + by + cz + dt=0, where a,b,c,d are the coordinates
 of the vector orthogonal (vQ).

 vQ:
+0.285714285714 
+1.000000000000 
+2.142857142857 
+1.000000000000 

 Press return to continue. 


 vPp is the projection of a point P onto the hyperplan (See c00d.c)

 vPp:
-12.062500000000 
-13.750000000000 
+15.375000000000 
-15.750000000000 

 vQ is orthogonal to the hyperplan defined by the vectors v1,v2 and v3.

 vQ:
+0.285714285714 
+1.000000000000 
+2.142857142857 
+1.000000000000 

 dot(vPp,vQ)  = 0.000000000

 The dot product of vQ and vPp say that the vector vPp   
 is orthogonal to the vector vQ. Then the point p is in
 the hyperplan v1, v2 and v3.

 Press return to continue.