SciPy - Linalg

SciPy dibuat menggunakan yang dioptimalkan ATLAS LAPACK dan BLASperpustakaan. Ia memiliki kemampuan aljabar linier yang sangat cepat. Semua rutinitas aljabar linier ini mengharapkan objek yang dapat diubah menjadi array dua dimensi. Output dari rutinitas ini juga berupa larik dua dimensi.

SciPy.linalg vs NumPy.linalg

Sebuah scipy.linalg berisi semua fungsi yang ada di numpy.linalg. Selain itu, scipy.linalg juga memiliki beberapa fungsi lanjutan lain yang tidak ada di numpy.linalg. Keuntungan lain menggunakan scipy.linalg daripada numpy.linalg adalah selalu dikompilasi dengan dukungan BLAS / LAPACK, sedangkan untuk NumPy ini opsional. Oleh karena itu, versi SciPy mungkin lebih cepat tergantung pada bagaimana NumPy diinstal.

Persamaan linear

Itu scipy.linalg.solve fitur memecahkan persamaan linier a * x + b * y = Z, untuk nilai x, y yang tidak diketahui.

Sebagai contoh, asumsikan bahwa diinginkan untuk menyelesaikan persamaan simultan berikut.

x + 3y + 5z = 10

2x + 5y + z = 8

2x + 3y + 8z = 3

Untuk menyelesaikan persamaan di atas untuk nilai x, y, z, kita dapat mencari vektor solusi menggunakan invers matriks seperti gambar di bawah ini.

$$ \ begin {bmatrix} x \\ y \\ z \ end {bmatrix} = \ begin {bmatrix} 1 & 3 & 5 \\ 2 & 5 & 1 \\ 2 & 3 & 8 \ end {bmatrix} ^ {-1} \ begin {bmatrix} 10 \\ 8 \\ 3 \ end {bmatrix} = \ frac {1} {25} \ begin {bmatrix} -232 \\ 129 \\ 19 \ end {bmatrix} = \ begin {bmatrix} -9.28 \\ 5.16 \\ 0.76 \ end {bmatrix}. $$

Namun, lebih baik menggunakan linalg.solve perintah, yang bisa lebih cepat dan lebih stabil secara numerik.

Fungsi menyelesaikan mengambil dua input 'a' dan 'b' di mana 'a' mewakili koefisien dan 'b' mewakili nilai sisi kanan masing-masing dan mengembalikan array solusi.

Mari kita perhatikan contoh berikut.

#importing the scipy and numpy packages
from scipy import linalg
import numpy as np

#Declaring the numpy arrays
a = np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]])
b = np.array([2, 4, -1])

#Passing the values to the solve function
x = linalg.solve(a, b)

#printing the result array
print x

Program di atas akan menghasilkan keluaran sebagai berikut.

array([ 2., -2., 9.])

Menemukan Penentu

Determinan dari matriks persegi A sering dilambangkan sebagai | A | dan merupakan besaran yang sering digunakan dalam aljabar linier. Di SciPy, ini dihitung menggunakan filedet()fungsi. Dibutuhkan matriks sebagai input dan mengembalikan nilai skalar.

Mari kita perhatikan contoh berikut.

#importing the scipy and numpy packages
from scipy import linalg
import numpy as np

#Declaring the numpy array
A = np.array([[1,2],[3,4]])

#Passing the values to the det function
x = linalg.det(A)

#printing the result
print x

Program di atas akan menghasilkan keluaran sebagai berikut.

-2.0

Nilai Eigen dan Vektor Eigen

Masalah eigenvalue-eigenvector adalah salah satu operasi aljabar linier yang paling umum digunakan. Kita dapat menemukan nilai Eigen (λ) dan vektor Eigen yang sesuai (v) dari matriks persegi (A) dengan mempertimbangkan hubungan berikut:

Av = λv

scipy.linalg.eigmenghitung nilai eigen dari masalah nilai eigen biasa atau umum. Fungsi ini mengembalikan nilai Eigen dan vektor Eigen.

Mari kita perhatikan contoh berikut.

#importing the scipy and numpy packages
from scipy import linalg
import numpy as np

#Declaring the numpy array
A = np.array([[1,2],[3,4]])

#Passing the values to the eig function
l, v = linalg.eig(A)

#printing the result for eigen values
print l

#printing the result for eigen vectors
print v

Program di atas akan menghasilkan keluaran sebagai berikut.

array([-0.37228132+0.j, 5.37228132+0.j]) #--Eigen Values
array([[-0.82456484, -0.41597356], #--Eigen Vectors
       [ 0.56576746, -0.90937671]])

Dekomposisi Nilai Singular

Dekomposisi Nilai Singular (SVD) dapat dianggap sebagai perpanjangan dari masalah nilai eigen ke matriks yang tidak persegi.

Itu scipy.linalg.svd memfaktorkan matriks 'a' menjadi dua matriks kesatuan 'U' dan 'Vh' dan array 1-D 's' dengan nilai-nilai singular (nyata, non-negatif) sehingga a == U * S * Vh, di mana 'S 'adalah matriks angka nol yang sesuai dengan diagonal utama' s '.

Mari kita perhatikan contoh berikut.

#importing the scipy and numpy packages
from scipy import linalg
import numpy as np

#Declaring the numpy array
a = np.random.randn(3, 2) + 1.j*np.random.randn(3, 2)

#Passing the values to the eig function
U, s, Vh = linalg.svd(a)

# printing the result
print U, Vh, s

Program di atas akan menghasilkan keluaran sebagai berikut.

(
   array([
      [ 0.54828424-0.23329795j, -0.38465728+0.01566714j,
      -0.18764355+0.67936712j],
      [-0.27123194-0.5327436j , -0.57080163-0.00266155j,
      -0.39868941-0.39729416j],
      [ 0.34443818+0.4110186j , -0.47972716+0.54390586j,
      0.25028608-0.35186815j]
   ]),

   array([ 3.25745379, 1.16150607]),

   array([
      [-0.35312444+0.j , 0.32400401+0.87768134j],
      [-0.93557636+0.j , -0.12229224-0.33127251j]
   ])
)