Need help with jacobi iterative method computation - matlab code

16 次查看(过去 30 天)
I'm having trouble getting my code to work for a jacobi iteration problem. The problem is for a class project titled Numerical solution of heat equation on a 2D rectangular plate, here's a pic of the guidelines:
heres my code:
%%Part 1- Define N+1 by 2N+1 matrix
n=10 ;
old_Temp=zeros(n+1,2.*n+1) ;
old_Temp(:,(2.*n+1))=1 ;
old_Temp(n+1,:)=1 ;
old_Temp;
new_Temp=old_Temp;
% Part 2- Define 3 loops
% outermost loop
No=10;
tol=(1*10^-6);
iterations=0;
old_Temp=new_Temp;
while abs(new_Temp-old_Temp) <= tol % convergence check
for i=2:2*N % inbetween loop
for j=2:N % innermost loop
new_Temp(i,j) = (old_Temp(i+1,j) + old_Temp(i-1,j) + old_Temp(i,j+1) + old_Temp(i,j-1))/4; %jacobi computation
end
end
old_Temp(i,j)=new_Temp(i,j);
iterations=iterations+1; % iteration counter
end
| I can't seem to figure out what's wrong with it...it keeps giving me the error
Attempted to access old_Temp(12,2); index out of bounds because size(old_Temp)=[11,21].|

回答(1 个)

Walter Roberson
Walter Roberson 2015-5-13
You create a (10+1) * (2*10+1) matrix, but your first index into it, "i", is set to go up to 2*N and your second index "j" is set to go up to N. It appears that you have the limits of the two "for" loops reversed.
  5 个评论
Steven Benmoha
Steven Benmoha 2015-5-13
The only reason I am using the double for loop is because the project guidelines want the algorithm written out a certain way.
Walter Roberson
Walter Roberson 2015-5-13
You could be doing the entire matrix in one step, without even using conv2(). Ah well. In any case look at the other issues I raised.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by