Matlab演習のページ

当研究室ではプログラミング言語としてMatlabをオススメしております (理由: C言語より簡単だから).
しかし,初めて扱う方も多いと思いますので,研究室配属直後より演習会を開催していきます.

---------------------------------------------------------------------------------------------

[Step1] Maltabの基礎を始める

以下の資料を見ながら同じコマンドを打ち,画面に正しい出力が表示されるか確認して下さい.
それとともに,各コマンドの意味を体感してください.

[第1回目の配布資料] Matlab で学ぶ非線形科学(1)
[第2回目の配布資料] Matlab で学ぶ非線形科学(2)
[第3回目の配布資料] Matlab で学ぶ非線形科学(3)

カオスの基礎,第8回目の配布資料やその他演習に必要なデータは
鈴木研ゼミ用のページにあります.

第4~7回では,研究室メンバーが順番に演習内容を作成し,ゼミの担当講師になることで,
「教える立場」と「学ぶ立場」の両方を通じて,Matlabを深く理解していきます.

---------------------------------------------------------------------------------------------

[Step2] Maltab中級者への道

研究をやるぞ!と腹をくくらない者は度々「プログラミングがデキナ〜イ」と泣き言を安易に言いがちです.
しかし,プログラミングは絶対誰でもできます!
以下の事を行えば必ずできます.

■ プログラムを書き始める前の準備を念入りに!

プログラムを実際に打ち込む前に,プログラムの設計を念入りに行うべし!
プログラムを実行するとデータ(数字の配列)が上書きされたり,削除されたりしますが,
自分がやりたい処理を実現するには,どのようにデータを処理すれば良いのか明確にしておくとプログラミングがしやすいです.
映画でも,カット割りを考えてから実際に撮影するでしょ.イメージできますかね.
データ配列を変化させる手順をノートにスケッチしてみてください.
この作業はプログラミングではなく,もはやパズルと同じなので誰でもできます.

■ プログラムを書く際のテクニック

一行書いたら,セミコロン;を外してデータ(配列の中身)を画面出力してみてください.
ブレイクポイント(Matlabエディタ・ツールメニュー上の赤丸ボタン)を使って実行を途中で止める方法も有効です.
そして,正しくプログラミングできたかチェックします.
つまり,一行毎に正しくプログラミングできたか試しながら,全体を構成していきます.
ちゃんと動くプログラムを作れている確信が自信となり,楽しくプログラミングできます.
また,動きもしないプログラムを沢山書いても,後から修正が困難となりやる気が削がれます.

■ 自分なりのプログラミングの仕方を見つけましょう.

こういった方法は,本来自分で気がつくべきです.
でないと社会人として仕事をこなしていけなくなります.
俗にいう「指示待ち社員」から脱却できず,大きな仕事を任せてもらえないでしょう.
すると,ルーティンワークしかやらさせて貰えないつまらない平社員を長く続けることになってしまいます.
卒業研究では,そうならないためのスキルを磨く重要な機会である事を認識してください.
こういったスキルは,資格試験にありがちな型にハマった物とは異なるため,
皆がこの重要さに気がつきにくい分,他者との差がつきやすい要素だと思います.
是非,意識的にスキル向上を模索してください.


(少し説教臭くなったので,テクニカルな内容に戻します)

■ 関数の [戻り値] と [引数] について疑問は無いですか?

自作の関数は"Maltabエディタ"で作りますよね.その時,
   function [b1, b2] = test_kansu(a1, a2, a3) 
から書き始めたとしましょう. 

この関数を単独で実行する場合,"コマンドウィンドウ"で関数名を打ち込むのですよね.その時どのように打ちますか?
   >> [b1, b2] = test_kansu(a1, a2, a3)   ですか?それとも
   >> [tekitou1, tekitou2] = test_kansu(hikisu1, hikisu2, hikisu3)   ですか?   

答えはどっちでもいいんですよねー
但し条件があります.
・hikisu1, hikisu2, hikisu3が事前に定義されていること.
・自作関数内のa1, a2, a3と,これらhikisu1, hikisu2, hikisu3の配列サイズ(縦と横のサイズ)が合っていること.

これを満たしていれば,自作関数を使用する際に,引数&戻り値の名前は適当で構いません

もちろん自作関数は,"コマンドウィンドウ"で単独で実行することも出来ますし,"他の関数に組み込んで"使用することも出来ます.
基本的に長いプログラムは好まれないので,沢山の処理を一気に行いたい場合は,それを小分割した"関数"を自作します.
つまり,自作関数の内部に別の自作関数を使う事で,大きなプログラムにしていきます.
この方がバグチェックがし易いですし,プログラムを再利用する観点からも大変有用です.
是非,自作関数は小さく作って合体させるを心がけましょう.


■ 変数の [値(要素)] と [インデックス(番号)] を意識的に区別するとプログラミングし易い!

プログラミングをしていて,各変数が値だったのか,インデックスだったのか混乱することが多々あります.
そして,度々この混乱からプログラミングエラー(バグ)が生まれます.

次のプログラムを見て下さい. 配列Aの上位3つを画面出力する例です.
 >> A=[3 2 4 5 6 9 1 4 5 8];  % 要素数は10コ
 >> [A_v, A_i] = sort(A); % sort関数の第1戻り値,第2戻り値にはそれぞれ"値""インデクス"が代入されます.
 >> A(A_i(8:10))
 ans =
      6     8     9

このように, 配列Aの値には "_v" を付け,配列Aのインデックスには "_i" を付けることで混乱を防止できます.

さらに,配列Aが2次元配列の場合,
 A_Ti … 配列Aのタテ(T)のインデックスi
 A_Yi … 配列Aのヨコ(Y)のインデックスi
 A_Tv … 配列Aのタテ(T)の値v 
 A_Yv … 配列Aのヨコ(T)の値v
のように区別するのもオススメです.

使い方は,例えば,
 >> [A_Tv, A_Ti] = sort(A(:,3));  % 3列目(タテ)に関するsort
 >> [A_Yv, A_Yi] = sort(A(10,:));  % 10行目(ヨコ)に関するsort
のような場合が考えれます.

■ 各変数の中身は [1つの値] なのか [配列] なのかに注意しましょう.

例えば,
 >> A=[3 2 4 5 6 9 1 4 5 8];
 >> index = length(A); % 1つ値を代入
 >> Index = 1:length(A); % 配列を代入

のように実行すると,当然,画面出力は以下になりますよね.

 A(index) --> 8
 A(Index) --> 3 2 4 5 6 9 1 4 5 8

このように,
変数の中身が 1つの場合は “小文字”配列の場合は “大文字” にすると分かりやすいです

---------------------------------------------------------------------------------------------

[Step3] Maltabを使いこなす

自分の研究を進めるにあたり,たくさんプログラミングをすることになります.
プログラミングは英語と同じで,慣れが重要です
最初はプログラミングが遅くても,だんだん早くなりますので,
焦らず1行1行ゆっくり確実にプログラミングしていってください.


研究室のHomeに戻る