python实现最小二乘拟合/平方逼近问题
2022/1/5 22:08:45
本文主要是介绍python实现最小二乘拟合/平方逼近问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文介绍python实现最小二乘拟合/平方逼近问题的方法
最优平方逼近问题的定义为:
可以使用正规方程组求解:
解方程即得
(
c
0
,
c
1
,
.
.
.
,
c
n
)
(c_0, c_1, ..., c_n)
(c0,c1,...,cn),即为拟合式的系数。
当拟合式为多项式时:
正规方程组可以转化为:
用python语言描述正规方程组的求解过程如下:
def mox(n): sum = 0 for i in x: sum += pow(i, n) return sum def moy(n): sum = 0 for i, j in zip(x, y): sum += pow(i, n) * j return sum def p(i): p = 0 for idx, k in enumerate(c): p += k * pow(i, idx) return p def compute_error(c): error = 0 for i, j in zip(x, y): error += pow(p(i)-j, 2) return math.sqrt(error) def compute(n): global c A = np.zeros((n, n)) for i in range(n): for j in range(n): A[i, j] = A[j, i] = mox(i+j) b = np.zeros(n) for i in range(n): b[i] = moy(i) print('A = ', A) print('b = ', b) c = np.matmul(np.linalg.inv(A), b) print('c = ', c) error = compute_error(c) print('error = ', error)
使用一道例题来检验一下:
输入例题:
x = [0.25*i for i in range(5)] y = [1.0000, 1.2840, 1.6487, 2.1170, 2.7183] compute(n=3)
输出结果:
A = [[5. 2.5 1.875 ] [2.5 1.875 1.5625 ] [1.875 1.5625 1.3828125]] b = [8.768 5.4514 4.4015375] c = [1.00513714 0.86418286 0.84365714] error = 0.016556949339433698
拟合曲线和数据点的可视化结果为:
和手算的结果对比可发现他们是一致的:
这篇关于python实现最小二乘拟合/平方逼近问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Python编程基础
- 2024-11-01Python 基础教程
- 2024-11-01用Python探索可解与不可解方程的问题
- 2024-11-01Python编程入门指南
- 2024-11-01Python编程基础知识
- 2024-11-01Python编程基础
- 2024-10-31Python基础入门:理解变量与数据类型
- 2024-10-30Python股票自动化交易资料详解与实战指南
- 2024-10-30Python入行:新手必读的Python编程入门指南
- 2024-10-30Python入行:初学者必备的编程指南