【问题标题】:Solve linear system of equations with symbolic expressions用符号表达式求解线性方程组
【发布时间】:2014-09-19 10:33:30
【问题描述】:

您好,我正在尝试使用数学求解线性方程组。我有 18 个方程和 18 个未知数,系数矩阵有满秩。所有条目都是象征性的,因为我试图分析解决问题。不幸的是,Mathematica 从未停止评估。我准备了一个最小的工作示例:

n = 18
A = Table[AA[i, j], {i, 1, n}, {j, 1, n}];
A // MatrixForm
x = Table[xx[i], {i, 1, n}]
b = Table[bb[i], {i, 1, n}]
MatrixRank[A]
sol = Timing[Solve[{A.x == b}, x, Reals]]
A.x == b //. sol[[2]][[1]] // Simplify

对于 n=2,3,4,.. 一切正常。但是在 n=10 的情况下......没有任何效果了。 为什么mathematica 这样的问题能够解决这个问题? 有没有办法解决这个问题?

感谢您的帮助,

安德烈亚斯

【问题讨论】:

  • 你可以试试linearsolve,但是用符号来解决这么大的系统根本不切实际。
  • LinearSolve 很遗憾也不适用于以下错误消息:没有更多可用内存。 Mathematica 内核已关闭。尝试退出其他应用程序,然后重试。
  • 您在这里的更大目标是什么?完全通用地求解 18 x 18 的方程组可能是不可能的。你想解决它的目的是什么?如果我们知道大局是什么,我们也许可以提供一些建议。
  • 我有18个边界条件的边界值问题。所以我必须解决一个由 18 个方程组成的系统。该问题在系统矩阵中几乎没有零值。上面的代码只是一个例子。我尝试用数值求解方程组,但结果不合理。我认为原因是如果我对它进行数值评估,我在系统矩阵中有非常大和非常小的数字。这就是我试图以分析的方式解决它的原因。
  • (1) 解析解决方案不会解决数值错误的问题。它只会将它们推迟到您用数字代替变量的时候。 (2) 对于 10x10,如果您指定 Method 选项,例如 "OneStepRowReduction""CofactorExpansion",您可能会得到结果。 (3) 没有方法可以处理您显示的 18x18 设置。只需考虑它在辅因子方面的样子,以及它们必须有多少不同的术语。 (4) 如果您发布一个指示性数字示例,人们可能会对使用什么方法来避免数字错误产生想法。

标签: wolfram-mathematica symbolic-math equation-solving linear-equation


【解决方案1】:

你只需要更多的内存:

符号解涉及 n+1 个行列式,这里是对所需内存的估计。

 bc[n_] := (A = Det[Array[a, {n, n}]];ByteCount[A])
 ListLogPlot[
     t = Table[ {n, (n + 1) bc[n] /1024^3 // N} , {n,2,10}], Joined -> True]

外推到 n=18,我们可以看到您只需要大约 10^8 GB..

(对于任何不明白这一点的人来说,这比最大的超级计算机多 1000 倍)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多