数据拟合的最小二乘法 python实现

数据拟合的最小二乘法

《计算机科学计算》张宏伟 第二版 第五章习题13

用最小二乘法求拟合下列数据的二次多项式

xi yi
1 10
3 5
4 4
5 2
6 1
7 1
8 2
9 3
10 4
import numpy as np
# 默认所有权重ω为1

# 待拟合的数据
X=np.array([1,3,4,5,6,7,8,9,10])
Y=np.array([10,5,4,2,1,1,2,3,4])

# 选择基函数,这里简单地定义为幂函数系
# 定义每个φ对应上标指数
phi_exp=[0,1,2] # φ_0=1, φ_1=x, φ_2=x^2,...

def phi_phi_innerproduct(l,r):
"""
函数内积(φ_l,φ_r),默认权函数ω恒等0
"""
    result = 0
    for x in X:
        result += pow(x,phi_exp[l] + phi_exp[r])
    return result

def f_phi_innerproduct(t):
"""
函数内积(f,φ_r),默认权函数ω恒等0
"""
    result = 0
    for i in range(len(X)):
        result += Y[i]*pow(X[i],phi_exp[t])
    return result

# 构建法方程组
def build_A():
"""
构建法方程组中的A
"""
    A = []
    for i in range(len(phi_exp)):
        row = []
        for j in range(len(phi_exp)):
            row.append(phi_phi_innerproduct(i,j))
        A.append(row)
    A = np.matrix(A)
    return A

def build_b():
"""
构建法方程组中的b
"""
    b = []
    for i in range(len(phi_exp)):
        b.append(f_phi_innerproduct(i))
    b=np.array(b)
    return b

# 运行
A = build_A()
b = build_b()

a = np.linalg.solve(A, b) # 解方程

print(A)
print(b)
print(a)

你可能感兴趣的:(python,计算方法,数据拟合的最小二乘法)