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() は係数行列が特異(ランク落ち)の場合や正方行列でない場合にはエラーを発生させるため、事前に行列が正則であることを確認しておくことが重要です。
-
【Python入門】calendarモジュールで年・月のカレンダーを表示する方法
このチュートリアルでは、Pythonの標準ライブラリである calendar モジュールを使って、指定した年や月のカレンダーをコンソールに表示する方法を解説します。Pythonならわずか数行のコードで実装でき、必要な情報は「年」と「月」の数値だけです。 年間カレンダーを表示する方法 まずは、1年分のカレンダーを一括で表示する方法から見ていきましょう。以下の手順で実装できます。 calendar モジュールをインポートする 年を表す数値を変数に代入する calendar.calendar(year) を使ってカレンダーを出力する サンプルコード # calendarモジュールをインポート
-
Pythonで行列をZ字形に出力するプログラムの解説
本記事では、n×n の正方行列の要素を「Z」の字形に沿って出力する方法について、その考え方と実装の手順をわかりやすく解説します。 問題の概要 次数 n×n の正方行列が与えられたとき、その要素を Z 字形に従って順番に表示することが求められます。 Z 字形の走査は、以下の3つのステップで構成されます。 まず、最初の行(1行目)を左から右へ走査する 次に、主対角線(左上から右下へ向かう対角成分)を走査する 最後に、最終行(最後の行)を左から右へ走査する ここでは説明のため、あらかじめ用意した入力行列を使用して、コードの流れを示します。 サンプルコード arr = [[1, 2, 6, 9],