MATLAB の実行例 (2) 自分で定義した関数を呼び出す

前項では、$ n=5$ , $ c=1$ で実験したが、色々な数値に対して実験しよう。 そのため、関数 report_eigen(n,c) を定義する。

例えば
コマンド ウィンドウから編集開始
» edit report_eigen
として現れる Editor ウィンドウに、 以下の report_eigen.m の内容を入力し、保存する。

あるいは別途 emacs などのテキスト・エディターを使って、 以下のような関数定義ファイル report_eigen.m を作り、 適切な場所 (例えば、macOS ならば、 ~/Documents/MATLAB など) におく。

report_eigen.m

function lambda = report_eigen(n,c)
  J=diag(ones(n-1,1),1)+diag(ones(n-1,1),-1);
  A=4*eye(n,n)-J;
  n2=2*n;
  Ap=zeros(n2,n2);
  Ap(1:n,1:n)=A;
  Ap(n+1:n2,n+1:n2)=c*A;
  lambda=eig(Ap);


n=50; c=1; lambda=report_eigen(n,c); plot(1:2*n,lambda)
>> max(lambda)/min(lambda)

ans =
    2.9924

>> n=50; c=10; lambda=report_eigen(n,c); plot(1:2*n,lambda)
>> max(lambda)/min(lambda)

ans =
   29.9243

>> n=50; c=100; lambda=report_eigen(n,c); plot(1:2*n,lambda)
>> max(lambda)/min(lambda)

ans =
  299.2428

>> 

図 2: $ n=50$ , $ c=1$
\includegraphics[width=5cm]{eps/n50c1.eps}
図 3: $ n=50$ , $ c=10$
\includegraphics[width=5cm]{eps/n50c10.eps}
図 4: $ n=50$ , $ c=100$
\includegraphics[width=5cm]{eps/n50c100.eps}

桂田 祐史
2017-06-19