Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用最小二乘法优化多个方程的公共参数_Python_Least Squares - Fatal编程技术网

在python中使用最小二乘法优化多个方程的公共参数

在python中使用最小二乘法优化多个方程的公共参数,python,least-squares,Python,Least Squares,我想优化几个方程中的公共参数,但我不知道如何同时拟合它们 问题本质上是这样的,需要解决四个方程,需要优化三个参数: a+b+c+1750=T 12=a/T*100 15=b/T*100 37=c/T*100 我想找到a,b和c的最佳值。有人有什么建议吗,也许是用最小二乘法?只有当只有一个方程需要解时,我才熟悉。这是一个由4个方程和4个未知数组成的系统。它可以用代数方法求解 解a、b和c并插入第一个方程。我假设*100是a,b和c方程的分母 12 x 100 x T + 15 x 100 x T

我想优化几个方程中的公共参数,但我不知道如何同时拟合它们

问题本质上是这样的,需要解决四个方程,需要优化三个参数:

a+b+c+1750=T

12=a/T*100

15=b/T*100

37=c/T*100


我想找到a,b和c的最佳值。有人有什么建议吗,也许是用最小二乘法?只有当只有一个方程需要解时,我才熟悉。

这是一个由4个方程和4个未知数组成的系统。它可以用代数方法求解

解a、b和c并插入第一个方程。我假设*100是a,b和c方程的分母

12 x 100 x T + 15 x 100 x T + 37 x 100 x T + 1750 = T
T = 3.66

然后,将T的这个值插入到a、b和c的方程中

看来你的方程实际上有4个参数,a、b、c和T,所以你有一组4个参数的线性方程:

a + b + c - T = -1750
100 * a - 12 * Y = 0
100 * b - 15 * Y = 0
100 * c - 37 * Y = 0
您可以使用矩阵中的系数来解决此问题:

import numpy as np

a = np.array([[1., 1., 1., -1.],
              [100., 0, 0, -12.],
              [0, 100., 0, -15.],
              [0, 0, 100., -37.]])
b = np.array([-1750., 0, 0, 0])
如果有分析解决方案,可以使用

res = np.linalg.solve(a, b)
# res: [  583.33333333   729.16666667  1798.61111111  4861.11111111]
否则,或者对于更一般的情况,可以使用最小二乘算法近似求解

res, err, _, __ = np.linalg.lstsq(a, b)
# res: [  583.33333333   729.16666667  1798.61111111  4861.11111111]

所以你实际上有4个参数,a,b,c和T?我喜欢用线性代数求解的想法。你知道这个协议是否允许求解变量的纯整数解吗?@EVS我不认为它可以,numpy.linalg.lstsq似乎将输入数据转换为类似float的东西。