【MATLAB】配列の演算

配列を使用した演算をする場合、C言語等ではfor文で1つ1つ中身を取り出して演算する必要がありますが、MATLABでは配列をそのまま演算に使用することができます。

ここでは、配列を使用した四則演算がどのようになるか色々見てみたいと思います。

スポンサーリンク

配列の加算

配列と数値の加算、配列と配列の加算の2パターンを見てみます。

配列と数値

配列と数値を足し算してみます。

配列のすべての数値に変数の数値が足されました。

今度は演算の順序を入れ替えてみます。

数値同士の足し算と同じく、順序を入れ替えても同じ結果になります。

配列と配列

配列同士で足し算をしてみます。

両配列の1番目の数値同士、2番目の数値同士、3番目の数値同士の足し算が行われます。

なお、足し算を行う配列のサイズが異なる場合は計算できずにエラーとなります。

配列の減算

同じく配列と数値の減算、配列と配列の減算の2パターンを見てみます。

配列と数値

配列と数値を引き算してみます。

配列のすべての数値から数値が引かれました。

今度は演算の順序を入れ替えてみます。

先ほどと符号が逆になりました。

左の数値4から配列の値3、2、1をそれぞれ引くという計算が行われます。

配列と配列

次に配列同士で引き算します。

足し算の時と同じく1番目の数値同士、2番目の数値同士、3番目の数値同士で計算が行われます。

なお、 足し算と同じく配列のサイズが異なる場合はエラーとなります。

配列の乗算

配列と数値の乗算 、配列と配列の乗算の2パターンを見てみます。はたして加算減算と同じになるのでしょうか?

配列と数値

配列と数値を掛け算してみます。

配列のすべての数値が4倍されました。今までと同じ動きです。

順序を入れ替えてみます。

同じ結果となりました。

配列と配列

それでは配列と配列の掛け算はどうでしょうか?

配列のサイズが一緒なのにエラーになりました。なぜ・・・?

その理由ですが、MATLABで四則演算に配列を指定すると、いわゆる線形代数の演算が行われるためです。

ちなみに線形代数とは、馴染みのある方にはおなじみの、馴染みのない方には全く馴染みが無いこんなものです。

\(\begin{bmatrix} 1&2 \\ 3&4 \end{bmatrix}\times\begin{bmatrix} 5&6 \\ 7&8 \end{bmatrix}=\begin{bmatrix} 19&22 \\ 43&50 \end{bmatrix} \)

つまり、ここで実施しようとした演算は以下の計算式を表しています。

\(\begin{bmatrix} 1&2&3 \end{bmatrix}\times\begin{bmatrix} 4&5&6\end{bmatrix} \)

線形代数の演算では左側の列のサイズと右側の行のサイズが一致していなければ掛け算できないのでエラーとなります。

以下のように1×3と3×1や3×1と1×3であればエラーになりません。その際の演算結果は行列式の結果になっていることが確認できます。

以下の1×3ベクトルと3×1ベクトルの掛け算と等価です。

\(\begin{bmatrix} 1&2&3\end{bmatrix}\times\begin{bmatrix}4\\5\\6\end{bmatrix}=32\)

下の3×1ベクトルと1×3ベクトルの掛け算と等価です。

\(\begin{bmatrix}1\\2\\3\end{bmatrix}\times\begin{bmatrix}4&5&6\end{bmatrix}=\begin{bmatrix}4&5&6\\8&10&12\\12&15&18\end{bmatrix} \)

それぞれの要素同士で乗算する方法

足し算引き算のようにそれぞれの要素同士で計算することはできないのか?という疑問が出てきますが、演算子に”*”ではなく、”.*”を使用することで可能となります。

配列の除算

最後に割り算ですが、線形代数ではベクトルや行列で割るという定義が無いため、もう少し複雑です。

配列と数値

配列と数値を割ってみます。

配列÷数値の場合はその他の演算と同じようになりました。

今度は演算順序を逆にしてみます。

エラーになってしまいました。掛け算の時のように4を1、2、3で割った値とはなりません。

配列と配列

配列と配列を割ってみます。

謎の数値が返ってきました。

この数値が何かというと1を割って4に、2を割ると5に、3を割ると6になる数値を求めるという意味になっているのですが、とはいえそのような数値は存在しないので、一番それっぽい数値になる値が演算されます。

実際に1,2,3を0.4156で割ってみると、近からず遠からずな値となります。

それぞれの要素同士で除算する方法

要素同士の割り算をしたい場合は掛け算の時と同じように./を使用します。

また、先ほどできなかった数値÷配列の計算ですが、./を使用することで可能になります。

配列を使用した演算のまとめ

配列を使用した演算を確認してみました。配列がそのまま使えるのでループ処理を入れる手間がなくなって便利な反面、掛け算や割り算は少し特殊な動作をします。

足し算引き算と同じように考えてスクリプトを書くとハマってしまうので注意して使用しましょう(経験済み)

コメント

タイトルとURLをコピーしました