2次元長方形領域における、
Neumann 境界条件あるいは free edge の境界条件を課した境界値問題の
差分法プログラムでは、
を
の近似として、
(![]() |
![]() |
vvv=zeros(nx+1,ny+1); vvv(:)=v; |
vvv![]() |
確認 |
>> x=1:30; >> y=zeros(6,5); >> y(:)=x y = 1 7 13 19 25 2 8 14 20 26 3 9 15 21 27 4 10 16 22 28 5 11 17 23 29 6 12 18 24 30 |
ところが、contour() や mesh() などの描画用の関数は、
Z(j,i)
のように
「添字が j,i の順番に並べてある」ことを想定している
(なぜだろう?)。理由はともあれ、そうするには単に転置をすれば良い。
(最初に
の定義で添字を逆にしておけば、
転置なんてことをしなくて済むわけだけど、
いまさら書き換えるのは面倒なので、
転置の手間には目をつむることにする。)
% nv_to_dim2.m % Naummann境界条件の問題の差分解を2次元配列に変換 % written by Masashi Katsurada % modified by Masashi Katsurada on 2012/9/29 % % example: % [v,d]=eigs(plate_f1(N,0.3),200,0); % u=nv_to_dim2(v(:,201-n),N,N); % x=0:1/N:1; y=0:1/N:1; % u=u'; % mesh(x,y,u); % contour(x,y,u); function u=nv_to_dim2(v,nx,ny) u=zeros(nx+1,ny+1); u(:)=v; u(1,:)=u(1,:)*sqrt(2); u(nx+1,:)=u(nx+1,:)*sqrt(2); u(:,1)=u(:,1)*sqrt(2); u(:,ny+1)=u(:,ny+1)*sqrt(2); |