次のような方程式を解くためのアルゴリズムが必要です。
8*p^2+8*q^2+8*p-16=0
p^2+q^2+12*p+20=0
誰かが私にアルゴリズムの名前を教えてくれるなら、それでも十分でしょう。行列関連のアルゴリズムに従うこともできましたが、これらの線形内の2次方程式が問題を引き起こしています。
あなたが書いた場合、私は最初に最初の方程式から2番目の方程式の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の単純な二次方程式が残ります。これは、単一の変数で二次方程式を解くための一般的な方法を使用して解くことができます。
ネルダーミードアルゴリズムは、プログラムが非常に簡単な非線形ソルバーであり、このような低次元の問題にすばやく正確に収束します。疑似コードはウィキペディアで簡単に追跡できますが、コード化された実装もオンラインで見つけることができます。
この場合のコスト関数は、左側の二乗の合計であり、より低いコストが正しいソリューションに近づくことを保証します。
これは非線形の問題です。NewtonRaphsonや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)
ソリューションが発散または収束するまで、もう一度繰り返します。
最初の推測によっては、収束するという保証はありません。