gpt4 book ai didi

arrays - 使用 arrayfun 在 Matlab 中更快地进行 for 循环?

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:16 24 4
gpt4 key购买 nike

目前我有以下部分代码:

for i = 2:N-1
res(i) = k(i)/m(i)*x(i-1) -(c(i)+c(i+1))/m(i)*x(N+i) +e(i+1)/m(i)*x(i+1);
end

其中变量 k、m、c 和 e 是大小为 N 的向量,x 是大小为 2*N 的向量。有什么方法可以使用 arrayfun 之类的东西更快地做到这一点!?我无法弄清楚:(我特别想通过稍后在 GPU 上运行来使其更快,因此,arrayfun 也会有帮助,因为 matlab 不支持并行化 for 循环而且我不想购买夹克包裹...非常感谢!

最佳答案

您不必使用 arrayfun。如果使用一些智能索引,它会起作用:

    clear all

N=20;
k=rand(N,1);
m=rand(N,1);
c=rand(N,1);
e=rand(N,1);
x=rand(2*N,1);

% for-based implementation
%Watch out, you are not filling the first element of forres!
forres=zeros(N-1,1); %Initialize array first to gain some speed.
for i = 2:N-1
forres(i) = k(i)/m(i)*x(i-1) -(c(i)+c(i+1))/m(i)*x(N+i) +e(i+1)/m(i)*x(i+1);
end

%vectorized implementation
parres=k(2:N-1)./m(2:N-1).*x(1:N-2) -(c(2:N-1)+c(3:N))./m(2:N-1).*x(N+2:2*N-1) +e(3:N)./m(2:N-1).*x(3:N);

%compare results; strip the first element from forres
difference=forres(2:end)-parres %#ok<NOPTS>

关于arrays - 使用 arrayfun 在 Matlab 中更快地进行 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423592/

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