可编程地求解方程组?

时间:2010-07-18 16:41:08

标签: c++ c algorithm equation

  

可能重复:
  System of linear equations in C++?

我有以下两个方程组:

对于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 ++(或伪代码)解决上述方程式。

由于

3 个答案:

答案 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, de, f, g, h的公式,然后将它们插入你的程序。