MATLAB(マトラボ)は、アメリカのMathWorks社が開発している数値解析ソフトウェア(有料)であり、多くの技術者や科学者が科学計算に使用されています。
また、MATLAB自身は特有の言語をもって、MATLAB言語という名称もあります。MATLAB言語を対応している無料のソフトも多数あります。 例えば、Scilab、GNU Octave、FreeMatなどのソフトの文法はMATLAB言語の文法は非常によく似ています。MATLABの言語で書いたコードをそのままで他のソフトで実行できることもあります。
本授業はGNU Octave(グヌー・オクターブ)を使って、MATLABのプログラミングを行います。
Fortran言語やC言語とは違い、変数のデータ型を宣言しなくでも使えます。 例えば、以下のコードで「a」、「b」、「c」という名前の変数を作成します。ここで、aは小数、bは文字列、cは配列です。
また、数値のある変数はディフォールトで倍精度の不動点小数です。即ち、変数の値は64bitに対応しています。
MATLAB言語の数値型のリストはこのページで確認できます。https://jp.mathworks.com/help/matlab/numeric-types.html
また、$\pi$, $e$等よく使用される数学の定数は用意されています。虚数単位はiとjになります。
a=10;
b='Niigata University';
c=[1,2,3];
pi
e
i*i
j*j
コードは一行づつ実行されます。各行の終わりに、「;」がある場合、その行の計算結果が表示されていません。「;」が付いてない場合、値が表示されます。
また、displayを使って、変数の値の表示することができます。指定されるフォマットで表示する場合、printf()を使います。
printfのフォマットの設定では、「%d」が整数、「%s」が文字列、「%f」が小数に対応してます。
a=123.123456;
b='Niigata University';
c=20000;
display(a)
display(b)
printf("a = %f\n",a)
printf("b = %s\n", b)
printf("%s has more than %d students.\n", b, c)
以下のコードで、変数$x$における$x^2$, $\sin(x)$, $\exp(x)$,$\log(x)$の関数の値を求めています。
x=10
x^2
sin(x)
exp(x)
log(x)
配列は同じデータ型の数値の集まりです。以下の例で配列の作成ができます。
x=[] %空の配列を作る。
x=[1,2,3,4,5]
y=1:10 %1から10まで間隔が1である数列を作る。
z=0:0.1:1 %0から1まで間隔が0.1である数列を作る。
また、配列の成分の値の修正、成分の追加と削除などの操作ができます。
x=[];
display('最初のx:')
display(x)
x(1)=10; x(2)=20; x(3)=30;
display('3つの値を加えったx:')
display(x)
x(2)=[]; %第2成分を削除します。
display('第2成分の値を削除した後のx:')
display(x);
x=0:0.1:2*pi;
y=sin(x);
plot(x,y,'-o')
以下の性質を持っている数列 {Fn} はフィボナッチ数列(フィボナッチすうれつ、Fibonacci sequence)と呼ばれます。
$n=10$までのフィボナッチ数列に対応しているMATLABの配列Fを作って、グラフを描画してください。
F=[1,1]
繰り返すの計算はfor文を使います。
以下の例文1では、kを1から10まで1ずつの整数の値を使って、計算式の処理を繰り返します。
例文1:
sum=0; for k=1:10 sum = sum +k; printf("1から %d までの整数の和は %d です。\n", k, sum ); end</blockquote> 上記のコードは1から10までの整数を足して、その結果をsumという変数に格納します。
sum=0;
for k=1:10
sum = sum +k;
printf("1から %d までの整数の和は %d です。\n", k, sum );
end
printf("変数 sum は %d です。\n", sum)
for文を利用して、n=100までのフィボナッチ数列の配列Fを作って、グラフを描画してください。
以下のコードでは、$a_n=(1+\frac{1}{n})^n$の数列のグラフを描いています。
この例をまねって、数学の微分積分の授業で学んだ数列3つを選んで、数列のグラフを描いてください。
a=[];
for n=1:20
a(n) = (1+1/n)^n;
end
plot(1:20, a, '-+')
grid on
format short
display(a)