最小二乘拟合

最小二乘拟合

若已知数据点为(Xi,Yi)(i = 1,2,…,n)
用二次函数y = a0 +a1x+a2x^2来做近似拟合曲线
均方差最小
在这里插入图片描述

法方程组为:
在这里插入图片描述
求出系数a0,a1,a2即可求得拟合曲线

import numpy as np
import matplotlib.pyplot as plt

#y=2+3x+4x^2
X = np.arange(0,5,0.1)
Z = [2 + 3 * x + 4 * x ** 2 for x in X]
Y = np.array([np.random.normal(z,3) for z in Z])

plt.plot(X,Y,'ro')
plt.show()

#生成系数矩阵A
def gen_coefficient_matrix(X,Y):
    N = len(X)
    m = 3 #我们这个方程有三个未知数,所以m=3
    A = []
    #计算每一个方程的系数,i表示行号,j表示列号
    for i in range(m):
        a=[]
        #计算当前方程中的每一个系数
        for j in range(m):
            a.append(sum(X ** (i+j)))
        A.append(a)
    return A

#计算方程组右端向量b
def gen_right_vector(X,Y):
    N = len(X)
    m = 3
    b = []
    for i in range(m):
        b.append(sum(X ** i * Y))
    return b

A = gen_coefficient_matrix(X,Y)
b = gen_right_vector(X,Y)

#求得未知量a0,a1,a2
a0,a1,a2 = np.linalg.solve(A,b)

#生成绘制曲线的绘制点
_X = np.arange(0,5,0.1)
_Y = np.array([a0 + a1*x + a2*x**2 for x in X])

plt.plot(X,Y,'ro',_X,_Y,'b',linewidth=2)
plt.title("y = {} + {}x + {}$x^2$".format(a0,a1,a2))
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值