最小二乘法相关知识,我把他分解成了四篇文章,第一篇是推导过 程 ,第二篇是 系数求解 ,第三篇是C语言实现二乘法(二次曲线)。有兴趣可以看文章底部,往期推荐。
这篇文章是第四篇,主要是用Python验证C语言实现二乘法的正确性,因为网络上的文章错综复杂,复制粘贴有风险,需要保证功能的正确性。
相关代码如下:
# -*- coding: utf-8 -*-
import numpy as np
#import random
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
#自定义函数
def func(x, a, b, c):
return a + b*x + c*pow(x, 2)
#定义x、y散点坐标
x = np.array([0,2,4,6,8,10])
y = np.array([0,9,24,42,76,118])
#非线性最小二乘法拟合
popt, pcov = curve_fit(func, x, y)
#获取popt里面是拟合系数
a = popt[0]
b = popt[1]
c = popt[2]
yvals = func(x, a, b, c) #拟合y值
print('a:', a)
print('b:', b)
print('c:', c)
#绘图
plot1 = plt.plot(x, y, 's') #square
plot2 = plt.plot(x, yvals, 'r')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
上述代码运行结果如下图:
其中,蓝色的矩形点是已知的坐标点,而红色的则是对已知坐标点拟合而成二次曲线。
全部0条评论
快来发表一下你的评论吧 !