Moindres carrés sur une équation matricielle
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
GaBuZoMeu
- Habitué(e)
- Messages: 6097
- Enregistré le: 05 Mai 2019, 09:07
-
par GaBuZoMeu » 08 Avr 2020, 15:02
Sylvain231 : parce que tu t'es trompé. La matrice

a trois lignes, donc le produit
^{-1})
a trois lignes.
Comme vous l'avez remarqué, j'utilise pour la transposée de

la notation

conforme à la norme ISO 80000-2
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:09
non je ne me suis pas trompé ma matrice A a bien trois lignes ou alors c'est dans mon code Python qu'il y a une erreur mais alors je ne vois pas où
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:27
voici mon code complet :
- Code: Tout sélectionner
import numpy as np
import random as r
N=1
r.seed()
A=np.zeros((3,N));#tableau de connues 3xN
B=np.zeros((3,N));#tableau de connues 3xN
#on remplit aléatoirement A et B
for i in range(3):
for j in range(N):
A[i,j]=r.random()
B[i,j]=r.random()
print("M2=",np.matmul(A.T,np.matmul(B,np.linalg.inv(np.matmul(B.T,B)))))
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:29
ah oui j'ai compris j'ai mis N=1 et donc A.T a une ligne !
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:32
voilà c'est corrigé et ça donne le même résultat que l'autre, ouf !
- Code: Tout sélectionner
import numpy as np
import random as r
N=100
r.seed()
A=np.zeros((3,N));#tableau de connues 3xN
B=np.zeros((3,N));#tableau de connues 3xN
#on remplit aléatoirement A et B
for i in range(3):
for j in range(N):
A[i,j]=r.random()
B[i,j]=r.random()
print("M2=",np.matmul(A,np.matmul(B.T,np.linalg.inv(np.matmul(B,B.T)))))
M=np.zeros((3,3));#tableau d'inconnues 3x3
S=np.zeros((9,9));#coefficients du système 9x9
R=np.zeros(9);#coefficients résultats du système 9
for j in range(3):
for l in range(3):
for k in range(3):
for i in range(N):
S[l+3*j,k+3*j]=S[l+3*j,k+3*j]+B[k,i]*B[l,i];
for j in range(3):
for l in range(3):
for i in range(N):
R[l+3*j]=R[l+3*j]+A[j,i]*B[l,i];
X = np.linalg.solve(S, R)
for j in range(3):
for k in range(3):
M[j,k]=X[k+3*j];
print("M=",M)
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:32
c'est beaucoup plus simple ainsi en effet !
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 08 Avr 2020, 15:49
problème résolu ! merci à vous

-
tournesol
- Membre Irrationnel
- Messages: 1509
- Enregistré le: 01 Mar 2019, 18:31
-
par tournesol » 08 Avr 2020, 16:26
Merci à toi . J'ai repris tous mes calculs et j'ai retrouve ta réponse en développant directement
)
. Je n'ai plus qu'à recommencer avec une approximation affine .
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités