我有以下两个方程组:
对于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,并且在第二个中求解e,f,g,h。
我知道如何用铅笔和纸来解决这些问题,但我真的不确定如何编程。我怎样才能用C或C ++(或伪代码)解决上述方程式。
由于
答案 0 :(得分:14)
您可以将其映射到矩阵系统A x = b
,其中A
是系数矩阵,b
是解决方案向量,x
是未知数。您可以实现高斯消除,也可以使用众所周知的库。如果您使用LAPACK,则需要例程dgesv
。
答案 1 :(得分:4)
线性代数和matricies是你的朋友。
Eigen看起来像是最近的C ++线性代数库。看看它是否可以帮到你。
这是你的方程系统的样子。这是矩阵:
alt text http://www.equationsheet.com/latexrender/pictures/de5b4238674080766b05b44170baef75.gif
这是未知数的载体:
alt text http://www.equationsheet.com/latexrender/pictures/92402dd682f5ec7a4e7055b5c955dace.gif
这是右侧矢量:
alt text http://www.equationsheet.com/latexrender/pictures/506142f0da0bf28e3058eb664d8909ec.gif
通过求解
来求解这个方程组alt text http://www.equationsheet.com/latexrender/pictures/19820cbc1d00c66b7890ef08175810ca.gif
由于您的矩阵是块对角线,因此您的解决方案也是如此。
您可以将线性方程输入Wolfram Alpha并获得符号解。
Here是您的某个系统的解决方案。您可以看到矩阵所采用的形式。
答案 2 :(得分:2)
你可以使用Gaussian elimination,但如果你只有4个含有4个变量的方程,这可能有点过分。
如果你可以在纸上解决它,然后在纸上解决它,找到a, b, c, d
和e, f, g, h
的公式,然后将它们插入你的程序。