ホームページ > ウェブフロントエンド > フロントエンドQ&A > JavaScript を使用して逆行列を見つけることができます

JavaScript を使用して逆行列を見つけることができます

王林
リリース: 2023-05-09 14:33:07
オリジナル
682 人が閲覧しました

逆行列は、線形代数における重要な計算です。連立方程式の解法や変換行列の計算など、数学的な計算やエンジニアリングの実践でよく使用されます。この記事では、JavaScript 言語を使用して行列の反転関数を実装する方法を紹介します。

1. 線形代数の基礎知識

JavaScript で逆行列を求める方法を紹介する前に、まず線形代数の基礎知識を理解する必要があります。

  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. 行列の加算と乗算

行列の加算と乗算は、対応する要素間の演算です。行列加算の結果は、2 つの行列の対応する要素の加算です。行列の乗算の結果は、最初の行列の行と 2 番目の行列の列を乗算し、合計したものになります。

  1. 行列の転置

行列の転置(行列転置)とは、行列の行と列を入れ替えて得られる新しい行列です。例:

#A = [1 2 3

 4 5 6]
ログイン後にコピー

A' = [1 4

  2 5
  3 6]
ログイン後にコピー

    逆行列
行列の逆行列であり、元の行列と乗算した結果が単位行列です。恒等行列は、主対角に 1 があり、その他の部分に 0 がある行列です。

行列 A の逆行列が A^-1 の場合、A

A^-1 = A^-1 A = I。

反転できるのは正方行列のみであることに注意してください。

2. JavaScript を使用して逆行列を実装する

JavaScript で逆行列を実装するには、基本的な数学的知識とアルゴリズムが必要です。以下、具体的な実装方法をステップごとに紹介していきます。

    行列の行列式を見つける
行列の行列式を見つけることは、逆行列を解く最初のステップです。行列式は、行列の対角要素の積から非対角要素の積を引いた値を表す数値です。例:

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;
}
ログイン後にコピー

}

    随伴行列の検索行列の
行列の随伴行列 (随伴行列) は、行列の逆行列とその行列式の積です。随伴行列の各要素は行列の代数余因子です。

たとえば、次の 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;
ログイン後にコピー

}

    逆行列を求める
逆行列を求めるには、まず随伴行列と行列の行列式を見つけてから、式 A に従ってください。 ^-1 = adj(A) / |A|、つまり行列 逆行列は、随伴行列を行列式で割ることによって得られます。

次は、逆行列を解くための JavaScript コードです:

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;
ログイン後にコピー
}

    テスト コード
簡単なテスト コードを使用して、逆行列を解くための上記の JavaScript コードが正しいかどうかを検証できます。

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 = numeric.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 * Ainv =
[ [ 1, 0, 0 ],
[ 0, 0.9999999999999997, 0 ],
[ 3.3306690738754696e -16, 0, 1 ] ]

ご覧のとおり、結果は単位行列に非常に近くなります。

3. 概要

逆行列を解くことは、非常に重要な数学的計算です。人気のあるプログラミング言語として、JavaScript 言語は逆行列を解く機能を簡単に実装できます。この記事では、行列式、随伴行列、逆行列を求めるなど、JavaScript言語を使って逆行列を解く具体的な方法を紹介します。この記事が、数学的計算を実行する必要がある JavaScript 開発者にとって役立つことを願っています。

以上がJavaScript を使用して逆行列を見つけることができますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート