매틀랩 코드좀 봐주세요..
흠..프로그램은 초기값 설정 한것 보시면 아시겠지만
가운데 네모난 모양의 10이고 나머지는 다 0입니다.
for문에 가운데 10V 값을 준 값은 변하지 않고 나머지 부분에 대해
주위4칸의 v를 이용하여 v를 계산해 나가는 그런 내용입니다.
구간을 나눠서 v를 구하는데요.. 가운데 사각형 위아래 부분과 양옆의 부분
총4부분(가운데사각형제외)으로 나눠서 값을 구하게 됩니다..
아래 코드로 짜면 가운데10V는 변하지 않아야하는데 0이 되어버리네요.. 왜그럴까요?
----------------------------------------------------------------------------
clc;clear all;
t=100; % 3차원행렬의 길이를 임의로 100으로 설정
v=zeros(34,34,t); % (34,34,t)크기의 3차원 행렬을 0으로 초기화 시켜서 만듦
v(14,14:20,1:t)=10;
v(14:20,14,1:t)=10;
v(14:20,20,1:t)=10;
v(20,14:20,1:t)=10; % 초기값(내부사각형의 전압10V) 설정
for k=1:t
for i=2:33
for j=2:13
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
end
for j=21:33
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
end
end
for j=14:20
for i=2:13
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
end
for i=21:33
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
end
end
b(k+1)=sum(sum(v(:,:,k+1)));
error=abs(b(k+1)-b(k));
if error<0.00001
figure(k)
[C,h]=contour(v(:,:,k))
text_handle = clabel(C,h)
v(:,:,k)
break
end
end
-----------------------------------------------------------------------------------------------------
이거는 if문을 써봤는데요... 이건v가 초기값으로 그냥 나오네요..
위에꺼나 아래꺼나.. 뭔가 틀려서..이럴텐데.. 잘 모르겠어요..
갑자기 배우면서 하다보니...
-----------------------------------------------------------------------------------------------------
clc;clear all;
t=100; % 3차원행렬의 길이를 임의로 100으로 설정
v=zeros(34,34,t); % (34,34,t)크기의 3차원 행렬을 0으로 초기화 시켜서 만듦
v(14,14:20,1:t)=10;
v(14:20,14,1:t)=10;
v(14:20,20,1:t)=10;
v(20,14:20,1:t)=10; % 초기값(내부사각형의 전압10V) 설정
for k=1:t
for i=2:33
for j=2:33
if(i==2:33&j==2:13)
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
if(i==2:33&j==21:33)
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
if(i==2:13&j==14:20)
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
if(i==21:33&j==14:20)
v(i,j,k+1)=(v(i,j-1,k)+v(i-1,j,k)+v(i,j+1,k)+v(i+1,j,k))/4;
end
end
end
end
end
end
b(k+1)=sum(sum(v(:,:,k+1)));
error=abs(b(k+1)-b(k));
if error<0.00001
figure(k)
[C,h]=contour(v(:,:,k))
text_handle = clabel(C,h)
v(:,:,k)
break
end
end
------------------------------------------------------------------------------
for문 루프
for문 루프 돌리는데서 계산이 틀리는 것 같군요. 그러니까, for문이 계산할 때 가운데 사각형은 피해서 가야 하는데 그냥 다 계산해 버리는 것 같습니다.
제 코딩 철학은 돌아가기만 하면된다는 것이기 때문에, 저라면 1회 루프를 돌아갈 때마다 경계조건을 다시 설정할 겁니다. 가운데 사각형이 10이라는 값을 유지할 필요가 있다면, 계산 돌릴 때마다 10을 대입해 버리면 되겠죠.
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
초기값 설정이
초기값 설정이 잘못된것 같습니다.
% 초기값(내부사각형의 전압10V) 설정
한 직후에 imagesc(v(:,:,1)) 해보시면
내부가 10으로 설정된게 아니라,
테두리만 10으로 설정되고 내부는 0으로 설정된걸 보실 수 있을 겁니다.
제가 설명을...잘 못한거 같네요..
에.. 가운데 네모 테두리만 10V로 한게 맞습니다^^;;
처음코드로
처음코드로 돌리면..
가운데네모테두리는 그냥 10으로 나오던데요..
값이 변한다는 확인은 어떻게 하셨는지??
댓글 달기