在MATLAB/Maple/etc上高效求解符号线性方程组

在MATLAB/Maple/etc上高效求解符号线性方程组,matlab,symbolic-math,maple,equation-solving,Matlab,Symbolic Math,Maple,Equation Solving,基本上我有一个线性方程组,其中每个系数都是一个变量。例如,对于2x2系统: a11*x1+a12*x2=f1 a21*x1+a22*x2=f2 x1,x2=。。。。(带a11、a12、a21、a22、f1、f2的符号表达式) 我尝试在MATLAB中通过Cramer规则求解,以符号形式编写系统的矩阵,并计算适当的行列式。问题是,所需的时间随着系统的大小而快速增长。我手头的问题需要一个12x12系统的符号解决方案,但我当前的代码所需的时间是巨大的,不可能在下个月的任何时候完成 求解这个符号线性系

基本上我有一个线性方程组,其中每个系数都是一个变量。例如,对于2x2系统:

  • a11*x1+a12*x2=f1
  • a21*x1+a22*x2=f2
x1,x2=。。。。(带a11、a12、a21、a22、f1、f2的符号表达式)

我尝试在MATLAB中通过Cramer规则求解,以符号形式编写系统的矩阵,并计算适当的行列式。问题是,所需的时间随着系统的大小而快速增长。我手头的问题需要一个12x12系统的符号解决方案,但我当前的代码所需的时间是巨大的,不可能在下个月的任何时候完成


求解这个符号线性系统的最佳方法是什么?有人告诉我,Maple最适合于符号运算,它在计算符号行列式方面是否比MATLAB快得多?

是的,除了所涉及变量的数值系数外,Maple还可以用符号系数求解线性方程组。以下是一个例子:

eq||1:=a11*x1+a12*x2=f1;
eq||2:=a21*x1+a22*x2=f2;
solve({eq||1, eq||2}, [x1,x2]);
然后你会在一秒钟内得到下面的答案

[[x1 = -(a12*f2-f1*a22)/(a11*a22-a21*a12), x2 = (a11*f2-a21*f1)/(a11*a22-a21*a12)]] 

有关更多信息和求解复杂方程的信息,请浏览Maple帮助页。

一句话中的“符号”和“有效”。不,这通常不会发生。是的,MATLAB最适合数值问题,我个人不喜欢它的符号引擎。对于12x12全符号系统的解决方案,有什么可能的实际用途?行列式将有12!=5亿个项,每个项有12个因子。如果你的矩阵中没有结构,你可以安全地停止这方面的工作,正如评论所指出的。实际上,可以解决的最大系统有七个方程。这需要超过10分钟,并使用大约1G的内存。