Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのnumpy.linalg.solve()で線形行列方程式(連立一次方程式)を解く方法

Pythonで線形行列方程式を解くには、numpy.linalg.solve()メソッドを使用します。このメソッドは、正則(フルランク)である線形行列方程式 ax = b の「厳密な」解 x を計算し、その解を返します。返り値の形状は b と同一です。

各パラメータの意味は以下の通りです。

  • 第1引数 a:係数行列
  • 第2引数 b:従属変数(目的変数)の値

手順

まず、必要なライブラリをインポートします。

import numpy as np

次に、array() メソッドを使って2つの2次元配列を作成します。ここでは、次の連立一次方程式を例に考えます。

x0 + 2 * x1 = 1
3 * x0 + 5 * x1 = 2

arr1 = np.array([[1, 2], [3, 5]])
arr2 = np.array([1, 2])

作成した配列を表示して確認します。

print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

両方の配列の次元数(ndim)をチェックします。

print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

続いて、両方の配列の形状(shape)を確認します。

print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

最後に、numpy.linalg.solve() メソッドを呼び出して、線形行列方程式の解を求めます。

print("\nResult...\n",np.linalg.solve(arr1, arr2))

完全なサンプルコード

import numpy as np

# array()メソッドで2つの2次元配列を作成
# 連立方程式 x0 + 2 * x1 = 1 および 3 * x0 + 5 * x1 = 2 を考える
arr1 = np.array([[1, 2], [3, 5]])
arr2 = np.array([1, 2])

# 配列を表示
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

# 両方の配列の次元数を確認
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

# 両方の配列の形状を確認
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

# numpy.linalg.solve()メソッドで線形行列方程式を解く
print("\nResult...\n",np.linalg.solve(arr1, arr2))

実行結果

Array1...
[[1 2]
[3 5]]

Array2...
[1 2]

Dimensions of Array1...
2

Dimensions of Array2...
1

Shape of Array1...
(2, 2)

Shape of Array2...
(2,)

Result...
[-1. 1.]

この結果から、x0 = -1、x1 = 1 が得られました。実際に元の方程式に代入すると、(-1) + 2 × 1 = 1、3 × (-1) + 5 × 1 = 2 となり、どちらの式も成立していることが確認できます。

なお、numpy.linalg.solve() は係数行列が特異(ランク落ち)の場合や正方行列でない場合にはエラーを発生させるため、事前に行列が正則であることを確認しておくことが重要です。

  1. 【Python入門】calendarモジュールで年・月のカレンダーを表示する方法

    このチュートリアルでは、Pythonの標準ライブラリである calendar モジュールを使って、指定した年や月のカレンダーをコンソールに表示する方法を解説します。Pythonならわずか数行のコードで実装でき、必要な情報は「年」と「月」の数値だけです。 年間カレンダーを表示する方法 まずは、1年分のカレンダーを一括で表示する方法から見ていきましょう。以下の手順で実装できます。 calendar モジュールをインポートする 年を表す数値を変数に代入する calendar.calendar(year) を使ってカレンダーを出力する サンプルコード # calendarモジュールをインポート

  2. Pythonで行列をZ字形に出力するプログラムの解説

    本記事では、n×n の正方行列の要素を「Z」の字形に沿って出力する方法について、その考え方と実装の手順をわかりやすく解説します。 問題の概要 次数 n×n の正方行列が与えられたとき、その要素を Z 字形に従って順番に表示することが求められます。 Z 字形の走査は、以下の3つのステップで構成されます。 まず、最初の行(1行目)を左から右へ走査する 次に、主対角線(左上から右下へ向かう対角成分)を走査する 最後に、最終行(最後の行)を左から右へ走査する ここでは説明のため、あらかじめ用意した入力行列を使用して、コードの流れを示します。 サンプルコード arr = [[1, 2, 6, 9],