매트릭스 자체를 어떻게 곱합니까?
-
19-09-2019 - |
문제
이것은 내가 지금까지 가지고있는 것이지만 그것이 옳다고 생각하지 않습니다.
for (int i = 0 ; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
matrix[i][j] += matrix[i][j] * matrix[i][j];
}
}
해결책
나는 당신이 그 자체로 매트릭스를 곱할 수 있다고 생각하지 않습니다.
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
product[i][j] = 0;
for (k = 0; k < 5; k++) {
product[i][j] += matrix[i][k] * matrix[k][j];
}
}
}
덜 순진한 매트릭스 곱셈을 사용 하더라도이 O 이외의 것 (n3) 알고리즘), 여전히 추가 스토리지가 필요합니다.
다른 팁
제안 : 숙제가 아닌 경우 자신의 선형 대수 루틴을 작성하지 않으면 많은 동료 검토 된 라이브러리를 사용하십시오.
이제 코드에 대해, 용어로 용어로 용어를하고 싶다면, 당신은 잘못하고 있습니다. 당신이하고있는 일은 각 값에 정사각형과 원래 값에 할당하는 것입니다 (n*n+n
또는 (1+n)*n
, 당신이 가장 좋아하는 것이 무엇이든)
그러나 대수적 의미에서 정통 매트릭스 곱셈을하고 싶다면 두 번째 매트릭스 열로 첫 번째 매트릭스 행의 스칼라 제품을 수행해야한다는 것을 기억하십시오 (또는 다른 방법으로는 확실하지 않습니다). .
for i in rows:
for j in cols:
result(i,j)=m(i,:)·m(:,j)
그리고 스칼라 제품 "·"
v·w = sum(v(i)*w(i)) for all i in the range of the indices.
물론이 방법을 사용하면 다음 단계에서 덮어 쓰는 값이 필요하기 때문에 제품을 제자리에 할 수 없습니다.
또한 Tyler McHenry의 의견을 조금 더 설명하여 행으로 행을 곱해야한다는 냉담함으로, "내부 치수"매트릭스의 올바른 용어인지 확실하지 않습니다. A
~이다 m x n
, B
~이다 n x o
그리고 A*C
~이다 m x o
), 당신의 경우, 매트릭스는 정사각형 인 경우에만 제곱 될 수 있습니다 (그는 그분).
예를 들어 매트릭스로 조금 플레이하고 싶다면 옥타브를 시도 할 수 있습니다. 매트릭스를 제곱하는 것은 쉽습니다 M*M
또는 M**2
.
그것은 내가 본 매트릭스 곱셈 정의가 아닙니다. 표준 정의는입니다
for (i = 1 to m)
for (j = 1 to n)
result(i, j) = 0
for (k = 1 to s)
result(i, j) += a(i, k) * b(k, j)
알고리즘을 일종의 의사 코드로 제공합니다. 이 경우 A는 AMXS 매트릭스이고 B는 SXN이고 결과는 AMXN이고 구역은 1로 시작합니다.
매트릭스를 제자리에 곱하면 값을 사용하기 전에 값을 덮어 쓰기 때문에 잘못된 답변이 나타납니다.
내가 매트릭스 수학을 한 지 너무 오래 걸렸습니다 (그리고 나는 조금만 그 일을했습니다). +=
연산자는 값을 가져옵니다 matrix[i][j]
그리고 그것에 값을 추가합니다 matrix[i][j] * matrix[i][j]
, 내가 생각하지 않는 것은 당신이하고 싶은 일입니다.
글쎄, 그것은 그것이하는 일이 행/열을 제곱 한 다음 행/열에 추가하는 것 같습니다. 그게 당신이 원하는 일입니까? 그렇지 않다면 변경하십시오.