【发布时间】:2018-05-22 21:31:38
【问题描述】:
在 MATLAB R2017a 中工作。我正在尝试优化我正在处理的一段代码。它使用数组将字段值存储在网格上。 为了在字段数组中创建特定函数,我最初使用两个 for 循环迭代所有数组元素的直接方法。但我知道 for 循环很慢,所以从那以后我回来并尽力删除它们。但是我只能设法删除其中一个循环;留给我这个:
for n = 1:1:K
%%% define initial pertubation
t=n*dt;
% create array for source Ez field.
xtemps = (1:Ng)*dX;
for k = 1:Ng
ztemp = k*dX;
Ez0(k,:) = THzamp * (1/(1+exp(-(t-stepuppos)))) * exp(-((xtemps-...
THzstartx).^2)./(bx^2)) .* (t-((ztemp-THzstartz)/vg))*exp(-((t-((ztemp-...
THzstartz)/vg))^2)/(bt^2));
end
这里最重要的是最后 5 行,但我认为之前的内容可能对上下文很重要。我已经删除了在 x 坐标上循环的 for 循环。我想对 z/k for 循环进行矢量化,但我不知道如何使用数组操作符区分维度。
编辑:THzamp、stepuppos、bx、bt、THzstartz、THzstartx 都是标量,它们控制着我试图创建的函数 (Ez0)。 dX 和 t 也只是标量。 Ez0 是一个大小为 Ng 的方阵。
我想要实现的是删除在 k 上循环的 for 循环,以便 ztemp 的值在向量中定义(就像 xtemps 已经是一样),而不是在循环中单独定义。但是,我不知道在这种情况下如何编写 Ez0 的定义。
第一次在这里发帖,如果我做错了,请告诉我。如果您需要更多信息,请询问。
【问题讨论】:
-
如果您至少定义了所有变量的大小会有所帮助。这与complete example 相差甚远。
-
抱歉,我显然解释得不够清楚。 THzamp、stepuppos、bx、bt、THzstartz、THzstartx 都是标量,它们控制着我试图创建的函数 (Ez0)。 dX 和 t 也只是标量。 Ez0 是一个大小为 Ng 的方形数组,我想要实现的是删除循环 k 的 for 循环,以便 ztemp 的值定义在一个向量中(就像 xtemps 已经是),而不是单独在循环中.但是,我不知道在这种情况下如何编写 Ez0 的定义。 (如果不给你我的整个代码,我不知道如何把它变成一个完整的例子,对不起)
-
我刚刚阅读了有关完整示例的链接。我大概可以创造出类似的东西。不幸的是,我只能在工作中使用 matlab,所以它必须等到星期二。 ://
标签: arrays matlab loops for-loop 2d