僕は現在(2020年12月時点)大学4年生で、卒業研究をやっています。
自分の研究ではセンサーを使ってデータを取得し、それを数値解析する必要があります。
そこでMATLABを使っているのですが、非常に便利だな~と感じています。
その書き方や関数について、使っている中で学んだ基礎知識をまとめてみます。
「もっとこうした方がいいよ」等ありましたら、コメントでご教授いただけると嬉しいです。
基本
- セミコロン
- 出力
- 計算
- if
- for
セミコロン
MATLABでは、終わりにセミコロンをつけます。
出力
disp
という関数を使います。
使用例を以下に示します。
a = 10;
b = 'Hello world!';
disp(a); disp(b);
% 出力
% 10
% Hello world!
計算
自分が実際に使った基本的なものを挙げます。
- 和:
sum
- 平均:
mean
- 絶対値:
abs
- 切り上げ:
ceil
- 切り捨て:
floor
使用例を以下に示します。
a = [1 2 3]; b = -5; c = 3.2;
disp(sum(a));
disp(mean(a));
disp(abs(b));
disp(ceil(c));
disp(floor(c));
% 出力
% 6
% 2
% 5
% 4
% 3
if
if文の基本的な書き方は以下の通りです。
ある数値が正か負か0かを判定する例を示します。
num = 5;
if num > 0
disp('正の数です。');
elseif num == 0
disp('0です。');
else
disp('負の数です。');
end
% 出力
% 正の数です。
for
for文の基本的な書き方は以下の通りです。
1から10までの数値を足す例を示します。
sum = 0;
for I = 1 : 10
sum = sum + I;
end
disp(sum);
% 出力
% 55
ベストプラクティス
こちらの記事に全て書かれてあります。
[#matlab] Matlabのベスト・プラクティス
自分が気になったものだけ、以下に示します。
- camelCaseで書く
- 予約語とかぶらないように
- スペース推奨
camelCaseで書く
「hogeData」や「HogeData」のように単語の先頭を大文字にしてつなげる表記方法のことです。
キャメルケース (camel case)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
予約語と被らないように
当然のことですが、個人的に驚いたのが i
や j
が予約語だったことです。
i
と j
は虚数単位を表すようです。
以下に、公式ドキュメントから引用します。
i は関数なので、オーバーライドして変数として使うこともできます。ただし、複素数の計算に使用する場合は変数名に i および j を使用しないことを推奨します。
試してみたところ、例えばfor文のループで i
を使うことはできたんですが、本やネット記事を見ても大文字の I
を使っていることが多かったです。
複素数の計算ではないため問題ないとは思いますが、なんとなく気持ち悪いので僕もfor文のループでは大文字の I
を使うようにしました。
スペース推奨
昨年やっていた先輩や先生のコードは、なぜかギュウギュウに詰めて書いていました。
「MATLABでは詰めて書くのかな」と思いましたが、そんなことはないようです。
グラフ関連
- タイトル
- 軸ラベル
- 凡例
タイトル
title
という関数を使います。
使用例を以下に示します。
title('検証結果');
軸ラベル
xlabel
と ylabel
という関数を使います。
それぞれ横軸・縦軸にラベルをつけることができます。
使用例を以下に示します。
% 横軸ラベル
xlabel('Frequency [Hz]');
% 縦軸ラベル
ylabel('Amplitude spectrum [kPa]');
凡例
legend
という関数を使います。
使用例を以下に示します。
legend('従来手法', '提案手法1', '提案手法2');
その他の便利なもの
- 複数行
- 零行列
- データの結合
- ワークスペースからデータを取得
- 関数ハンドル
複数行
3つのピリオド ...
を使います。
使用例を以下に示します。
sum = 1 + 2 + 3 + 4 ...
+ 5 + 6 + 7 ...
+ 8 + 9 + 10;
disp(sum);
% 出力
% 55
零行列
零行列とは、成分が全て0の行列のことです。
zeros
という関数を使います。
使用例を以下に示します。
a = zeros(2); % 2行2列
b = zeros(2, 3); % 2行3列
disp(a); disp(b);
% 出力
% 0 0
% 0 0
%
% 0 0 0
% 0 0 0
データの結合
- 水平
- 垂直
水平
horzcat
という関数を使います。
使用例を以下に示します。
data1 = [1 2];
data2 = [3 4];
data = horzcat(data1, data2);
disp(data);
% 出力
% 1 2 3 4
垂直
vertcat
という関数を使います。
使用例を以下に示します。
data1 = [1 2];
data2 = [3 4];
data = vertcat(data1, data2);
disp(data);
% 出力
% 1 2
% 3 4
ワークスペースからデータを取得
evalin
という関数を使います。
第一引数は 'base'
として、第二引数にワークスペースにあるデータの名前を与えます。
使用例を以下に示します。
data = evalin('base', 'data');
関数ハンドル
@
をつけることで関数ハンドルを作成できます。
以下、公式ドキュメントから引用します。
関数ハンドルは、関数への関連付けを格納する MATLAB® データ型です。関数を間接的に呼び出すことで、呼び出し位置によらずに関数を呼び出すことができます。
使用例を以下に示します。
function out = hogeFunction1(data)
% 処理1
end
function out = hogeFunction2(data)
% 処理2
end
% f = @hogeFunction1;
f = @hogeFunction2;
out = f(data);
データに対して関数を選択的に適用したいときに使いました。
使わないものは上記のようにコメントアウトしていました。