各大网站搜索引擎提交入口,用阿里云服务器做自己购物网站,太原网站建设外包须知传媒,wordpress汉化包0.引言
已知公式求参的过程#xff0c;对工程而言#xff0c;一般是一个线性拟合或者非线性拟合的过程。我们现在来以代码片段为例#xff0c;来描述如何求参。一般这个过程会涉及超定方程的计算。这个过程#xff0c;原本需要使用matlab#xff0c;现在python照样可以做…0.引言
已知公式求参的过程对工程而言一般是一个线性拟合或者非线性拟合的过程。我们现在来以代码片段为例来描述如何求参。一般这个过程会涉及超定方程的计算。这个过程原本需要使用matlab现在python照样可以做到。
1. 示例1问题描述
假定我们有一个确定的方程比如
y k*x1 g*x2 /v(x1x2)
1.1首先我们构建公式本身
def func(x, k, g, v):(x1, x2) xseg1 k*x1;seg2 g*x2/v*(x1x2);y seg1 seg2;return y;
1.2 然后进行实验采集相关参数
三个参数原本三组数据就可以出结果这就是超定方程的含义。数据点比需要的更多。 #data.csv 14,1 ,3 20,5 ,9 11,7,13 100,9,4 120,8,10 1.3 求解
注意这里的x1,x2组合成一个x参数的过程。它涉及多参数求解的处理。
def CalcParamsOfFun(file_name):# 设置初始参数猜测initial_guess (1,1,1);# 准备数据filename data.csv # 文件名y load_csv_data(filename, 0); #yx1 load_csv_data(filename, 1); #x1x2 load_csv_data(filename, 2); #x2y_ar [];for item in y:y_ar.append(item);y y_ar;x1_data x1;x2_data x2;data (x1_data, x2_data)# 使用curve_fit函数进行拟合popt, pcov curve_fit(func, data, y_ar, p0initial_guess)# 显示拟合参数和拟合误差print(popt)print(pcov)return popt;
1.4 求解结果识读 最终popt就是求解出的参数而剩余的部分pcov是一个协方差矩阵它反映了整个运算出的参数的不确定度 [[ 1.55391864e-01 4.35894622e-04 -1.01903114e-03] [ 4.35894622e-04 4.97531727e-06 2.31409704e-05] [-1.01903114e-03 2.31409704e-05 3.43718230e-04]] 它的对角线的每一个值是验算出的参数的可能误差。这里计算出的k的误差有15.5%这是一个比较大的误差可能对运算精度产生较大影响。矩阵中对角线以外的元素是元素之间的关联关系较大的值表示两个元素之间可能存在相关性。这里可以看出它们各自的相关性是很小的。 注意这里的协方差具体数值与公式不符因为我没有实际制作一笔数据和公式精确匹配。只是用来举例说明。
1.5校验
你可以直观看出公式计算得到的量和实际的数据之间的误差。
def ReCalcCurr_inByCalc(file_name, params):# 准备数据filename data.csv # 文件名y load_csv_data(filename, 0); #yx1 load_csv_data(filename, 1); #x1x2 load_csv_data(filename, 2); #x2y_ar [];for item in y:y_ar.append(item);y y_ar;x1_data x1;x2_data x2;data (x1_data, x2_data)for i in np.arange(len(x1_data)):data (x1_data[i], x2_data[i]);print(func(data, params[0], params[1], params[2]), y[i])