需要一个算法来解决这样的方程:
8*p^2+8*q^2+8*p-16=0
p^2+q^2+12*p+20=0
如果有人能指出我的算法名称,那就足够了。我本可以遵循任何与矩阵相关的算法,但这些线性内的二次方导致问题。任何帮助表示赞赏。
答案 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)
您将再次迭代,直到您的解决方案出现分歧或收敛。
根据您的初步猜测,无法保证它会收敛。