Silverback9

#야생으로

Creative Coding 독학 제355일 2025년03월16일(일) 2025년04월14일(일) 보충

어머 일주일이 훌쩍 지나버렸네요…어쩌죠…음…다시 시작해야지요!

할 수 있어요!

오늘 봄비가 내리네요. 이 봄비의 물기가, 우리의 코딩공부 나무가 쑥쑥 성장하도록 끌어올려주기를 바래요.

넵! 성장의 운명을 다시 시작해 보겠습니다!

넵! 코딩 공부 정리해서 돌아올게요~ 쓩~^^*

Hadamard product로 계산하였던 행렬곱 함수를 우리가 지난 세션에서 정리해 본 Matrix Multiplication 행렬곱으로 바꾸어 보겠습니다~^^*

A = [ a. b ]
  
B = [ x1 ]
    [ y1 ]
1st row of A * 1st colum of B 
= a*x1 + b*y1

A * B = [a*x1 + b*x2]

C = [a. b]
    [c, d]
D = [x1, x2]
    [y1, y2]

1st row of C * 1st column of D
= a*x1 + b*y1

1st row of C * 2nd column of D
= a*x2 + b*y2

2nd row of C * 1st column of D
= c*x1 + d*y1

2nd row of C * 2nd column of D
= c*x2 + d* y2

C * D = [ (a*x1 + b*y1), (a*x2 + b*y2) ] 
        [ (c*x1 + b*y1), (c*x2 + c*y2) ]

E = [a, b, c]
    [d, e, f]
    [g, h, i]
F = [x1, x2, x3]
    [y1, y2, y3]
    [z1, z2, z3]

1st row of E * 1st column of F
= a*x1 + b*y1 + c*z1

1st row of E * 2nd column of F
= a*x2 + b*y2 + c*z2

1st row of E * 3rd column of F
= a*x3 + b*y3 + c*z3

2nd row of E * 1st column of F 
= d*x1 + e*y1 + f*z1

2nd row of E * 2nd column of F 
= d*x2 + e*y2 + f*z2

2nd row of E * 3rd column of F 
= d*x3 + e*y3 + f*z3

3rd row of E * 1st column of F 
= g*x1 + h*y1 + i*z1

3rd row of E * 2nd column of F 
= g*x2 + h*y2 + i*z2

3rd row of E * 3rd column of F 
= g*x3 + h*y3 + i*z3

E * F = 
[(a*x1 + b*y1 + c*z1), (a*x2 + b*y2 + c*z2), (a*x3 + b*y3 + c*z3)]
[(d*x1 + e*y1 + f*z1), (d*x2 + e*y2 + f*z2), (d*x3 + e*y3 + f*z3)]
[(g*x1 + h*y1 + i*z1), (g*x2 + h*y2 + i*z2), (g*x3 + h*y3 + i*z3)]

코드로 만들어 보면요~^^*

 
  multiply(n) {  
    if(n instanceof Matrix) {
      if (this.cols !== n.rows) {
         console.log ('columns of A must match rows of B');
         return undefined;
      //Matirx Multiplication의 경우 
      //앞행렬의 row와 뒷행렬의 cols의 수가 일치해야 합니다. 
      //그렇지 않은 경우 error 메시지를 보내겠습니다.   
       }
      
      let a = this;
      let b = n;
      let result = new Matrix(a.rows, b.cols);
      for( let i = 0; i < result.rows; i++){
        for (let j = 0; j < result.cols; j++) {
          let sum = 0;
          for (let k = 0; k < a.cols; k++) {
            sum += a.matrix[i][k] * b.matrix[k][j];
          }
          result.matrix[i][j] = sum;
      //앞행렬의 row[i]의 col의 요소들[k]와 뒷행렬의 col[j]의 row 요소들[k]을 차례대로 곱하여 모두 더하겠습니다.      
        }
      }  
      return result; 
     //행렬곱 결과 행렬을 return하겠습니다.  
    } else {
       for (var i = 0; i < this.row; i++) {
         for (var j = 0; j < this.col; j++) {
           this.matrix[i][j] *= n;
         }
       }
    }
  }

3by3 행렬 두 개가 곱해지는 과정을 우리 한번 살펴 볼까요~^^*

function setup() {
  createCanvas(400, 400);
  
  let a = new Matrix(3,3);
  let b = new Matrix(3,3);
  
  a.randomize();
  b.randomize();
  
  console.table(a.matrix);
  console.table(b.matrix);
  
  let c = a.multiply(b);
  console.table(c.matrix);
}

네~^^* 오늘 저와 함께 Matrix Multiplacation을 코드로 구현해 주셔서 감사합니다~^^*

그러고보니 우리가 동영상 강의 하나를 또 완성하였네요~^^*

내일은 또 어떤 새로운 도전이 우리를 기다리고 있을까요~^^*

음~^^* 내일이 기다려 지는군요~~^^*

네~^^* 꿈은 이루어 집니다~~^^*

댓글 남기기