我希望以前没有问过这个问题,如果是这样,我道歉。编辑:为清楚起见,将使用以下符号:矩阵大写粗体,向量小写粗体,标量斜体。假设 x0 是向量, A 和 B 是矩阵函数, f 是向量函数。我正在寻找在 Mathematica 中执行以下迭代方案的最佳方法:A0 = A(x0), B0=B(x0), f0 = f(x0)x1 = Inverse(A0)(B0.x0 + f0)A1 = A(x1), B1=B(x1), f1 = f(x1)x2 = Inverse(A1)(B1.x1 + f1)...我知道 for-loop 可以解决这个问题,但我对 Mathematica 不太熟悉,我担心这是最有效的方法。这是一个合理的担忧,因为我想定义一个函数 u(N):=xN 并在进一步的计算中使用它。我想我的问题是:对计划进行编程的最有效方法是什么?RecurrenceTable 是一条路吗? 编辑 这比我想象的要复杂一些。我提供更多细节以获得更彻底的回应。在进行重复之前,我在理解如何对函数 A 、 B 和 f 进行编程时遇到了问题。矩阵 A 和 B 是时间步长 dt = 1/T 和空间步长 dx = 1/M 的函数,其中 T 和 M 是 {0 f 也是如此。 A 、 B 和 f 对 x 的依赖是相当棘手的: A 和 B 是上三角矩阵和下三角矩阵(如三对角矩阵;我想我们可以称它们为多对角矩阵),它们的对角线上有定义的常数值。给定一个点 0 v ( x ojit) ( x ojit) 替换 A 和 B 的第 n 行转置,当然),以及带有函数 w( x ) 的 f 的第 n 行。总结一下, A = A (dt, dx, xs, x )。 B 和 f 也是如此。然后我需要做上面提到的循环,来定义 u ( x ) = step[T] 。希望我已经解释了自己。 最佳答案 我不确定这是否是最好的方法,但我只是使用普通的旧内存。您可以将单个步骤表示为xstep[x_] := Inverse[A[x]](B[x].x + f[x])然后u[0] = x0u[n_] := u[n] = xstep[u[n-1]]如果您事先知道需要多少个值,并且出于某种原因预先计算它们是有利的(例如,您想打开一个文件,使用其内容计算 xN ,然后释放内存),则可以使用 NestList 。而不是前两行,你会做xlist = NestList[xstep, x0, 10];u[n_] := xlist[[n]]当然,如果 n > 10 ,这将中断(显然,更改 10 以适应您的实际要求)。当然,可能值得查看您的特定函数,看看您是否可以进行一些代数简化。关于for-loop - 执行迭代方案的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8844014/
10-12 05:10