어머 일주일이 훌쩍 지나버렸네요…어쩌죠…음…다시 시작해야지요!
할 수 있어요!
오늘 봄비가 내리네요. 이 봄비의 물기가, 우리의 코딩공부 나무가 쑥쑥 성장하도록 끌어올려주기를 바래요.
넵! 성장의 운명을 다시 시작해 보겠습니다!
넵! 코딩 공부 정리해서 돌아올게요~ 쓩~^^*
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을 코드로 구현해 주셔서 감사합니다~^^*
그러고보니 우리가 동영상 강의 하나를 또 완성하였네요~^^*
내일은 또 어떤 새로운 도전이 우리를 기다리고 있을까요~^^*
음~^^* 내일이 기다려 지는군요~~^^*
네~^^* 꿈은 이루어 집니다~~^^*
댓글 남기기