MATLAB Answers

0

How Can I Speed up a loop that solves a pde?

Asked by David Koenig on 21 Nov 2014
Latest activity Commented on by Jan
on 24 Nov 2014
Hello,
I am solving the 4th order pde for plate vibration and after discretizing the pde and solving for W(x,y,t) or W(k,m,n+1) as a function of W(k,m,n) and W(k,m,n-1) I get a double for loop like
for k=3:K-3
for m=3:M-3
Wnp1(k,m)=coe(1,3)*Wn(k-2,m)...
+ coe(2,2)*Wn(k-1,m-1) + coe(2,3)*Wn(k-1,m) + coe(2,4)*Wn(k-1,m+1)...
+coe(3,1)*Wn(k,m-2) + coe(3,2)*Wn(k,m-1)+coe(3,3)*Wn(k,m)...
+coe(3,4)*Wn(k,m+1)+coe(3,5)*Wn(k,m+2)...
+coe(4,2)*Wn(k+1,m-1)+coe(4,3)*Wn(k+1,m)+coe(4,4)*Wn(k+1,m+1)...
+coe(5,3)*Wn(k+2,m)...
+cNm1*Wnm1(k,m)+SWW(k,m);
end
end
where coe is a 5x5 matrix with several zeros that contains the coefficients in the finite difference approximation to the pde and Wn(k,m) represents the displacement at position k,m at time n.
I was hoping to find a way to use matrix multiplication that might speed things up but I am stumped. Does anyone have any suggestions?
Thanks,
Dave

  1 Comment

Jan
on 24 Nov 2014
Do you pre-allocate the output Wnp1?

Sign in to comment.

1 Answer

Answer by Zoltán Csáti on 24 Nov 2014

When you did your calculations on paper, you probably wrote the problem as a linear system. Try to create the coefficient matrix in a vectorized manner. Or if you cannot do it, attach an image of the coeff. matrix so that we can see it.

  0 Comments

Sign in to comment.