[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 558

 
Si le vecteur 1 est orthogonal au vecteur 2 et que le vecteur 2 est orthogonal au vecteur 3, alors le vecteur 1 n'est pas toujours orthogonal au vecteur 3, même dans un espace à 3 dimensions, et encore moins dans un espace à plusieurs dimensions.
 
alsu:
Il peut ne pas devenir co-directionnel, mais simplement former un angle oblique par rapport à tous les vecteurs ou à certains d'entre eux.
Mais il ne le peut pas ! Il ne peut pas le faire pour ceux qui ont déjà été traités, mais il peut le faire pour la prochaine entrée, mais les itérations suivantes les traiteront de la même manière.
 
MetaDriver:
Mais il ne peut pas ! Pour ceux qui ont déjà été traités, il ne peut pas, mais pour la prochaine entrée, il peut, mais les itérations suivantes les traiteront de la même manière.
Les itérations suivantes, dans le cas général, ne conservent pas l'orientation des vecteurs traités précédemment - voir mon post précédent.
 
alsu:
Si le vecteur1 est orthogonal au vecteur2 et que le vecteur2 est orthogonal au vecteur3, alors le vecteur1 est loin d'être toujours orthogonal au vecteur3, même dans un espace à trois dimensions, sans parler d'un espace à plusieurs dimensions.

Donc vous n'avez pas compris le point principal. La transformation à chaque étape est strictement plate - elle place le vecteur en position ortho par rapport au précédent, le laissant orthogonal à tous les précédents. C'est ce que j'ai voulu faire depuis le début. C'était le problème (qui a maintenant été résolu).

Réfléchissez-y. Vérifiez.

 
alsu:
Les itérations suivantes ne conservent généralement pas d'orogonalité avec les vecteurs traités précédemment - voir mon précédent post

conserver.

Peut-être que je n'ai pas été assez clair. Je vais écrire un schéma complet maintenant. C'est un petit schéma.

 
MetaDriver:

Donc vous ne comprenez pas le point principal. La transformation à chaque étape est strictement plate - elle place le vecteur en position ortho par rapport au précédent, le laissant orthogonal à tous les précédents. C'est ce que je vise depuis le début. C'était le problème (qui a maintenant été résolu).

Réfléchissez-y. Vérifiez.

Je l'ai vérifié))

La transformation est, bien sûr, strictement plate, et le résultat est généralement de signe exact indépendamment du choix du vecteur initial arbitraire - mais ! seulement dans ce plan. Qui nous a dit que, parmi un nombre infini d'options pour dessiner un plan passant par un vecteur donné, nous choisissions la bonne ?

Voici un exemple. Supposons que vous ayez deux vecteurs dans un espace tridimensionnel : (1,0,0) et (0,sqrt(2),sqrt(2)). Ils sont orthogonaux, comme vous pouvez le voir. Vous avez commencé par prendre un x1 arbitraire dans le plan z=0 et l'utiliser pour construire un vecteur orthogonal (0,1,0) au premier vecteur. Nous obtenons que l'algorithme est complet, mais le résultat n'est pas obtenu - le troisième vecteur n'est pas orthogonal au deuxième vecteur restant. Et pour obtenir la bonne réponse, vous devez prendre soin au préalable de choisir le bon plan dans la première construction - et vous arriverez alors à (0,-sqrt(2),sqrt(2)) ou à la deuxième solution possible.

 
double[dim]  GetOrtoVector(int dim, int count, double[][dim] &Input)

  {

    bool error=false;

    double[dim]  Result = RandomInit(dim);

    for (i=0; i<count; i++)  { Result = Ortogonalize(Result, Input[i], error); }
    
    if (error) return GetOrtoVector(dim,count,Input);  else    return Result;

  }

double[dim] Ortogonalize(double[dim] a, double[dim] b, bool &err)

  {

    double SP = sp(a,b);

    if (sp==1.0) {err = true; return a;} else {return  (a-SP*b);  }

  }

Je n'ai pas expliqué comment obtenir le produit scalaire et la génération du vecteur initial. C'est assez explicite.

Je n'ai pas non plus décrit la soustraction vectorielle et la multiplication vectorielle par un nombre. Le pseudo-code est aussi bon que...

 
alsu:

Vérifié))

La transformation est, bien sûr, strictement planaire, et le résultat est généralement précis à un signe près, quel que soit le choix du vecteur arbitraire d'origine - mais ! seulement dans ce plan. Qui nous a dit que, parmi un nombre infini d'options pour dessiner un plan passant par un vecteur donné, nous avons choisi la bonne ?

Voici un exemple. Supposons que vous ayez deux vecteurs dans un espace tridimensionnel : (1,0,0) et (0,sqrt(2),sqrt(2)). Ils sont orthogonaux, comme vous pouvez le voir. Vous avez commencé par prendre un x1 arbitraire dans le plan z=0 et l'utiliser pour construire un vecteur orthogonal (0,1,0) au premier vecteur. Nous obtenons que l'algorithme est complet, mais le résultat n'est pas obtenu - le troisième vecteur n'est pas orthogonal au deuxième vecteur restant. Et pour obtenir la bonne réponse, vous devez veiller au préalable à choisir le bon plan lors de la première construction - et vous arriverez alors à la variante (0,-sqrt(2),sqrt(2)) ou à la deuxième solution possible.

Je ne prendrai pas l'avion Z=0 :))

Je vais juste prendre arbitrairement x1 = {aléatoire, aléatoire, aléatoire} ;

Quelle est la probabilité qu'il tombe dans le plan Z=0 ?

;-))

 
MetaDriver:

Je ne prendrai pas Z=0 :))

Je vais juste prendre aléatoire x1 = {aléatoire, aléatoire, aléatoire} ;

quelle est la probabilité qu'il tombe dans le plan Z=0 ?

;-))

exactement la même que la probabilité qu'il frappe le "bon" plan, c'est-à-dire zéro ;)
 
alsu:
exactement la même que la probabilité qu'il frappe le "bon" plan, c'est-à-dire zéro ;)
Le choix d'un vecteur arbitraire fixe le plan de calcul - un seul plan peut être tracé par 2 vecteurs. Dans mon exemple, vous pouvez prendre n'importe lequel d'un nombre infini de plans, et obtenir un nombre infini de solutions, mais tant que vous n'aurez pas pris le bon plan, vous n'obtiendrez pas la bonne réponse.