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

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

May 09, 2023 pm 02:33 PM

逆行列は、線形代数における重要な計算です。連立方程式の解法や変換行列の計算など、数学的な計算やエンジニアリングの実践でよく使用されます。この記事では、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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

UseEffectとは何ですか?副作用を実行するためにどのように使用しますか? UseEffectとは何ですか?副作用を実行するためにどのように使用しますか? Mar 19, 2025 pm 03:58 PM

この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

怠zyなロードの概念を説明してください。 怠zyなロードの概念を説明してください。 Mar 13, 2025 pm 07:47 PM

怠zyな読み込みは、必要になるまでコンテンツの読み込みを遅延させ、初期負荷時間とサーバーの負荷を削減することにより、Webパフォーマンスとユーザーエクスペリエンスを改善します。

JavaScriptの高次関数とは何ですか?また、より簡潔で再利用可能なコードを書くためにどのように使用できますか? JavaScriptの高次関数とは何ですか?また、より簡潔で再利用可能なコードを書くためにどのように使用できますか? Mar 18, 2025 pm 01:44 PM

JavaScriptの高次関数は、抽象化、共通パターン、および最適化技術を通じて、コードの簡潔さ、再利用性、モジュール性、およびパフォーマンスを強化します。

JavaScriptでカリーはどのように機能し、その利点は何ですか? JavaScriptでカリーはどのように機能し、その利点は何ですか? Mar 18, 2025 pm 01:45 PM

この記事では、JavaScriptのカレーについて説明します。これは、マルチアーグメント関数を単一argument関数シーケンスに変換する手法です。 Curryingの実装、部分的なアプリケーションなどの利点、実用的な用途、コード読み取りの強化を調査します

usecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか? usecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか? Mar 19, 2025 pm 03:59 PM

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

React和解アルゴリズムはどのように機能しますか? React和解アルゴリズムはどのように機能しますか? Mar 18, 2025 pm 01:58 PM

この記事では、Virtual DOMツリーを比較してDOMを効率的に更新するReactの調整アルゴリズムについて説明します。パフォーマンスの利点、最適化技術、ユーザーエクスペリエンスへの影響について説明します。

イベントハンドラーのデフォルトの動作をどのように防止しますか? イベントハンドラーのデフォルトの動作をどのように防止しますか? Mar 19, 2025 pm 04:10 PM

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。

制御されたコンポーネントと制御されていないコンポーネントの利点と短所は何ですか? 制御されたコンポーネントと制御されていないコンポーネントの利点と短所は何ですか? Mar 19, 2025 pm 04:16 PM

この記事では、予測可能性、パフォーマンス、ユースケースなどの側面に焦点を当てた、Reactの制御されていないコンポーネントと制御されていないコンポーネントの利点と欠点について説明します。それらを選択する際に考慮することを要因についてアドバイスします。

See all articles