2

可能重复:
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++(或伪代码)求解上述方程。

谢谢

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

你通过求解来求解这个方程组

替代文字

由于您的矩阵是块对角线,因此您的解决方案也是如此。

您可以将线性方程输入Wolfram Alpha并获得符号解。

是您的一个系统的解决方案。您可以看到矩阵采用的形式。

于 2010-07-18T16:45:21.847 回答
2

您可以使用高斯消元法,但如果您只有 4 个带有 4 个变量的方程,那可能就有点过头了。

如果你能在纸上解决它,然后在纸上解决它,找到公式a, b, c, de, f, g, h然后将它们插入你的程序。

于 2010-07-18T16:51:09.240 回答