2022年度プログラミング演習A・B

第3回:MATLAB入門3

0. 前々回と前回の補足

0.1. 変数の命名ルール

MATLABにおける変数の名前には、次のようなルールがあります。

0.2. 行列の行や列へのアクセス

前回の授業資料で行列の成分へのアクセスについて説明しましたが、次のようにすると行列の行や列へのアクセスができます。

0.3. 乱数行列

特殊な行列に関して、次のようにすると乱数(一様乱数)から成る行列を扱うことができます。

※前回紹介したzerosとonesも、引数2つの使い方に加えて引数1つの使い方があります。

1. if文による条件分岐

1.1. if文の基本

プログラムの中で条件分岐を行いたい場合には、if文を使います。

if文の最も基本的な書き方は、次の通りです。

if 条件式
    条件式が真の場合の処理
    …
end

ifとendの間の行のインデントは必須ではありませんが、コードの見やすさのために入れるべきです。インデントは[Tab]で入力すると楽です(半角スペース数個でも可)。

([Ctrl]+[Enter]を使うと、セルの移動を伴わずにコードの実行ができます。同じセルを複数回実行する際に便利です。)

1.2. 条件式の書き方

条件式で使用できる関係演算子は、次の表の通りです。

関係演算子 意味
== 等しい
>= 以上
> より大きい
<= 以下
< より小さい
~=
!= (Octaveでは可)
等しくない

行列AとBのサイズが異なる場合にはA == Bはエラーになるため、そのような可能性がある場合は代わりにisequal(A,B)を使います。

条件式で使用できる論理演算子は、次の表の通りです。

論理演算子 意味
&&
(&は非推奨)
かつ
| |
(|は非推奨)
または
~(条件式)
!(条件式) (Octaveでは可)
でない

必要に応じて、演算の優先順位を変えるために半角の括弧を使います。また、次の例には特に注意が必要です。

1.3. elseとelseifの使用

if文ではオプションとして、次のようにelseとelseif(複数も可)を使うことができます。

if 条件式
    条件式が真の場合の処理
    …
else
    条件式が偽の場合の処理
    …
end
if 条件式1
    条件式1が真の場合の処理
    …
elseif 条件式2
    条件式1が偽かつ条件式2が真の場合の処理
    …
else
    条件式1が偽かつ条件式2が偽の場合の処理
    …
end

演習1

if文を使って、点数(0以上100以下の整数)が与えられたときに次の表に従った評価を表示するコードを書いてください。

点数 評価
90点~100点
80点~89点
70点~79点
60点~69点
0点~59点 不可

2. for文による繰り返し

2.1. for文の基本

プログラムの中で特定の処理を決まった回数繰り返したい場合には、for文を使います。

for文の基本的な書き方は、次の通りです。

for 変数 = 横ベクトル
    繰り返して行う処理
    …
end

ここで、「変数」としては通常、値の格納に使用されていない変数を使います。プログラミング全般でよくあるiとjを使うこともできますが、その場合にはiとjは虚数単位としての役割を失います。

「横ベクトル」としては、a:ba:step:bの形の横ベクトルを使うことが多いです。

2.2. breakとcontinueの使用

for文による繰り返しを途中で強制的に終了したい場合には、if文の中でbreakを使います。

残りの処理をスキップして繰り返しを強制的に次に進めるcontinueも使用可能です。

演習2

for文を使って、条件「nの階乗が10000以上」を満たす最小のnとその階乗の値を求めてください。ただし、関数factorialを使用しないこと。

3. while文による繰り返し

3.1. while文の基本

プログラムの中で特定の処理をある条件が成り立つ間繰り返したい場合には、while文を使います。

while文の書き方は、次の通りです。

while 条件式
    条件式が真の間繰り返して行う処理
    …
end

for文と同様に、コードブロック内でif文と組み合わせてbreakとcontinueが使用可能です。

3.2. 無限ループ

while文がfor文と最も違うのは、繰り返しの回数が不定であることです。場合によっては無限ループ(繰り返しがいつまでも終わらない状態)が発生してしまうため、十分に注意する必要があります。

無限ループに陥ってしまった場合は、画面上の四角ボタンでカーネルの中断を試み、それがダメなら丸い矢印のボタンでカーネルを再起動すればよいです。

条件式としてtrueを使えば意図的に無限ループを発生させることができますが、必ずbreakと併用して処理が有限回の反復で終わるようにしましょう。

演習3

while文を使って、条件「nの階乗が10000以上」を満たす最小のnとその階乗の値を求めてください。ただし、関数factorialを使用しないこと。

4. 関数の定義

4.1. 関数とは

プログラミングにおける関数とは、基本的に「与えられた値(引数)に対して特定の処理を行ってその結果(戻り値)を返す」ような命令のことです。

MATLABでは様々な関数が用意されており、状況に合ったものを使用すると非常に便利です。

4.2. 関数定義の方法

MATLABでは、ユーザー自らが新しい関数を定義することができます。

関数定義の基本的な書き方は、次の通りです。

function 戻り値の変数 = 関数名(引数の変数)
    関数の処理(引数の変数を使って戻り値の変数に値を格納する)
    …
end

代入の処理の行末にセミコロンを付けないと、関数の呼び出し時に余計な値が表示されるため注意してください。

引数を複数持つ関数も定義できます。

あまり使う機会はないですが、引数や戻り値を持たない関数も定義できます。

演習4

新しく何かしらの関数を定義してください。定義した関数を呼び出す例も付けてください。

第3回レポート課題

演習1~演習4に取り組んでください。