【发布时间】:2013-12-02 04:08:57
【问题描述】:
我有一个完美运行的代码,我正在努力提高它的效率。
t = -1:.001:1;
t_for_y = -50:.01:50;
x = zeros(size(t));
x(1001:end) = exp(-3 * t(1001:end));
h = zeros(size(t));
h(1001:end) = exp(-2 * t(1001:end)); % FIXED TYPO
for k = 1:length(t_for_y)
X(k)=trapz(t,x.*exp(-1i*t*t_for_y(k)));
H(k)=trapz(t,h.*exp(-1i*t*t_for_y(k)));
end
Y = X.*H;
for k = 1:length(t)
y(k) = (1/(2*pi))*trapz(t_for_y,Y.*exp(1i*t(k)*t_for_y));
end
plot(t,real(y));grid on;
我只想使用一个 for-loop 或者没有 for 循环这可能吗?
有没有更快的使用方法?
【问题讨论】:
-
不知道matlab如何优化代码。假设它不做任何优化,只运行你给出的代码,那么你可以将你所做的任何计算存储到 temp 变量中并继续使用它而不是每次都计算。
exp(-1i*t*t_for_y(k))可以在循环之前计算和存储并重复使用,而不是每次都计算。(1/(2*pi))可以在循环之前预先计算。但是改进这一点,我不认为你会看到减少循环有多大区别,但每一点改进都很重要。 -
对于部分代码:
exp(-1i*t*t_for_y(k))将其放在循环之外是否仍会随着循环的每个部分而增加? -
exp(-1itt_for_y(k)) 该部分必须在循环内但计算一次并存储在变量中。
标签: matlab for-loop performance convolution