「MATLAB」(マトラボ、Matrix Laboratoryに由来)は、アメリカのMathWorks社が開発している数値解析ソフトウェアの名称であり、かつその中で使われているプログラミング言語の名称でもあります。
プログラミング言語としてのMATLABは、特に行列や配列の処理に優れており、数値計算の分野で広く使用されています。
ソフトウェアとしてのMATLABは有料です。一方で、MATLAB言語にほぼ対応している無料のソフトウェアがいくつか存在します。
この授業では、そのような無料のソフトウェアの1つの「GNU Octave」(グヌー・オクターブ、単にOctaveともいう)を使用します。クラウド教育システムCESのプログラミング機能により、「JupyterLab」(ジュピター・ラボ)というWebブラウザ上で動作するプログラム対話型実行環境に搭載されたOctaveを使用しますので、パソコンへのインストールは不要です。
なお、興味のある方は https://www.gnu.org/software/octave/index からOctaveをインストールできるほか、新潟大学の教職員・学生であれば大学の包括ライセンス契約(今年度末まで)によりMATLABを無料で利用することができます。詳細は https://www.cais.niigata-u.ac.jp/gateway/news/2021/2021080501.php (学内限定ページ)を参照してください。
C言語のように変数の型の宣言が必要なプログラミング言語と違い、MATLABではPythonなどと同様に値を代入することで様々な型の変数を柔軟に扱うことができます。例えば、次のコードではaは数値、bは文字列を格納した変数になっています。
(数値の変数は、デフォルトで内部的には倍精度浮動小数点数(64ビット)として扱われます。文字列の記号はシングルクォーテーションでも構いません。)
また、数学でよく使う円周率π、ネイピア数eが定数として用意されています。虚数単位はi(またはj)です。
コードは、セルを選択した状態で[Shift]+[Enter]で実行できます。
a = 10
b = "Niigata University"
pi
e
i*i
j*j
a = 10 b = Niigata University ans = 3.1416 ans = 2.7183 ans = -1 ans = -1
コードは上から1行ずつ順に実行され、変数への代入や変数のみを書いた行ではその値が表示されます。行の終わりにセミコロンを付ければ、値を非表示にすることができます。結果が見づらくならないよう、値の表示が必要な行以外はセミコロンを付けるようにすることが望ましいです。
値の表示には、関数displayも使えます。関数printfを使えば、指定したフォーマットで表示することができます(整数は「%d」、小数は「%f」、文字列は「%s」、改行は「\n」です)。
a = 123.123456;
b = "Niigata University";
c = 10000;
display(a)
display(b)
display(c)
printf("a = %f\n", a)
printf("b = %s\n", b)
printf("%s has more than %d students.\n", b, c)
a = 123.12 b = Niigata University c = 10000 a = 123.123456 b = Niigata University Niigata University has more than 10000 students.
算術演算について、加算、減算、乗算、除算、べき乗にはそれぞれ「+」「-」「*」「/」「^」を使います。また、数学の関数sin、exp、logなどがデフォルトで使用可能です。
1+2
1-2
1*2
1/2
2^2
x = 10
sin(x)
exp(x)
log(x)
ans = 3 ans = -1 ans = 2 ans = 0.50000 ans = 4 x = 10 ans = -0.54402 ans = 22026.46579 ans = 2.3026
複数の要素(基本的に数値)を含む配列を扱うことができます。以下のコードでは、1次元の配列(数列)を扱っています。「%」は後ろをコメント(コードの実行に影響しない)にします。
a = [] %空の配列
b = [1 2 3 4 5] %半角スペースとカンマ
c = [1,2,3,4,5] %どちらで区切ってもよい
d = 1:10 %1から10まで、間隔が1の数列
e = 0:0.1:1 %0から1まで、間隔が0.1の数列
a = [](0x0) b = 1 2 3 4 5 c = 1 2 3 4 5 d = 1 2 3 4 5 6 7 8 9 10 e = Columns 1 through 7: 0.00000 0.10000 0.20000 0.30000 0.40000 0.50000 0.60000 Columns 8 through 11: 0.70000 0.80000 0.90000 1.00000
配列の要素(成分)は「変数名(index)」の形で参照し、自由に追加、変更、削除ができます。indexは0ではなく1から始まります。
x = [10,20];
display("最初のx:")
display(x)
display("xの第2成分:")
display(x(2))
x(3) = 30;
display("xに第3成分を追加:")
display(x)
x(1) = 0;
display("xの第1成分を変更:")
display(x)
x(2) = [];
display("xの第2成分を削除:")
display(x);
最初のx: x = 10 20 xの第2成分: 20 xに第3成分を追加: x = 10 20 30 xの第1成分を変更: x = 0 20 30 xの第2成分を削除: x = 0 30
1次元配列を利用して、関数のグラフを描画することができます。
手順:
以下のコードでは、$y=\sin x \ (0\leq x\leq 2\pi)$のグラフを描画しています。
plotの3番目の引数では、曲線の色とスタイルを指定しています。「r」を「b」「g」、「-o」を「-+」「--」「-^」にそれぞれ置き換えて、実行結果を確認してみてください。
x = 0:0.1:2*pi;
y = sin(x);
plot(x,y,'r-o')
好きな関数のグラフを描画してください。関数は複雑なものの方が望ましいです。曲線の色とスタイルは、インターネットで調べるなどして自由に設定してください。
(このNotebookファイル(拡張子ipynb)ではなく新しくNotebookファイルを作成して作業し、ファイルをダウンロードしてからCESのレポート提出機能で提出してください。)