必要があって調べたことでも、 忘れてしまって、後で「あれはどうだったかな?」が多い。 定着するまではメモが必要だ。
[m,n]=size(A);
m=size(A,1);
n=size(A,2);
[n,dummy]=size(A);
s='Hello';
object='pen';
str=['This ' 'is ' 'a ' object '.']
(と思っていたのだけれど、linspace(a, b, n+1); とすべきかも)
x=a:(b-a)/nx:b;
y=c:(d-c)/ny:d;
u=zeros(ny+1,nx+1);
...
mesh(x,y,u); または contour(x,y,u);
plot_n.m
% plot_n.m --- 長方形領域上の問題の差分解の描画 (Neumann, free edge 境界条件)
%
% 使用例
% (1) Laplacian の第 n 固有関数
% [v,d]=eigs(eigp2nsp(nx,ny),10,0);
% plot_n(v(:,11-n),nx,ny);
% (2) 重 Laplacian の第 n 固有関数
% [v,d]=eigs(plate_f1(N,0.3),200,0); 小さい方から200個の固有値、固有関数
% plot_n(v(:,201-n),N,N); (n=4 は正の最小固有値)
function plot_n(v,nx,ny)
% メモリー中に v[0][0],v[1][0],...,v[Nx][0],v[0][1],.. と並んでいる。
% 2次元配列に収める
vvv=zeros(nx+1,ny+1);
vvv(:)=v;
% 境界での値を修正する (角点では2倍することに注意)
vvv(1,:)=vvv(1,:)*sqrt(2);
vvv(nx+1,:)=vvv(nx+1,:)*sqrt(2);
vvv(:,1)=vvv(:,1)*sqrt(2);
vvv(:,ny+1)=vvv(:,ny+1)*sqrt(2);
% mesh(), contour() には渡すには、vvは ny+1,nx+1 とする必要がある。
vv=vvv';
x=0:1/nx:1;
y=0:1/ny:1;
% 左側にグラフの鳥瞰図
subplot(1,2,1);
colormap hsv;
mesh(x,y,vv);
% 右側に等高線
right=subplot(1,2,2);
contour(x,y,vv);
pbaspect(right,[1 1 1]);
end
% dividedata.m --- free_某_1280.mat を分割して poisson_某/u番号.dat
% 2012/10/13 最初のバージョン (0,0.1,0.2,0.25,0.3,0.35,0.5で実行する)
% 2012/11/17 小修正
% written by Masashi Katsurada
clear
N=1280;
i=1:N/160:N+1;
j=1:N/160:N+1;
muarray=[0 0.1 0.2 0.25 0.3 0.35 0.5];
maxk=size(muarray,2);
for k=1:maxk
mu=muarray(k);
mustr=num2str(mu);
% mustr 0 0.1 0.2 0.25 0.3 0.35 0.5
load(['free_' mustr '_1280.mat'])
for n=1:200
u=nv_to_dim2(v1280(:,201-n),N,N);
u=u(i,j);
save(['poisson_' mustr '/u' int2str(n) '.dat'], 'u', '-ascii')
end
e=diag(d1280);
e=e(200:-1:1);
save(['poisson_' mustr '/eigen.dat'],'e','-ascii')
end
>>> license
ans =
むにゃむにゃ
2017-06-19