How to speed up conv2 and finite difference method?

4 ビュー (過去 30 日間)
mathango
mathango 2016 年 5 月 5 日
回答済み: mathango 2016 年 5 月 6 日
Hi, I would like to know if there is an opportunity to speed up a code listed below. Convolution method (CM) is a bit slower (40s) than iteration method(IM) (25s). Can this code (either or both methods) be improved further for speed? Note that Wnew and Znew are not exactly the same. (edges of matrix Znew are nonzero)
% iteration method
N=200;
Wold=zeros(N,N);
Wnew=zeros(N,N);
W=zeros(N,N);
Z=zeros(N,N);
Znew=zeros(N,N);
Zold=zeros(N,N);
W(10,10)=10;
Z(10,10)=10;
j = 2:N-1;
i = 2:N-1;
tic;
for time=0:0.1:100
Wnew(j,i)=a*(W(j+1,i)-4*W(j,i)+W(j-1,i)+W(j,i+1)+W(j,i-1))+2*W(j,i)-Wold(j,i);
% algorithm for display is here the same as for CM
Wold=W;
end
toc
% convolution method
D=[0 1 0; 1 -4 1; 0 1 0];
tic;
for time=0:1:100
Znew=2*Z-Zold+a*conv2(Z,D,'same');
% algorithm for display is here the same as for IM
Zold=Z;
end;
toc
  5 件のコメント
CS Researcher
CS Researcher 2016 年 5 月 6 日
I will again ask the same thing. Why do you have the for loops there? You are running the same commands in a loop without any change.
Adam
Adam 2016 年 5 月 6 日
Also you should use
doc profile
rather than tic toc if you seriously wish to optimise code.

サインインしてコメントする。

採用された回答

mathango
mathango 2016 年 5 月 6 日
After thorough testing, I decided not to use conv2 for my Finite difference method problem. An iterative method is simpler and a bit faster than conv2 method.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeFourier Analysis and Filtering についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by