最小二乘拟合介绍
最小二乘拟合比较简单以及常见,这里就不介绍了。
代码实现
import numpy as np
def solve_f(x: list, f: list, fi: list): # 计算多项式系数
ip = np.zeros((len(fi), len(fi))) # 定义内积矩阵
ip_f = np.zeros(len(fi))
for i in range(0, len(fi)):
x_1 = [_ ** fi[i] for _ in x]
ip_f[i] = sum(map(lambda a, b: a * b, x_1, f)) #计算内积,此处为(fi_i, f(x))
for j in range(0, len(fi)):
x_2 = [_ ** fi[j] for _ in x]
ip[i, j] = sum(map(lambda a, b: a * b, x_1, x_2))
# print(np.dot(np.linalg.inv(ip), ip_f))
# print(ip, ip_f)
return np.dot(np.linalg.inv(ip), ip_f) # 左乘逆矩阵计算系数矩阵
def get_function(p: float, coeff: np.ndarray, fi: list): # 计算某点函数拟合值
res = 0
for i in range(0, len(fi))