>웹 프론트엔드 >프런트엔드 Q&A >JavaScript를 사용하여 역행렬을 찾을 수 있습니다.

JavaScript를 사용하여 역행렬을 찾을 수 있습니다.

王林
王林원래의
2023-05-09 14:33:07652검색

행렬 역산은 선형 대수학에서 중요한 계산입니다. 방정식 풀이, 변환 행렬 계산 등과 같은 수학적 계산 및 공학 실습에 자주 사용됩니다. 이 기사에서는 JavaScript 언어를 사용하여 행렬 반전 기능을 구현하는 방법을 소개합니다.

1. 선형 대수학의 기본 지식

자바스크립트에서 행렬을 반전시키는 방법을 소개하기 전에 먼저 선형 대수학에 대한 기본 지식을 이해해야 합니다.

  1. 행렬과 벡터

행렬은 m개의 행과 n개의 열로 구성된 직사각형 숫자 테이블입니다.

A = [a1,1 a1,2 ... a1, n

 a2,1 a2,2 ... a2,n
 ...  ...  ...  ...
 am,1 am,2 ... am,n]

벡터는 다음과 같이 표현될 수 있는 열 행렬입니다.

v = [v1

 v2
 ...
 vn]
  1. 행렬 덧셈과 곱셈

행렬 덧셈과 곱셈은 해당 요소 간의 연산입니다. 행렬 덧셈의 결과는 두 행렬의 해당 요소를 덧셈하는 것입니다. 행렬 곱셈의 결과는 첫 번째 행렬의 행과 두 번째 행렬의 열을 곱한 다음 합산됩니다.

  1. 행렬의 전치

행렬 전치(matrix transpose)는 행렬의 행과 열을 교환하여 얻은 새로운 행렬입니다. 예:

A = [1 2 3

 4 5 6]

A' = [1 4

  2 5
  3 6]
  1. 행렬의 역행렬

행렬의 역행렬은 행렬이고, 원래 행렬은 단위 행렬입니다). 단위행렬은 주대각선이 1이고 나머지 부분이 0인 행렬입니다.

행렬 A의 역행렬이 A^-1이면 A A^-1 = A^-1 A = I입니다.

정사각형 행렬만 반전될 수 있다는 점에 유의하세요.

2. JavaScript를 사용하여 역행렬 구현

JavaScript에서 역행렬을 구현하려면 몇 가지 기본적인 수학적 지식과 알고리즘이 필요합니다. 아래에서는 구체적인 구현 방법을 단계별로 소개하겠습니다.

  1. 행렬의 행렬식 찾기

행렬의 행렬식을 찾는 것은 역행렬을 푸는 첫 번째 단계입니다. 행렬식은 행렬의 대각선 요소의 곱에서 비대각선 요소의 곱을 뺀 값을 나타내는 숫자 값입니다. 예:

A = [1 2 3

 4 5 6
 7 8 9]

|A| = 1 5 9 + 2 6 7 + 3 4 8 - 3 5 7 - 2 4 9 - 1 6 8 = 0

행렬식을 풀기 위해 재귀를 사용할 수 있습니다. 행렬의 크기가 1x1인 경우 행렬식은 요소의 값과 같습니다. 행렬의 크기가 2x2인 경우 행렬식은 왼쪽 상단과 오른쪽 하단 요소의 곱에서 오른쪽 위 요소와 왼쪽 아래 요소의 곱, 행렬의 크기가 2x2보다 큰 경우 행렬식은 각 행의 첫 번째 요소와 나머지 요소로 구성된 하위 행렬의 행렬식의 합에 해당하는 요소를 곱한 것과 같습니다. 계수.

다음은 행렬식을 풀기 위한 JavaScript 코드입니다.

function det(A) {

var n = A.length;
if (n === 1) {
    return A[0][0];
} else if (n === 2) {
    return A[0][0] * A[1][1] - A[0][1] * A[1][0];
} else {
    var sum = 0;
    for (var i = 0; i < n; i++) {
        var submatrix = [];
        for (var j = 1; j < n; j++) {
            submatrix.push(A[j].slice(0, i).concat(A[j].slice(i + 1)));
        }
        var sign = Math.pow(-1, i);
        var cofactor = sign * det(submatrix);
        sum += A[0][i] * cofactor;
    }
    return sum;
}

}

  1. 행렬의 수반행렬을 찾습니다

행렬의 수행행렬(adjugate 행렬)은 행렬과 행렬식의 역수입니다. 수반 행렬의 각 요소는 행렬의 대수적 보조인자입니다.

예를 들어, 다음 3x3 행렬의 경우:

A = [1 2 3

 4 5 6
 7 8 9]

수반 행렬은 다음과 같습니다.

adj(A) = [ -3 6 -3

        6 -12  6
       -3  6 -3 ]

수반 행렬을 풀려면 다음 JavaScript 코드를 사용할 수 있습니다.

function adj(A) {

var n = A.length;
var adjA = [];
for (var i = 0; i < n; i++) {
    adjA[i] = [];
    for (var j = 0; j < n; j++) {
        var submatrix = [];
        for (var k = 0; k < n; k++) {
            if (k !== i) {
                submatrix.push(A[k].slice(0, j).concat(A[k].slice(j + 1)));
            }
        }
        var sign = Math.pow(-1, i + j);
        adjA[i][j] = sign * det(submatrix);
    }
}
return adjA;

}

  1. 행렬의 역행렬을 찾으려면

행렬의 역행렬을 찾으려면 먼저 수반행렬과 행렬식을 찾아야 합니다. 그런 다음 공식 A^-1 = adj( A) / |A|에 따라 역행렬을 얻을 수 있습니다. 즉, 행렬의 수반 행렬을 행렬식으로 나누어 역행렬을 얻을 수 있습니다.

다음은 역행렬을 풀기 위한 자바스크립트 코드입니다.

function inverse(A) {

var n = A.length;
var detA = det(A);
if (detA === 0) {
    console.log("Matrix is not invertible.");
    return null;
}
var adjA = adj(A);
var Ainv = [];
for (var i = 0; i < n; i++) {
    Ainv[i] = [];
    for (var j = 0; j < n; j++) {
        Ainv[i][j] = adjA[j][i] / detA;
    }
}
return Ainv;

}

  1. 테스트 코드

위의 역행렬 풀이용 자바스크립트 코드를 간단한 테스트를 통해 확인할 수 있습니다. 코드 정확성:

var A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
console.log("A = ");
console.log( A);

var Ainv = inverse(A);
console.log("Ainv = ");
console.log(Ainv);

var I = 숫자.dot(A, Ainv);
console.log ("A * Ainv = ");
console.log(I);

출력 결과는 다음과 같아야 합니다.

A =
[ [ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ] ]
Ainv =
[ [ -0.5000000000000001, 1, -0.5 ],
[ 1, -2, 1 ],
[ -0.5000000000000001, 1, -0.5 ] ]
A * =
[ [ 1, 0, 0 ],
[ 0, 0.9999999999999997, 0 ],
[ 3.3306690738754696e-16, 0, 1 ] ]

보시다시피 결과는 단위 행렬에 매우 가깝습니다.

3. 요약

역행렬을 푸는 것은 매우 중요한 수학적 계산입니다. 널리 사용되는 프로그래밍 언어인 JavaScript 언어는 역행렬을 푸는 기능을 쉽게 구현할 수 있습니다. 이 글에서는 행렬식, 수행행렬, 역행렬을 구하는 것을 포함하여 JavaScript 언어를 사용하여 역행렬을 푸는 구체적인 방법을 소개합니다. 이 기사가 수학적 계산을 수행해야 하는 JavaScript 개발자에게 도움이 되기를 바랍니다.

위 내용은 JavaScript를 사용하여 역행렬을 찾을 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.