python解决最小二乘法的相关问题笔记。

计算最小二乘法求目标函数的系数,部分代码来源于张若愚老师的《Python科学计算》

题目

1 某检测装备输入数据:
2 x:0.9, 2.5, 3.3, 4.5, 5.7, 6.9
3 g:1.1, 1.6, 2.6, 3.2, 4.0, 6.0
4 
5 假设输出最大值为6.0,最小值为0
6 试用最小二乘法,求其线性度和灵敏度

现在放上代码

 1 import numpy as np
 2 from scipy import optimize
 3 
 4 
 5 x = np.array([0.9, 2.5, 3.3, 4.5, 5.7, 6.9])
 6 y = np.array([1.1, 1.6, 2.6, 3.2, 4.0, 6.0])
 7 
 8 
 9 def reds(p):
10     # 计算以p为参数的直线和数据之间的误差
11     k, b = p
12     return y - (k*x+b)
13 
14 
15 # leastsq 使得reds()输出最小,参数的初始值是【1,0】
16 r = optimize.leastsq(reds, [1, 0])
17 k, b = r[0]
18 print("k=", k, "
 b=", b)
19 y1 = x*k + b
20 a = np.array([y1[0]-y[0], y1[1]-y[1], y1[2]-y[2], y1[3]-y[3], y1[4]-y[4], y1[5]-y[5]])
21 print("
", y, "
", y1, a)
22 print("灵敏度计算", k)

输出结果

1 /usr/bin/python3.5 /home/leo/PycharmProjects/works/duixiaoercheng.py
2 k= 0.7862723201948396 
3 b= -0.03554687101048135
4 
5  [1.1 1.6 2.6 3.2 4.  6. ] 
6  [0.67209822 1.93013393 2.55915179 3.50267857 4.44620535 5.38973214] [-0.42790178  0.33013393 -0.04084821  0.30267857  0.44620535 -0.61026786]
7 灵敏度计算 0.7862723201948396
8 
9 进程已结束,退出代码0
原文地址:https://www.cnblogs.com/BlogOfMr-Leo/p/8627311.html