计算最小二乘法求目标函数的系数,部分代码来源于张若愚老师的《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