[Matlab] Division de vecteurs

Fermé
Utilisateur anonyme - 25 oct. 2009 à 18:02
 Utilisateur anonyme - 25 oct. 2009 à 20:01
Bonjour,

Je souhaite connaître le coefficient de proportionnalité entre deux vecteurs (ou la moyenne des coefficients s'il n'y a pas unicité). J'ai tapé quelque chose mais j'ai un doute sur le résultat obtenu.

[code]
>> P = [ 1 7 8 5 0 ]

P =

1 7 8 5 0

>> Q = [ 3 7 9 2 1]

Q =

3 7 9 2 1

>> P/Q

ans =

0.9306

[fin code]

Pouvez-vous me renseigner à ce sujet ? Merci

7 réponses

Pacorabanix
25 oct. 2009 à 18:40
ce que tu souhaites faire serait plutot :
P = [ 1 7 8 5 0 ] 
Q = [ 3 7 9 2 1] 
Q./P


le point signifie que chaque terme est divisé par le terme correspondant. (sinon en fait il s'agit de la résolution de l'équation (P*x)'=Q' )

Ainsi, si tu obtiens un vecteur du genre [2 2 2 2 2] avec le même nombre partout ça veux dire que les deux vecteurs sont colinéaires de facteur 2.

sinon tu obtiendra un truc du genre [1 2 .2 4 8] (si les premiers termes sont égaux, si le deuxième élément de Q est le double de celui de P etc...)

ce sont donc les cofficients de proportionalité qui apparaissent. (et le cas où ils sont tous identiques n'est qu'un cas particulier).

Pour faire leur moyenne il suffit de sommer les termes et de diviser par la taille du vecteur. Dans le cas particulier où ceux-ci sont proportionnels, ça te donnera bien le coefficient (2 dans l'exemple).
7
Utilisateur anonyme
25 oct. 2009 à 18:51
Merci pour ta réponse.

Il ne reste à traiter que le cas où une des valeurs du vecteur diviseur est nulle.
0
Pacorabanix
25 oct. 2009 à 19:06
Oui, exactement, je l'avais oublié. Mais ce cas est un peu bizarre, et n'est de toute façon pas bien défini.

Sache que :

si tu fais un nombre non nul divisé par 0 Matlab renverra "Inf" (ou -Inf) et cera traité plus ou moins comme l'infini des limites (c-à-d en général restera l'infini dans des calculs, sauf si tu fais Inf-Inf qui donnera NaN)

si tu fais 0/0 la réponse sera NaN (Not a Number) et sera traité comme indéterminé peu importe les calculs que tu ferras avec.
0
Utilisateur anonyme
25 oct. 2009 à 19:38
Merci.

Pour une utilisation plus générale, je vais me tourner vers un autre algorithme :
boucle while jusqu'à atteindre une précision intéressante puis prendre le premier coeff. valable (non "Inf" et "NaN").

Bonne soirée !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pacorabanix
25 oct. 2009 à 19:41
euh pourquoi une boucle While ? Matlab fera bien mieux avec des vecteurs directement ;). Pour éviter les sales cas, tu n'as qu'à vérifier la valeur de ton résultat final à la fin de ton m-file (s'il vaut Inf, -Inf ou NaN tu écris un message d'erreur)
Faire une boucle et vérifier à chaque étape ralentira beaucoup Matlab.
0
Utilisateur anonyme
25 oct. 2009 à 19:59
Si je remets ce calcul dans son contexte ( Puissance Itérée), il y a déjà un while, je rajoute juste une condition. De plus, je travaille sur des vecteurs de grande taille (plus de 400 valeurs), je ne peux me permettre de mettre de côté le cas où une valeur est nulle.
0
Pacorabanix
25 oct. 2009 à 20:01
ah oui bien sûr je comprends mieux. Tant que ça marche assez vite pour ce que tu as à faire c'est l'important.

Bonne chance pour la suite de ton travail!
0
Utilisateur anonyme
25 oct. 2009 à 20:01
Merci encore.
0