同时求解二次线性方程所需的算法

时间:2012-12-16 19:15:02

标签: math linear quadratic

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

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

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

3 个答案:

答案 0 :(得分: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中留下一个简单的二次方程式,您可以使用常用方法求解单个变量中的二次方程式。

答案 1 :(得分:1)

Nelder-Mead Algorithm是一个非常易于编程的非线性求解器,能够在像这样的低维问题中快速准确地收敛。伪代码在维基百科上很容易理解,但你也可以在网上找到一些编码实现。

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

答案 2 :(得分: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)

您将再次迭代,直到您的解决方案出现分歧或收敛。

根据您的初步猜测,无法保证它会收敛。