La méthode du carré minimum est une méthode pour trouver une expression relationnelle en minimisant la somme des carrés des erreurs dans le traitement des valeurs mesurées avec des erreurs.
Le programme créé cette fois-ci est un processus qui répertorie les données «x» y »préparées à l'avance, trouve la matrice« S »T» à partir des données et dérive le coefficient «a». De plus, l'ordre du polynôme que vous voulez trouver est défini sur «m».
Il existe peut-être déjà une bibliothèque qui peut facilement trouver la méthode des moindres carrés, mais cette fois nous n'utiliserons pas une telle bibliothèque, seulement la bibliothèque de manipulation de tableaux numpy
, et même si la quantité de données est modifiée Nous avons créé un processus flexible.
LeastSquares.py
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
import numpy as np
X_data = [10, 20, 50, 70, 100]
Y_data = [9.3, 9.8, 10.9, 11.9, 13.1]
m = 1
def ST_list(power):
S, T = 0, 0
for i, j in zip(X_data,Y_data):
S += i**power
T += i**power * j
return S, T
def A_matrix(n_size, len):
A = []
for k in range(n_size):
A.append(S_list[k+len-m*2-1:k+len-m*2-1+n_size])
return A
S_list = []
T_list = []
for n in range(len(X_data)):
S , T = ST_list(n)
S_list.insert(0, S)
T_list.insert(0, T)
A = np.array(A_matrix(m+1, len(S_list)))
b = np.array(T_list[-1*m-1::]).reshape(m+1, 1)
Ainv = np.linalg.inv(A)
x = np.dot(Ainv, b)
print("S ="); print(A); print()
print("T ="); print(b); print()
print("a ="); print(x)
m = 1
S =
[[17900 250]
[ 250 5]]
T =
[[2977.]
[ 55.]]
a =
[[0.04203704]
[8.89814815]]
m = 2
S =
[[130430000 1477000 17900]
[ 1477000 17900 250]
[ 17900 250 5]]
T =
[[2.2141e+05]
[2.9770e+03]
[5.5000e+01]]
a =
[[1.22729504e-05]
[4.07142857e-02]
[8.92034855e+00]]
Dans ces données, nous avons trouvé le coefficient «a» pour les polynômes du premier et du second ordre. Si vous augmentez la quantité de données, vous pouvez également effectuer des opérations cubiques et quaternaires, mais comme elles sont affectées par des fractions flottantes comme le polynôme quadratique, vous devez utiliser le format round
ou` pour le rendre facile à voir. C'est vrai.
C'est tout pour cet article. Désolé pour le programme difficile à voir. J'ai l'impression qu'il existe un meilleur moyen, en particulier en ce qui concerne la manipulation de tableaux. Si vous avez des conseils, veuillez les laisser dans la section commentaires. Merci de rester avec nous jusqu'à la fin.
Recommended Posts