0

需要一个算法来解决这样的方程:

8*p^2+8*q^2+8*p-16=0
p^2+q^2+12*p+20=0

如果有人能指出我算法的名称就足够了。我本可以遵循任何与矩阵相关的算法,但这些线性内的二次方会导致问题。

4

3 回答 3

1

在您写的情况下,我建议首先从第一个方程中减去第二个方程的 8 倍。

0 = (8*p^2+8*q^2+8*p-16) - 8*(p^2+q^2+12*p+20) = -88*p-176 = 0
p = -2

然后在 q 中留下一个简单的二次方程,您可以使用求解单变量二次方程的常用方法来求解。

于 2012-12-16T19:58:27.530 回答
1

Nelder-Mead 算法是一种非常易于编程的非线性求解器,可以在像这样的低维问题中快速准确地收敛。伪代码在 Wikipedia 上很容易理解,但您也可以在线找到一些编码实现。

在这种情况下,您的成本函数将是左侧平方的总和,以确保较低的成本更接近正确的解决方案。

于 2012-12-17T07:18:35.540 回答
0

这是一个非线性问题。您将需要一个迭代解决方案,例如 Newton Raphson 或 BFGS。

这是一个简单的方法。

首先线性化它:

16*p*dp + 16*q*dq + 8 = 0
2*p*dp + 2*q*dq + 12 = 0

这变成了一个线性代数问题:

| 16*p 16*q |[ dp ]    [  -8 ]
|  2*p  2*q |[ dq ] =  [ -12 ]

您将从最初的猜测开始(p, q)

(p, q) = (p0, q0)

您将使用常用的线性代数技术求解 dp 和 dq。

您将更新您对 p 和 q 的猜测:

(p1, q1) = (p0 + dp, q0 + dq)

您将再次迭代,直到您的解决方案发散或收敛。

不能保证它会收敛,这取决于你最初的猜测。

于 2012-12-16T19:50:33.813 回答