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); |