begin process at 2012 05 27 17:38:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ORTHONORMALISATION DE GRAM-SCHMIDT

ORTHONORMALISATION DE GRAM-SCHMIDT


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :orthonormalisation, gramschmidt, produit, scalaire, vecteurs Niveau :Débutant Date de création :24/04/2005 Date de mise à jour :03/08/2006 23:53:51 Vu / téléchargé :10 237 / 107

Auteur : JCDjcd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Programmation du procédé d'orthonormalisation de Gram-Schmidt avec des vecteurs de R^n, et avec un produit scalaire quelconque.

Source

  • #ifndef _UTIL_H_
  • #include "util.h"
  • #endif // _UTIL_H_
  • #ifndef _MATH_H_
  • #include "math.h"
  • #endif // _MATH_H_
  • #ifndef _LIST_H_
  • #include "list.h"
  • #endif // _LIST_H_
  • #ifndef _WINUTIL_H_
  • #include "winutil.h"
  • #endif // _WINUTIL_H_
  • #include "conio.h"
  • //-------------------------------------------------
  • // OUTILS
  • //-------------------------------------------------
  • void printFloat(double x)
  • {
  • printf("%lf",x);
  • } // printFloat()
  • //-------------------------------------------------
  • void printVect(P_VECTND u)
  • {
  • int i;
  • printf("(");
  • printFloat(u->coord[0]);
  • for(i=1;i<u->dim;i++)
  • {
  • printf(" ,");
  • printFloat(u->coord[i]);
  • }
  • printf(" )\n");
  • } // printVect()
  • //-------------------------------------------------
  • // GRAM-SCHMIDT
  • //-------------------------------------------------
  • typedef double (*DOT_PRODUCT)(P_VECTND,P_VECTND);
  • //-------------------------------------------------
  • double dotProduct(DOT_PRODUCT phi,P_VECTND u,P_VECTND v)
  • {
  • return phi(u,v);
  • } // dotProduct()
  • //-------------------------------------------------
  • double norm(DOT_PRODUCT phi,P_VECTND u)
  • {
  • return sqrt(phi(u,u));
  • } // norm()
  • //-------------------------------------------------
  • PP_VECTND GramSchmidt(PP_VECTND vect,int nb,DOT_PRODUCT phi)
  • {
  • PP_VECTND res;
  • int dim,i;
  • double n;
  • AssertPointer(vect);
  • AssertPointer(phi);
  • Assert(nb >= 1);
  • dim = vect[0]->dim;
  • res = Malloc(P_VECTND,nb);
  • for(i=0;i<nb;i++)
  • {
  • res[i] = CreateVectND(dim);
  • }
  • // le premier vecteur est juste normalise
  • n = norm(phi,vect[0]);
  • Assert(!CmpDouble0(n));
  • MulByScalarVectND(res[0],vect[0],1./n);
  • for(i=1;i<nb;i++)
  • {
  • int j;
  • Assert(vect[i]->dim == dim);
  • CopyVectND(res[i],vect[i]);
  • // on hote les composantes suivants les vecteurs deja "orthonormalises"
  • for(j=0;j<i;j++)
  • {
  • double k;
  • k = dotProduct(phi,res[i],res[j]); // la composante est le produit scalaire ...
  • LinCombinVectND(res[i],res[i],res[j],1.,-k);
  • }
  • // on normalise
  • n = norm(phi,res[i]);
  • Assert(!CmpDouble0(n));
  • MulByScalarVectND(res[i],res[i],1./n);
  • }
  • return res;
  • } //GramSchmidt()
  • //-------------------------------------------------
  • // MAIN
  • //-------------------------------------------------
  • double myDotProduct(P_VECTND u,P_VECTND v)
  • {
  • double x1,y1,z1;
  • double x2,y2,z2;
  • x1 = u->coord[0];
  • y1 = u->coord[1];
  • z1 = u->coord[2];
  • x2 = v->coord[0];
  • y2 = v->coord[1];
  • z2 = v->coord[2];
  • return x1*x2+y1*y2+z1*z2+0.5*(x1*y2+x2*y1+x1*z2+x2*z1+y1*z2+y2*z1);
  • } // myDotProduct()
  • //-------------------------------------------------
  • int main(int argc,char **argv)
  • {
  • InitializationLibUtil();
  • {
  • P_VECTND vect[3];
  • PP_VECTND res;
  • vect[0] = CreateVectND(3);vect[0]->coord[0] = 1;vect[0]->coord[1] = -1;vect[0]->coord[2] = 0;
  • vect[1] = CreateVectND(3);vect[1]->coord[0] = 1;vect[1]->coord[1] = 1;vect[1]->coord[2] = 0;
  • vect[2] = CreateVectND(3);vect[2]->coord[0] = 1;vect[2]->coord[1] = -1;vect[2]->coord[2] = 1;
  • res = GramSchmidt(vect,3,myDotProduct);
  • printVect(vect[0]);
  • printVect(vect[1]);
  • printVect(vect[2]);
  • printf("\nPar le procede d'orthonormalisation de Gram-Schmidt\n");
  • printf("la famille de vecteurs ci-dessus devient :\n\n");
  • printVect(res[0]);
  • printVect(res[1]);
  • printVect(res[2]);
  • DeleteVectND(vect[0]);
  • DeleteVectND(vect[1]);
  • DeleteVectND(vect[2]);
  • DeleteVectND(res[0]);
  • DeleteVectND(res[1]);
  • DeleteVectND(res[2]);
  • Free(res);
  • }
  • CloseLibUtil();
  • CheckingClosingLibUtil();
  • printf("\nfin du programme ...\n");
  • getch();
  • return 0 ;
  • } // main()
#ifndef _UTIL_H_
	#include "util.h"
#endif // _UTIL_H_

#ifndef _MATH_H_
	#include "math.h"
#endif // _MATH_H_

#ifndef _LIST_H_
	#include "list.h"
#endif // _LIST_H_

#ifndef _WINUTIL_H_
	#include "winutil.h"
#endif // _WINUTIL_H_

#include "conio.h"


//-------------------------------------------------
// OUTILS
//-------------------------------------------------
void printFloat(double x)
{
printf("%lf",x);
} // printFloat()

//-------------------------------------------------
void printVect(P_VECTND u)
{
int i;
printf("(");
printFloat(u->coord[0]);
for(i=1;i<u->dim;i++)
  {
  printf(" ,");
  printFloat(u->coord[i]);
  }
printf(" )\n");
} // printVect()

//-------------------------------------------------
// GRAM-SCHMIDT
//-------------------------------------------------
typedef double (*DOT_PRODUCT)(P_VECTND,P_VECTND);

//-------------------------------------------------
double dotProduct(DOT_PRODUCT phi,P_VECTND u,P_VECTND v)
{
return phi(u,v);
} // dotProduct()

//-------------------------------------------------
double norm(DOT_PRODUCT phi,P_VECTND u)
{
return sqrt(phi(u,u));
} // norm()

//-------------------------------------------------
PP_VECTND GramSchmidt(PP_VECTND vect,int nb,DOT_PRODUCT phi)
{
PP_VECTND res;
int       dim,i;
double    n;

AssertPointer(vect);
AssertPointer(phi);
Assert(nb >= 1);

dim = vect[0]->dim;
res = Malloc(P_VECTND,nb);
for(i=0;i<nb;i++)
  {
  res[i] = CreateVectND(dim);
  }

// le premier vecteur est juste normalise
n = norm(phi,vect[0]);
Assert(!CmpDouble0(n));
MulByScalarVectND(res[0],vect[0],1./n);
for(i=1;i<nb;i++)
  {
  int j;

  Assert(vect[i]->dim == dim);
  CopyVectND(res[i],vect[i]);

  // on hote les composantes suivants les vecteurs deja "orthonormalises"
  for(j=0;j<i;j++)
    {
    double k;
    k = dotProduct(phi,res[i],res[j]); // la composante est le produit scalaire ...
    LinCombinVectND(res[i],res[i],res[j],1.,-k);
    }
  
  // on normalise
  n = norm(phi,res[i]);
  Assert(!CmpDouble0(n));
  MulByScalarVectND(res[i],res[i],1./n);
  }

return res;
} //GramSchmidt()

//-------------------------------------------------
// MAIN
//-------------------------------------------------
double myDotProduct(P_VECTND u,P_VECTND v)
{
double x1,y1,z1;
double x2,y2,z2;

x1 = u->coord[0];
y1 = u->coord[1];
z1 = u->coord[2];

x2 = v->coord[0];
y2 = v->coord[1];
z2 = v->coord[2];

return x1*x2+y1*y2+z1*z2+0.5*(x1*y2+x2*y1+x1*z2+x2*z1+y1*z2+y2*z1);
} // myDotProduct()

//-------------------------------------------------
int main(int argc,char **argv)
{
InitializationLibUtil();
  {
  P_VECTND  vect[3];
  PP_VECTND res;

  vect[0] = CreateVectND(3);vect[0]->coord[0] = 1;vect[0]->coord[1] = -1;vect[0]->coord[2] = 0;
  vect[1] = CreateVectND(3);vect[1]->coord[0] = 1;vect[1]->coord[1] =  1;vect[1]->coord[2] = 0;
  vect[2] = CreateVectND(3);vect[2]->coord[0] = 1;vect[2]->coord[1] = -1;vect[2]->coord[2] = 1;

  res = GramSchmidt(vect,3,myDotProduct);

  printVect(vect[0]);
  printVect(vect[1]);
  printVect(vect[2]);
  printf("\nPar le procede d'orthonormalisation de Gram-Schmidt\n");
  printf("la famille de vecteurs ci-dessus devient :\n\n");
  printVect(res[0]);
  printVect(res[1]);
  printVect(res[2]);

  DeleteVectND(vect[0]);
  DeleteVectND(vect[1]);
  DeleteVectND(vect[2]);

  DeleteVectND(res[0]);
  DeleteVectND(res[1]);
  DeleteVectND(res[2]);

  Free(res);
  }
CloseLibUtil();
CheckingClosingLibUtil();

printf("\nfin du programme ...\n");
getch();
return 0 ;
} // main()


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 août 2006 23:53:51 :
ajout ZIP

 Sources du même auteur

Source avec Zip Source avec une capture COLORATION SYNTAXIQUE
Source avec Zip Source avec une capture ORBITES DES SATELLITES GPS
Source avec Zip Source avec une capture DESSIN D'ARBRES
Source avec Zip Source avec une capture PROGRAMMATION LINEAIRE
Source avec Zip EXTENSION DE CORPS (MATH)

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BOITE A OUTILS MATHÉMATIQUES POUR L'ALGÈBRE LINÉAIRE ET L'... par BOLLOTD
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
Source avec Zip PROJET PRODUIT par totama
Source avec Zip Source avec une capture MATH 2ND par ndubien
Source avec Zip MULTIPLICATION MATRICIELLE ENCHAINEE par ducmath0

Commentaires et avis

Commentaire de Alain Proviste le 24/04/2005 00:44:25 administrateur CS

ca serait bien pouvoir gérer les racines ( au lieu des nombres à virgule )
sinon ca a l'air de respecter assez bien la méthode...
:)

Commentaire de dominion le 26/04/2005 15:04:07

Quel est ce procédé ?

Commentaire de glipper le 27/04/2005 20:22:56

Tiens... orthogonalisation de GRAM-SCHMIDT... ça me rappelle quelquechose (hum) :)
Sympa ce programme... t'as plus qu'à en faire une version pour casio 35 et je suis prenneur...

++ Glipper

Commentaire de JCDjcd le 27/04/2005 20:44:08

et oui ... c'est passionnant, tu trouves pas ?
Tu es un irreductible des casio35, bravo, il faut avoir du courage. Mais bon c'est tres simple ...

++ :)

Commentaire de Stiko le 03/08/2006 19:38:17

salut,
ou se trouve le "util.h"??
le compilateur me donne cette erreur:
fatal error C1083: Cannot open include file: 'util.h': No such file or directory

merci

Commentaire de JCDjcd le 03/08/2006 23:54:42

je viens de tout mettre dans le zip

Commentaire de Stiko le 04/08/2006 09:49:02

merci pour votre réponse.
est ce que vous connaissez ou je peu trouver un code qui peut calculer la valeur propre d'une matrice symétrique.car j ai cherché hier mais j a pas trouvé ici.
merci

Commentaire de JCDjcd le 04/08/2006 14:45:10

http://www.cppfrance.com/codes/DIAGONALISATION-MATRICES-3X3-SYMETRIQUES_33253.aspx


en plus j'utilise dedans du Gram-Schmidt !

Commentaire de Stiko le 04/08/2006 16:49:22

merci,
durant la compilation il ma affiche bocoup d'erreurs malgré que j ai mis les 2 fichiers "util.h" et "PramDBG.h"??
bonne soirée

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

programme facture [ par aketostar ] AKETOSTARquelqu'un saurait-il m'aider à résoudre ce labo je suis larguéRéalisation d?un logiciel qui permet de réaliser une facture.Schéma de base du programme facture [ par aketostar ] AKETOSTARqqn saurait-il m'aider à résoudre ce programme.Merci Réalisation d?un logiciel qui permet de réaliser une facture.Schéma de base du programme éclairage et vecteurs normaus [ par wozATS ] Bonjourj'ai un petit probleme avec openGL en c++Voila, je suis en stage dans un centre de recherche et ma "mission" consiste a animer des lèvres avec calcul de vecteurs propres d'une matrice [ par Nelene ] Bonjour,Je suis a la recherche d'un algo ou d'un morceau de code qui permette de trouver les vecteurs propres d'une matrice.Merci reconstitution d'image a partir de leurs vecteurs descriptifs [ par yacine_mezzi ] Bonjour tout le monde, je cherche un programme qui reconstruit une image partant de son vecteur descriptif ( calcul du moment complexe,moment de zerni Catalogue de produit sur CD HELP! [ par maevasa ] bonjour,je dois faire un catalogue de produits sur CD. Chaque produit doit être relié à un PDF. J'ai déjà une base de données Access que je voudrais r matrice, valeurs propres et vecteurs propres [ par SMarmotte ] Bonjour,je cherche un algo ou un code source qui prend en entrée une matrices (de double) et qui donne TOUTES les valeurs propres ainsi que les vecteu valeurs propres et vecteurs associés [ par GUARMAH ] Bonjour,je cherche un code source qui prend en entrée une matrice réelle plein qcq et qui donne TOUTES les valeurs propres ainsi que les vecteurs prop Math Trigo- Point commun de Vecteurs [ par jeanbb ] Bonjour, J'ai des objects qui se déplacent à l'aide de vecteurs dans un plan cartésien.je cherche une formule pour savoir si mes vecteurs ou droites


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales