当てはめる関数を

係数a1,a2, ... , akを求めるには、正規方程式

ここで、



例えば、
というデータがあったとして、これに二次関数

を当てはめることを考える。



である。
Pythonでnumarrayを使って行列演算をする。
# coding: utf-8
import numarray
import numarray.linear_algebra as la
F = numarray.array([[1,1,1],[4,2,1],[9,3,1],[16,4,1],[25,5,1]])
y = numarray.array([[8.1],[2.5],[2.1],[3.4],[9.8]])
tF = numarray.transpose(F)
tFF = numarray.dot(tF, F)
tFF_inv = la.inverse(tFF) #tFFの逆行列
tFy = numarray.dot(tF, y)
a = numarray.dot(tFF_inv, tFy)
print a
計算してみると、(a1, a2, a3) = (1.8357, -10.5843, 16.74) と求まる。実際にプロットするとこんな感じ。

0 件のコメント:
コメントを投稿