gpt4 book ai didi

for-loop - 进行迭代计划的最佳方法

转载 作者:行者123 更新时间:2023-12-01 10:07:41 24 4
gpt4 key购买 nike

我希望之前没有人问过这个问题,如果是的话我深表歉意。

编辑:为清楚起见,将使用以下符号:矩阵用粗体大写,向量用粗体小写,标量用斜体。

假设x0是一个向量,AB是矩阵函数,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 是可行的方法吗?

编辑

这比我想象的要复杂一些。我正在提供更多详细信息,以便获得更彻底的答复。

在执行循环之前,我无法理解如何对函数 ABf 进行编程。

矩阵AB 是时间步长dt = 1/T 和空间步长dx = 1/的函数M,其中 TM 是 {0 < x < 1 中的点数,0 < t} 区域。对于向量函数 f 也是如此。

ABfx 的依赖是相当棘手的:

AB上三角下三角矩阵(如三对角 矩阵;我想我们可以称它们为多对角线),在它们的对角线上定义了常数值。

给定一个点 0 < xs < 1,我需要确定它在网格中的代表性 xn(最接近的),然后然后ABnth 行替换为函数 v( x) (当然是转置),f 的第 nth 行具有函数 w( x)。

总结,A = A(dt, dx, xs, x)。 Bf 也是如此。

然后我需要做上面提到的循环,定义u( x) = step[T]

希望我已经解释清楚了。

最佳答案

我不确定这是否是最好的方法,但我会使用普通的旧内存。您可以将单个步骤表示为

xstep[x_] := Inverse[A[x]](B[x].x + f[x])

然后

u[0] = x0
u[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com