求解具有 2 个未知数和 2 个未知数的经验方程的梯度下降
Gradient Descent to solve for Empirical Equation with 2 knowns and 2 unkowns
我有以下经验方程(工程):
Y = A + (X - B) * (0.3026506 * (A/B))^0.3895556 * (0.2444663 * (A/B))^1.226 + 0.00000560643 * A^(0.00125 * B + 0.3026)
我不知道 A 和 B 的值(但知道在某些物理边界之间)并且以 table 格式给我 Y 和 X 的值:
X
Y
35
179.92
40
181.46
50
184.53
60
187.61
70
190.69
90
196.84
100
199.92
110
203
120
206.08
130
209.16
140
212.23
150
215.31
我的目标是调整 A 和 B 的值,使 RHS 上的方程与 Y中的table给出了等式中给出的所有常数。我的假设之一是使用梯度下降进行多元回归。我想我应该把 Y 作为我的成本函数,但是如果我不知道 A 和 B 应该有什么样的值,我该如何创建梯度下降图呢?可能需要其他方法吗?基本上,它是一个具有两个已知数和两个未知数的方程式。
提前致谢
在 python 你可以这样做:
def error(par, X, Y):
A = par[0]
B = par[1]
V = A + (X - B) * (0.3026506 * (A/B))**0.3895556 * (0.2444663 * (A/B))**1.226 + 0.00000560643 * A**(0.00125 * B + 0.3026)
return ((Y-V)**2).sum()
from scipy.optimize import minimize
X = [ 35, 40, 50, 60, 70, 90, 100, 110, 120, 130, 140, 150]
Y = [179.92, 181.46, 184.53, 187.61, 190.69, 196.84, 199.92, 203. ,
206.08, 209.16, 212.23, 215.31]
minimize(error, [1,2], (X, Y))['x']
array([202.39468192, 108.03429635])
这是一种使用线性回归的不同方法。
那么这就不再是回归问题了,而是求解两个未知数A和B的二元方程组的问题
问题简化为只有一个非线性方程需要求解 B。
使用Newton-Raphson方法得到B=108.0343
A=1.873431*108.0343=202.3947
请注意,非线性方程是拟线性的(第二项可忽略不计 = 0.0000573)。因此,如果您接受略低的精度,更简单地使用 B=169.14586/1.565669=108.03424,它非常接近 Newton-Raphson 结果。
这意味着您将使用更简单的等式获得 A 和 B 的非常接近的近似值:Y = A +(X-B) * 0.1116231 * (A/B)^1.6155556
我有以下经验方程(工程):
Y = A + (X - B) * (0.3026506 * (A/B))^0.3895556 * (0.2444663 * (A/B))^1.226 + 0.00000560643 * A^(0.00125 * B + 0.3026)
我不知道 A 和 B 的值(但知道在某些物理边界之间)并且以 table 格式给我 Y 和 X 的值:
X | Y |
---|---|
35 | 179.92 |
40 | 181.46 |
50 | 184.53 |
60 | 187.61 |
70 | 190.69 |
90 | 196.84 |
100 | 199.92 |
110 | 203 |
120 | 206.08 |
130 | 209.16 |
140 | 212.23 |
150 | 215.31 |
我的目标是调整 A 和 B 的值,使 RHS 上的方程与 Y中的table给出了等式中给出的所有常数。我的假设之一是使用梯度下降进行多元回归。我想我应该把 Y 作为我的成本函数,但是如果我不知道 A 和 B 应该有什么样的值,我该如何创建梯度下降图呢?可能需要其他方法吗?基本上,它是一个具有两个已知数和两个未知数的方程式。
提前致谢
在 python 你可以这样做:
def error(par, X, Y):
A = par[0]
B = par[1]
V = A + (X - B) * (0.3026506 * (A/B))**0.3895556 * (0.2444663 * (A/B))**1.226 + 0.00000560643 * A**(0.00125 * B + 0.3026)
return ((Y-V)**2).sum()
from scipy.optimize import minimize
X = [ 35, 40, 50, 60, 70, 90, 100, 110, 120, 130, 140, 150]
Y = [179.92, 181.46, 184.53, 187.61, 190.69, 196.84, 199.92, 203. ,
206.08, 209.16, 212.23, 215.31]
minimize(error, [1,2], (X, Y))['x']
array([202.39468192, 108.03429635])
这是一种使用线性回归的不同方法。
那么这就不再是回归问题了,而是求解两个未知数A和B的二元方程组的问题
问题简化为只有一个非线性方程需要求解 B。
使用Newton-Raphson方法得到B=108.0343
A=1.873431*108.0343=202.3947
请注意,非线性方程是拟线性的(第二项可忽略不计 = 0.0000573)。因此,如果您接受略低的精度,更简单地使用 B=169.14586/1.565669=108.03424,它非常接近 Newton-Raphson 结果。
这意味着您将使用更简单的等式获得 A 和 B 的非常接近的近似值:Y = A +(X-B) * 0.1116231 * (A/B)^1.6155556