2

重複の可能性:
C ++の一次方程式のシステム?

私は次の2つの連立方程式を持っています:

a、b、c、dの場合:

0 = a * r1_x + b * r1_x * r1_y + c * r1_y + d
1 = a * r2_x + b * r2_x * r2_y + c * r2_y + d
0 = a * r3_x + b * r3_x * r3_y + c * r3_y + d
1 = a * r4_x + b * r4_x * r4_y + c * r4_y + d

e、f、g、hの場合:

0 = e * r1_x + f * r1_x * r1_y + g * r1_y + h
0 = e * r2_x + f * r2_x * r2_y + g * r2_y + h
1 = e * r3_x + f * r3_x * r3_y + g * r3_y + h
1 = e * r4_x + f * r4_x * r4_y + g * r4_y + h

私はr1_x、r1_y、r2_x、r2_y、r3_x、r3_y、r4_x、r4_yの値を知っており、最初の値でa、b、c、dを、2番目の値でe、f、g、hを解く必要があります。

鉛筆と紙でこれらを解決する方法は知っていますが、プログラムする方法がよくわかりません。上記の方程式をCまたはC++(または擬似コード)でどのように解くことができますか?

ありがとう

4

3 に答える 3

14

これを行列システムにマッピングできますA x = b。ここAで、は係数行列、bは解ベクトル、xは未知数です。ガウスの消去法を実装するか、よく知られているライブラリを使用することができます。LAPACKを使用する場合は、必要なルーチンですdgesv

于 2010-07-18T16:46:31.920 に答える
4

線形代数と行列はここであなたの友達です。

Eigenは、最近のC++線形代数ライブラリのように見えます。それがあなたを助けることができるかどうか見てください。

連立方程式は次のようになります。これはマトリックスです:

代替テキスト
(出典:equationsheet.com

これは未知数のベクトルです:

代替テキスト
(出典:equationsheet.com

右側のベクトルは次のとおりです。

代替テキスト
(出典:equationsheet.com

この連立方程式を解くには、

代替テキスト

行列はブロック対角であるため、ソリューションも同様です。

線形方程式をWolframAlphaに入力して、シンボリック解を得ることができます。

これがあなたのシステムの1つの解決策です。行列がとる形を見ることができます。

于 2010-07-18T16:45:21.847 に答える
2

ガウス消去法を使用できますが、4 つの変数を持つ 4 つの方程式しかない場合は、おそらくやり過ぎです。

紙の上で解けるなら、紙の上で解いて、式を見つけて、a, b, c, dそれe, f, g, hをプログラムに差し込むだけです。

于 2010-07-18T16:51:09.240 に答える