Die Methode der minimalen Quadrate ist eine Methode zum Finden eines relationalen Ausdrucks durch Minimieren der Summe der Quadrate der Fehler bei der Verarbeitung von Messwerten mit Fehlern.
Das diesmal erstellte Programm ist ein Prozess, der die im Voraus vorbereiteten Daten "x" y "auflistet, die Matrix" S "" T "aus den Daten findet und den Koeffizienten" a "ableitet. Außerdem wird die Reihenfolge des Polynoms, das Sie finden möchten, auf "m" gesetzt. Möglicherweise gibt es bereits eine Bibliothek, die die Methode der kleinsten Quadrate leicht finden kann, aber dieses Mal werden wir keine solche Bibliothek verwenden, sondern nur die Array-Manipulationsbibliothek "numpy", und selbst wenn die Datenmenge geändert wird Wir haben einen flexiblen Prozess geschaffen.
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]]
In diesen Daten fanden wir den Koeffizienten "a" für die Polynome erster und zweiter Ordnung. Wenn Sie die Datenmenge erhöhen, können Sie auch kubische und quaternäre Daten ausführen. Da diese jedoch von schwebenden Brüchen wie dem quadratischen Polynom beeinflusst werden, müssen Sie "rund" oder "format" verwenden, um die Anzeige zu vereinfachen. Korrekt.
Das ist alles für diesen Artikel. Entschuldigung für das schwer zu erkennende Programm. Ich denke, es gibt einen besseren Weg, besonders wenn es um die Manipulation von Arrays geht. Wenn Sie einen Rat haben, lassen Sie ihn bitte im Kommentarbereich. Vielen Dank, dass Sie bis zum Ende bei uns bleiben.
Recommended Posts