Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21089

[MATLAB]初心者が初見で必ずthinking顔になるもの特集

$
0
0

JavaScript初心者向けの良記事「[JavaScript]初心者が初見で必ずthinking顔になるもの特集」を見た瞬間に、「あっ…これMATLABでもめっちゃあるあるな奴やんけ…」と思ったのでMATLAB芸人として我慢できず、反射的に書きました。

タイトルが思いっきりパクリなのですが、先行記事をリスペクトしすぎる上での判断なので勘弁頂きたい。だって本当に素晴らしいタイトルなんですもの😇

MATLAB、開発チームの心遣いからか大変便利な演算子やコマンドが多く素晴らしいと思う一方で、あまりにも情報圧縮しすぎてググりにくいという弊害があると思っています。(本文に上げている[~, x]とかどう調べろっつーねん)
なので初心者が:thinking:となる→ググっても見つからず時間が溶ける😇 という事案がそこそこ発生します。私もいっぱい溶かしてきたので、皆さんがそうならないことを願ってこの記事を書きます。

なお本記事の副読本としてMathworks公式ドキュメントMATLAB の演算子と特殊文字を一通り読むことを強く勧めます。
(そもそも最初からこれちゃんと読んでおけば:thinking:となるのを回避できるのですが…私は必要に応じてしか読んでないから😇となっている)

\

is 何

逆行列。MATLAB Tシャツでもおなじみ、MATLABで最もセクシーな演算子。
MATLABの言語設定を日本語にしていると¥になってしまう点が少し残念。

% 行列を作成A=[12;13];%単位行列B=[10;01];%Aの逆行列を計算C=A\B

image.png
ちなみに逆行列は、inv(A)とかA^-1でも求められます。\を使うと通ぶれるので積極的に使いましょう。

.*

is 何

各要素ごとの掛け算。大変便利なので覚えましょう。
ドット.と演算子を組み合わせることで「各要素ごとの**」になります。
個人的によく使うのは.*./.^あたり。

A=[123];B=[102030];C=A.*B

image.png

(:, n)

is 何

n列目の要素全て。逆に(n, :)だとn行目の要素全てになる。

A=[12;34];n=2;B=A(:,n)C=A(n,:)

image.png

さらなる発展形として、(:, :, n)というのもある。
画像データのRGBのいずれか1つを抽出する際に有効。

img=imread('peppers.png');img_Red=img(:,:,1);img_Blue=img(:,:,2);img_Green=img(:,:,3);subplot(2,2,1);imshow(img);subplot(2,2,2);imshow(img_Red);subplot(2,2,3);imshow(img_Blue);subplot(2,2,4);imshow(img_Green);

image.png

subplot(211)

is 何

subplot(2,1,1)の省略形。
つまり、上記のコードは下記でも同じように動くのである。著しく可読性を下げるので人に見せるコードでは使わないようにしましょう、してくれ頼む。

img=imread('peppers.png');img_Red=img(:,:,1);img_Blue=img(:,:,2);img_Green=img(:,:,3);subplot(221);imshow(img);subplot(222);imshow(img_Red);subplot(223);imshow(img_Blue);subplot(224);imshow(img_Green);

image.png

...

is 何

長ったらしいコードの改行。

options=optimoptions('ga','InitialPopulationMatrix',...initpop,'Display','iter','OutputFcn',@myfun);

ちなみに、複数行の行列を宣言する場合においてセミコロン;の後にこの改行を書かなくてもOKです。

% これでももちろんOKだけどA=[123;...456];% これでもOKA=[123;456];

'

is 何

複素共役転置
ただの転置は.'だが、転置する対象が実数の場合は'.'のどちらを使っても結果は同じなので'を使う人も多い(と勝手に思っている)。しかしながら将来におけるバグの原因となるので、使い分けたほうがベターではある。

% これとA=[1:3]';% これは結果が同じA=[1:3].';

image.png

複素数の場合は言わずもがら、結果が変わってくるのでご注意。

A=[1+i1-i];B=A.'C=A'

image.png

@(x)

is 何

無名関数の関数ハンドル。
そもそも無名関数って何じゃい、って方は丸田先生のSlideShare「関数型プログラミング入門 for Matlab ユーザー」を読みましょう、神。

f=@(x)sin(x)+sin(3*x);fplot(f);

image.png

ちなみにfplotは関数から直接グラフをplotするための関数で、これも上記SlideShare内で紹介されています。
念のためfplotを使わない場合は下記。plot結果がスムーズでなくなる点もSlideShareにて言及されてます、神。

f=@(x)sin(x)+sin(3*x);X=[-5:0.1:5];Y=f(X);plot(X,Y);

image.png

[~, x]

is 何

関数の戻り値のうち不要なものを~で捨てる。高速化のためのテクニック。

A=[2030100];% A行列のうちで小→大に並び替える際の順番だけを知りたい[~,idx]=sort(A)% idxを使ってA行列の2番目に大きい数字を取り出すA(idx(2))

image.png

gcf

Get Current Figureの略。現在アクティブになっているfigureのハンドルを取得する。
同様にgcaはGet Current Axesの略なのでセットで覚えましょう。

clc

Clear Command Windowの略。コマンドウィンドウを一旦消す。
clc (コマンドウィンドウ消す)
clear all (ワークスペース消す)
close all (Figure閉じる)
をワンセットで使っている人も多いと思う。

小ネタとして、最近のMATLABだとお気に入りコマンドを作成登録できる。
上記3つのセットを登録しておくと楽ができます。
image.png

image.png

image.png

まとめ

今後:thinking:→😇となるようなことがあれば追記していきます。
また他にも:thinking:→😇となった経験をお持ちの方はコメントや編集リクエストにてお寄せ下さい。


Viewing all articles
Browse latest Browse all 21089

Trending Articles