トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

MATLAB Note/計算

Last-modified: 2014-12-06 (土) 06:56:20
Top / MATLAB Note / 計算

四則演算をする

  • 参考:行列と配列について
    +   	加算
    -	減算
    *	乗算
    /	除算
    \	左除算 (左から右を割る)
    ^	ベキ乗
    '	複素共役転置
  • 余りは rem(x,y) (XをYで割ったときの余り)
  • 商は floor(x/y)
  • 平方根(ルート)は sqrt(X)
  • 実行例
>> 1 + 2    %足し算
ans =
    3
>> 5 - 3    %引き算
ans =
    2
>> 3 * 10   %掛け算
ans =
   30
>> 5 / 10   %割り算
ans =
   0.5000
>> 5 \ 10   %割り算 (左から右を割る)
ans =
    2
>> 2 ^ 4    %べき算
ans =
   16
  • ベクトル同士の四則演算
    • 以下の配列A,Bを使って説明します。
      >> A = [1 2 ; 3 4]
         A =
             1     2
             3     4
      >> B = [-1 -2 ; -3 -4]
         B =
            -1    -2
            -3    -4
>> A + B
ans =
    0     0
    0     0
>> A - B
ans =
    2     4
    6     8
>> A * B
ans =
   -7   -10
  -15   -22
>> A .* B   %行列の各要素同士の演算
ans =
   -1    -4
   -9   -16
>> A / B
ans =
   -1     0
    0    -1
>> A ./ B   %行列の各要素同士の演算
ans =
   -1    -1
   -1    -1

配列を宣言する

  • 配列(ベクトル)の値を指定して宣言
    >> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]  %4行4列の配列Aを宣言
       A =
          16     3     2    13
           5    10    11     8
           9     6     7    12
           4    15    14     1
  • 配列(ベクトル)を自動生成する
    >> A = 1:10       %1から10までの整数を含む行ベクトルを作成
       A =
           1     2     3     4     5     6     7     8     9    10
    >> A = 100:-7:50  %100から50まで、-7おきに行ベクトルを作成
       A =
         100    93    86    79    72    65    58    51
  • ゼロ行列を作る
    >> Z = zeros(2,4) %2行4列のゼロ行列
       Z =
           0     0     0     0
           0     0     0     0
  • 単位行列を作る
    >> F = ones(3,3)  %3行3列の単位行列
       F =
           1     1     1
           1     1     1
           1     1     1
    >> F = 5 * ones(3,3)
       F =
           5     5     5
           5     5     5
           5     5     5
  • 一様分布(ランダム分布)する要素からなる行列
    >> N = fix(10*rand(1,10))
       N =
          9     2     6     4     8     7     4     0     8     4
    ※値は実行するたびに変わります。(注:再起動後は同じ値が選択されます!)
    ※FIX(X)は、Xの要素をゼロ方向の最も近い整数に丸めます。(小数点以下切り捨て)
  • 正規分布する要素からなる行列
    >> R = randn(4,4)
       R =
         -0.4326   -1.1465    0.3273   -0.5883
         -1.6656    1.1909    0.1746    2.1832
          0.1253    1.1892   -0.1867   -0.1364
          0.2877   -0.0376    0.7258    0.1139

配列を操作する

  • 以下の配列Aを使って説明します。*1
    >> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
       A =
          16     3     2    13
           5    10    11     8
           9     6     7    12
           4    15    14     1
  • 配列のサイズを取得
    >> size(A)
       ans =
            4     4
    >> length(A) %行の長さ、列の長さのうち、大きいほうを出力
       ans =
            4
  • Aの各列を合計
    >> sum(A)    %各列を合計
    ans =
       34    34    34    34
    >> sum(A,1)  %(別のやり方)Aの1次元成分の合計
    ans =
       34    34    34    34
  • 行と列を入れ替え
    >> A'        %主対角に対して行列を入れ替え(行ベクトルを列ベクトルに)
    ans =
       16     5     9     4
        3    10     6    15
        2    11     7    14
       13     8    12     1
  • Aの各行を合計( = 入れ替えた後の各列を合計)
    >> sum(A')   %各行を合計
    ans =
       34    34    34    34
    >> sum(A')'  %行として出力
    ans =
       34
       34
       34
       34
    >> sum(A,2)  %(別のやり方)Aの2次元成分の合計
    ans =
       34
       34
       34
       34
  • 配列を90度反転
    >> rot90(A)  %配列を90度反転
    ans =
       13     8    12     1
        2    11     7    14
        3    10     6    15
       16     5     9     4
  • 主対角要素を取り出す
    >> diag(A)
    ans =
       16
       10
        7
        1
  • 指定要素を取り出す
    >> A(1:3,2)            %A の 2 番目の列の最初から 3 番目までの要素を取り出す
    ans =
        3
       10
        6
    >> A(2:end,2)          %A の 2 番目の列の 2 番目から最後までの要素を取り出す
    ans =
        10
         6
        15
  • 指定要素を検索/入れ替える
    >> k = find( A < 5 )   %配列Aの要素のうち、5以下の値の位置番号を出力する
       k =
           4
           5
           9
          16
    ※関数 find は、与えられた論理条件になる配列要素のインデックスを決めます。
    ※位置番号は、4行4列の配列Aの場合、
        [  1   5   9  13
           2   6  10  14
           3   7  11  15
           4   8  12  16  ]  となります。
    >> A(k)                 %k により決められた順番で実際の値を表示
       ans =
           4
           3
           2
           1
    >> A(k) = NaN           %kにより取り出された位置番号の値をNaNに入れ替える
       A =
          16   NaN   NaN    13
           5    10    11     8
           9     6     7    12
         NaN    15    14   NaN
  • 配列を結合する
    >> B = [A  A; A  A]  %4つの小行列Aを連結した8行8列の行列Bを作成
       B =
          16     3     2    13    16     3     2    13
           5    10    11     8     5    10    11     8
           9     6     7    12     9     6     7    12
           4    15    14     1     4    15    14     1
          16     3     2    13    16     3     2    13
           5    10    11     8     5    10    11     8
           9     6     7    12     9     6     7    12
           4    15    14     1     4    15    14     1
  • 指定した要素を削除する
    >> X = A;            %配列Aの中身を配列Xにコピーする
    >> X(:,2) = []       %Xの2番目の列を削除
       X =
          16     2    13
           5    11     8
           9     7    12
           4    14     1
  • 配列をソートする
    >> sort(A)            %各列の行成分を並べ替え(昇順)
       ans =
            4     3     2     1
            5     6     7     8
            9    10    11    12
           16    15    14    13
    >> sort(A,'descend')  %各列の行成分を並べ替え(降順)
       ans =
           16    15    14    13
            9    10    11    12
            5     6     7     8
            4     3     2     1

基本統計計算

  • 以下の配列dataを使って説明します。
    >> data = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] 
       data =
            1     2     3     4
            5     6     7     8
            9    10    11    12
    • 平均値
      >> mean(data)            %各列の平均を求める
         ans =
              5     6     7     8
      >> mean(data')'          %各行の平均を求める
         ans =
             2.5000
             6.5000
            10.5000
    • 中央値
      >> median(data)          %各列の中央値を出力
         ans =
              5     6     7     8
      >> median(data(:,3))     %3列目の中央値を出力
         ans =
              7
      >> median(data(1,:))     %1行目の中央値を出力
         ans =
             2.5000
      >> median(data(1:2,:))   %1,2行目の各列の中央値を出力
         ans =
              3     4     5     6
    • 標準偏差
      >> std(data)             %各列の標準偏差を出力
         ans =
              4     4     4     4
    • 分散
      >> var(data)             %各列の分散値を出力
         ans =
             16    16    16    16
    • 共分散
      >> cov(data)
         ans =
             16    16    16    16
             16    16    16    16
             16    16    16    16
             16    16    16    16
    • 相関係数
      >> corrcoef(data)
         ans =
              1     1     1     1
              1     1     1     1
              1     1     1     1
              1     1     1     1
    • 標本範囲(最大値と最小値間の差)
      >> data2 = [1 3 5 9 ; 2 3 7 1; 1 5 7 4]             %ここで使うデータセットを宣言
         data2 =
              1     3     5     9
              2     3     7     1
              1     5     7     4
      >> range(data2)
         ans =
              1     2     2     8
  • 欠損値があるとき
    >> dataNaN = [1 2 NaN 4 ; NaN 6 7 8 ; 9 10 11 NaN]  %ここで使うデータセットを宣言
       dataNaN =
            1     2   NaN     4
          NaN     6     7     8
            9    10    11   NaN
    
    %欠測値を無視した場合の最大値
    >> nanmax(dataNaN)
       ans =
            9    10    11     8
    %欠測値を無視した場合の平均値
    >> nanmean(dataNaN)
       (結果は省略)
    %欠測値を無視した場合の中央値
    >> nanmedian(dataNaN)
    %欠測値を無視した場合の最小値
    >> nanmin(dataNaN)
    %欠測値を無視した場合の標準偏差
    >> nanstd(dataNaN)
    %欠測値を無視した場合の和
    >> nansum(dataNaN)

微分積分

ピークピッキング & 零交差点を求める

  • 2次導関数(微分)によって連続値のピークを取り出す方法を確認します。以下を実行してください。
    X = [1 2 3 4 3 2 3 4 3 4 5 4 3 2 1]
    dX = diff(X)		%一次導関数を求める
    d2X = diff(dX)		%二次導関数を求める
    subplot(3,1,1),plot(X);
    subplot(3,1,2),plot(dX),xlim([0 15]);
    subplot(3,1,3),plot(d2X),xlim([0 15]);
    • 二次導関数がマイナスの値が、極大値(山のピーク)になっています。

添付ファイル: filemakeDeviation.m 1039件 [詳細]