FrontPage  Index  Search  Changes  Login

matlab 覚え書き

文字列の評価(コマンドの実行)

デフォルト設定

   axis([X軸の最小値, X軸の最大値, Y軸の最小値, Y軸の最大値])
   axis([X軸の最小値, X軸の最大値, Y軸の最小値, Y軸の最大値, Z軸の最小値, Z軸の最大値])
   または個別に…
   xlim([X軸の最小値, X軸の最大値]) 
   ylim([Y軸の最小値, Y軸の最大値]) … 各軸の範囲を指定する。
   zlim([Z軸の最小値, Z軸の最大値]) 

これらのコマンドはそれぞれ下記のコマンドのショートカットになっているそうです。

   set(gca, 'XLim', [X軸の最小値, X軸の最大値]]);
   set(gca, 'YLim', [X軸の最小値, X軸の最大値]]);
   set(gca, 'ZLim', [X軸の最小値, X軸の最大値]]);

デフォルト設定

プリンタが MATLABのデフォルトタイプ “letter”以外のデフォルト用紙タイプを使っている。新規figure毎に設定しないでデフォルト用紙タイプを変更するにはどうしたらよいか?

startup.mに行を追加することによって、プロパティに対するデフォルト値を設定することができます。つぎの行を追加すると、デフォルト用紙サイズをA4に設定します。

      set(0, 'DefaultFigurePaperType', 'A4');

setの呼び出しで、単語Defaultとオブジェクト名Figureとプロパティの名前PaperTypeを組み合わせます。

用紙方向を landscapeに設定したが、新規figureを印刷するたびに方向設定が 縦になる。新規figure毎に設定しないで用紙方向を変更するにはどうしたらよいか?

上記の質問に対する説明を参照してください。つぎの行をstartup.mに追加するとデフォルトの用紙方向を横に設定します。

      set(0, 'DefaultFigurePaperOrient', 'landscape')
(1) スタートアップファイル(startup.m)の利用

オプションの設定など起動時に毎回実行したいコマンドは、startup.m というファイル名のスタートアップファイルを作成することで、起動時に自動的に実行することができます。

スタートアップファイル(startup.m)は、次の箇所に保存します。

  ●Windows プラットフォームの場合
     MATLABの起動ディレクトリ、もしくは、$MATLAB/toolbox/local
     ※ここで、$MATLAB はMATLABのインストールディレクトリを表します。

  ●UNIX プラットフォームの場合
     ホームディレクトリのmatlabディレクトリ

lsqcurvefit / lsqnonlin 非線形最小二乗法

http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/optim/index.shtml http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/optim/?/matlab/support/manual/r14/toolbox/optim/lsqnonlin.shtml http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/optim/?/matlab/support/manual/r14/toolbox/optim/tutorie7.shtml#447980

>> optimset('lsqcurvefit')

ans =

                   Display: 'final'
               MaxFunEvals: '100*numberofvariables'
                   MaxIter: 400
                    TolFun: 1.0000e-006
                      TolX: 1.0000e-006
               FunValCheck: 'off'
                 OutputFcn: []
                  PlotFcns: []
           ActiveConstrTol: []
            BranchStrategy: []
           DerivativeCheck: 'off'
               Diagnostics: 'off'
             DiffMaxChange: 0.1000
             DiffMinChange: 1.0000e-008
         GoalsExactAchieve: []
                GradConstr: []
                   GradObj: []
                   Hessian: []
                  HessMult: []
               HessPattern: []
                HessUpdate: []
           InitialHessType: []
         InitialHessMatrix: []
                  Jacobian: 'off'
                 JacobMult: []
              JacobPattern: 'sparse(ones(jrows,jcols))'
                LargeScale: 'on'
        LevenbergMarquardt: 'on'
            LineSearchType: 'quadcubic'
                  MaxNodes: []
                MaxPCGIter: 'max(1,floor(numberofvariables/2))'
                MaxRLPIter: []
                MaxSQPIter: []
                   MaxTime: []
             MeritFunction: []
                 MinAbsMax: []
       NodeDisplayInterval: []
        NodeSearchStrategy: []
          NonlEqnAlgorithm: []
        NoStopIfFlatInfeas: []
      PhaseOneTotalScaling: []
            Preconditioner: []
          PrecondBandWidth: 0
            RelLineSrchBnd: []
    RelLineSrchBndDuration: []
          ShowStatusWindow: []
                   Simplex: []
                    TolCon: []
                    TolPCG: 0.1000
                 TolRLPFun: []
               TolXInteger: []
                  TypicalX: 'ones(numberofvariables,1)'

移動平均

http://www.cybernet.co.jp/matlab/support/techkwdb/search_view.php?id=1559

1559    	データの移動平均を求める関数はありますか?

カテゴリ:
MATLAB全般,
ツールボックス:	Curve Fitting Toolbox, MATLAB,
プラットフォーム:	ALL,
リリース:	R13, R13SP1, R13SP2, R14, R14SP1, R14SP2,
作成日:2005年08月10日
更新日:2005年08月10日

次の2通りの方法が考えられます。

(1)MATLABで提供されているfilter関数によるフィルタリング
(2)Curve Fitting Toolboxで提供されているsmooth関数による平滑化

以下にそれぞれの方法について説明します。

(1)filter関数によるフィルタリング
filter関数は、フィルタとして表される伝達関数の分母係数をベクトルa、分子係数をベクトルbとした時、ベクトルxのデータを下記式によってフィルタリングします。

   y = filter(b,a,x)

例えば、5点移動平均の場合、現時点の値をx(n)とすると、4サンプル前までの値の総和の平均値y(n)は次の差分方程式で表現されます。

   y(n) = (x(n) + x(n-1) + x(n-2) + x(n-3) + x(n-4)) / 5

これをZ変換し、伝達関数で表現すると以下のようになります。

   H(z) = Y(z) / X(z) = (1 + z^-1 + z^-2 + z^-3 + z^-4) / 5

よって、フィルタの係数aとbは以下のように表されます。

a = 5;
b = ones(1,5);

以上より、filter関数によって5点移動平均の結果が以下のように得られます。

t = 0:0.1:2*pi;
y1 = sin(t)+rand(1,length(t));
y2 = filter(b,a,y1);
plot(t,y1,'o-')
hold on
plot(t,y2,'r-*')
hold off
legend('original','filter')



上記の5点移動平均の場合、filter関数は現在の点から前の4点までを加算して平均を求めます。ここで、最初の4要素は次のように与えられます。

   y2(1) = y1(1) / 5
   y2(2) = (y1(1)+y1(2)) / 5
   y2(3) = (y1(1)+y1(2)+y1(3)) / 5
   y2(4) = (y1(1)+y1(2)+y1(3)+y1(4)) / 5
Last modified:2012/09/10 13:15:16
Keyword(s):
References: