使用 python 中的最小二乘法优化多个方程式中的公共参数
optimize common parameters across several equations using least squares in python
我想优化几个方程中的公共参数,但我不知道如何同时拟合它们。
问题本质上是这样的,求解四个方程,优化三个参数:
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 个线性方程和 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]
我想优化几个方程中的公共参数,但我不知道如何同时拟合它们。
问题本质上是这样的,求解四个方程,优化三个参数:
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 个线性方程和 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]