需要一個算法來解決方程像這樣:算法需要求解二次線性方程同時
8*p^2+8*q^2+8*p-16=0
p^2+q^2+12*p+20=0
如果任何人都可以點我的算法的名稱也是這將是足夠的。我可以遵循任何矩陣相關的算法,但這些線性內部的二次方引起一個問題。任何幫助表示讚賞。
需要一個算法來解決方程像這樣:算法需要求解二次線性方程同時
8*p^2+8*q^2+8*p-16=0
p^2+q^2+12*p+20=0
如果任何人都可以點我的算法的名稱也是這將是足夠的。我可以遵循任何矩陣相關的算法,但這些線性內部的二次方引起一個問題。任何幫助表示讚賞。
Nelder-Mead Algorithm是一個非常容易編程的非線性求解器,可以快速而準確地收斂在像這樣的低維問題中。僞代碼很容易在維基百科中使用,但您也可以在網上找到一些編碼實現。
在這種情況下,您的成本函數應該是左側方格的總和,以確保更低的成本更接近正確的解決方案。
這是一個非線性問題。你需要一個迭代解決方案,像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)
你會再次重複,直到你的解決方案無論是發散收斂或。
根據您的初步猜測,不能保證它會收斂。
在你寫的情況下,我建議首先從第一個減去第二個方程的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 - 更合理的解決方案。爲什麼我沒有看到它?我會接受這個。 – duffymo
任何算法來做同樣的程序?我的意思是如何以編程方式應用? – adi928
@ adi928,兩個係數p^2和q^2。只要這個2x2矩陣有兩個相關的行,即秩1即行列式0,就可以簡單地將它們交叉相乘(即第二個方程在第一個方程中乘以係數p^2,反之亦然),以消除二次項。如果不存在這樣的線性依賴關係,則此解決方法將不適用,並且您回到解決方案,例如就像duffymo提供的那個一樣。 – MvG