行列演算その2

行列演算その2


行列の乗法

行列同士の掛け算は内積を使って行われる
内積とは各成分同士を掛け合わせ足す事(×してから+)。内積を計算するためには成分の数に対し条件がある
内積の答えはスカラーになる

  • 行列の積ABが定義できる為にはAの列数とBの行数は同じである必要がある
  • 答えはAの行数、Bの列数 の行列になる

このことから型の違う行列同士も上記の条件が揃えば掛け算する事ができる事がわかる

<行列積の計算方法>
matrixCalc2.jpg

サンプル:特殊な型行列同士の積の計算

unityではMatrix4x4以外の型行列の計算では自前で計算コードを自作する必要がある
主に処理速度が必要とされる場面以外は、4x4を利用するのが手軽であると予想される

行列A
2 -3 0
0 1 -2
-4 5 10

行列B
1
2
3

の場合の行列ABを求めよ

<サンプルコード>

using UnityEngine;
using System.Collections;

public class MatrixTest6 : MonoBehaviour {

  float[,] matrix3x3;
   float[] matrix1x3;
   float[] answeRx1x3;

  void Start () {

      matrix3x3 = new float[3,3];
       matrix1x3 = new float[3]; 
       answeRx1x3 = new float[3];

      matrix3x3[0,0] = 2;
       matrix3x3[0,1] = -3;
       matrix3x3[0,2] = 0;
       matrix3x3[1,0] = 0;
       matrix3x3[1,1] = 1;
       matrix3x3[1,2] = -2;
       matrix3x3[2,0] = -4;
       matrix3x3[2,1] = 5;
       matrix3x3[2,2] = 10;

      matrix1x3[0] = 1;
       matrix1x3[1] = 2;
       matrix1x3[2] = 3;

      for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
                   answeRx1x3[i] += matrix3x3[i,j] * matrix1x3[j];
           }
       }
       print(answeRx1x3[0]+" , "+answeRx1x3[1]+" , "+answeRx1x3[2]);

  }
}

-4 , -4 ,36
と出力される

行列の転置


行列演算の転置とは単純に行と列を入れ替える操作です
上付き文字のTは転置を表す記号。行列でこの文字が上付きで書かれていたら転置する事
どんな型行列でも、この操作は可能

行列A=
1 4 7
2 5 8
3 6 9

これを転置すると
行列AT=
1 2 3
4 5 6
7 8 9
となる

行列の型が特殊でも転置は可能
4
5
6
これを転置すると
4 5 6
になる

<転置するサンプルコード>

  Matrix4x4 matA,matAt;

  void Start () {
       matA.m00=1;
       matA.m01=4;
       matA.m02=7;
       matA.m03=0;
       matA.m10=2;
       matA.m11=5;
       matA.m12=8;
       matA.m13=0;
       matA.m20=3;
       matA.m21=6;
       matA.m22=9;
       matA.m23=0;
       matA.m30=0;
       matA.m31=0;
       matA.m32=0;
       matA.m33=0;

      matAt = Matrix4x4.zero;

      for (int i = 0; i < 4; i++) {
           for (int j = 0; j < 4; j++) {
               matAt[i,j] = matA[j,i];
           }
       }
   }


  • 最終更新:2013-12-04 17:34:20

このWIKIを編集するにはパスワード入力が必要です

認証パスワード