1
18
Cramer's Rule 和 Gaussian Elimination 是两种好的通用算法(另请参见 Simultaneous Linear Equations )如果您正在寻找代码,请检查 GiNaC , Maxima 和 SymbolicC++ (当然,这取决于您的许可要求)。 编辑:我知道你在C区工作,但我也必须为 SymPy (Python中的计算机代数系统)。你可以从它的算法中学到很多东西(如果你能读一点python的话)。此外,它还拥有新的BSD许可证,而大多数免费的数学软件包都是GPL。 |
2
15
你可以用一个程序来解决这个问题,方法和你用手来解决的方法完全一样(用乘法和减法,然后把结果反馈到等式中)。这是相当标准的中学数学。
所以你最终会得到:
如果将这些值插回A、B和C,就会发现它们是正确的。 诀窍是使用一个简单的4x3矩阵,它依次减少到3x2矩阵,然后是一个2x1,它是“a=n”,n是一个实际数字。一旦你有了它,你就把它输入下一个矩阵,得到另一个值,然后这两个值进入下一个矩阵,直到你解出所有的变量。 如果你有n个不同的方程,你总是可以解N个变量。我说的与众不同是因为这两个不是:
它们是 相同的 方程式乘以2,这样你就无法从中得到答案——先乘以2,然后减去,这样你就得到了真实但无用的陈述:
举例来说,这里有一些C代码,可以计算出问题中的联立方程。首先是一些必要的类型、变量、打印方程的支持函数以及
接下来,将三个未知数的三个方程简化为两个未知数的方程:
接下来,将两个未知数的方程简化为一个未知数的方程:
现在我们有了这个类型的公式
该代码的输出与此答案中的早期计算匹配:
|
3
7
对于一个3x3的线性方程组,我想可以推出自己的算法。 但是,您可能需要担心精度、被零或非常小的数字除以及如何处理无穷多的解。我的建议是使用标准的数字线性代数包,例如 LAPACK . |
4
6
看看 Microsoft Solver Foundation . 使用它,您可以编写如下代码:
以下是输出:
|
5
3
你是在寻找一个能完成工作的软件包,还是在做矩阵运算之类的工作,并完成每一步? 第一个,我的一个同事刚刚用过 Ocaml GLPK . 它只是一个包装 GLPK 但是它消除了很多设置的步骤。不过,在C语言中,看起来你必须坚持使用glpk。对于后者,感谢美味的保存了一篇我以前学过的老文章。 PDF . 如果您需要进一步的帮助,请告诉我们,我确信,我或其他人会回来帮忙,但是,我认为这是相当直接的。祝你好运! |
6
3
Template Numerical Toolkit 来自NIST的工具可以做到这一点。 更可靠的方法之一是使用 QR Decomposition . 下面是一个包装器的例子,这样我可以在代码中称为“getInverse(a,inva)”,它将把Inverse放入inva中。
array2d在库中定义。 |
7
2
从你的问题的措辞来看,似乎你有比未知更多的方程式,你想要最小化不一致。这通常是通过线性回归来完成的,线性回归可以最小化不一致的平方和。根据数据的大小,您可以在电子表格或统计数据包中执行此操作。R是一个高质量的,免费的包,可以做线性回归,还有很多其他的事情。线性回归有很多种方法(还有很多gotcha方法),但是对于简单的情况,这是很简单的。下面是一个使用您的数据的R示例。请注意,“tx”是对模型的截获。
|
8
2
在运行时效率方面,其他人的回答比我好。如果你总是有相同数量的方程作为变量,我喜欢 Cramer's rule 因为它很容易实现。只需编写一个函数来计算一个矩阵的行列式(或者使用一个已经写过的函数,我相信你可以在那里找到一个),然后将两个矩阵的行列式分开。 |
9
1
就我个人而言,我偏爱 Numerical Recipes . (我喜欢C++版。) 这本书将教你为什么算法工作,并向你展示一些非常好的调试这些算法的实现。 当然,你可以盲目地使用 CLAPACK (我已经成功地使用了它),但是我会首先输入一个高斯消元算法,至少对使这些算法稳定所做的工作有一个模糊的概念。 稍后,如果您正在做更有趣的线性代数,请查看 Octave 会回答很多问题。 |
10
1
|
daedsidog · 使用EJML计算线性系统 8 年前 |