2012-12-16 44 views
0

需要一個算法來解決方程像這樣:算法需要求解二次線性方程同時

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

如果任何人都可以點我的算法的名稱也是這將是足夠的。我可以遵循任何矩陣相關的算法,但這些線性內部的二次方引起一個問題。任何幫助表示讚賞。

回答

1

Nelder-Mead Algorithm是一個非常容易編程的非線性求解器,可以快速而準確地收斂在像這樣的低維問題中。僞代碼很容易在維基百科中使用,但您也可以在網上找到一些編碼實現。

在這種情況下,您的成本函數應該是左側方格的總和,以確保更低的成本更接近正確的解決方案。

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) 

你會再次重複,直到你的解決方案無論是發散收斂或。

根據您的初步猜測,不能保證它會收斂。

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中的簡單的二次方程式,這可以解決使用用於在一個單一的可變求解二次方程的常用方法。

+0

+1 - 更合理的解決方案。爲什麼我沒有看到它?我會接受這個。 – duffymo

+0

任何算法來做同樣的程序?我的意思是如何以編程方式應用? – adi928

+0

@ adi928,兩個係數p^2和q^2。只要這個2x2矩陣有兩個相關的行,即秩1即行列式0,就可以簡單地將它們交叉相乘(即第二個方程在第一個方程中乘以係數p^2,反之亦然),以消除二次項。如果不存在這樣的線性依賴關係,則此解決方法將不適用,並且您回到解決方案,例如就像duffymo提供的那個一樣。 – MvG