本文簡要介紹 python 語言中 scipy.linalg.solve_circulant
的用法。
用法:
scipy.linalg.solve_circulant(c, b, singular='raise', tol=None, caxis=-1, baxis=0, outaxis=0)#
為 x 求解 C x = b,其中 C 是循環矩陣。
C 是與向量 c 相關的循環矩陣。
該係統通過在傅裏葉空間中進行除法求解。計算如下:
x = ifft(fft(b) / fft(c))
其中 fft 和 ifft 分別是快速傅裏葉變換及其逆變換。對於大向量 c,這比使用完整循環矩陣求解係統要快得多。
- c: array_like
循環矩陣的係數。
- b: array_like
a x = b
中的右側矩陣。- singular: str,可選
此參數控製如何處理近奇異循環矩陣。如果單數是“raise”,循環矩陣接近奇異,ascipy.linalg.LinAlgError被提出。如果單數是“lstsq”,返回最小二乘解。默認為“raise”。
- tol: 浮點數,可選
如果循環矩陣的任何特征值的絕對值小於或等於 tol,則認為該矩陣接近奇異。如果未給出,則 tol 設置為:
tol = abs_eigs.max() * abs_eigs.size * np.finfo(np.float64).eps
其中abs_eigs 是循環矩陣的特征值的絕對值數組。
- caxis: int
當 c 的維度大於 1 時,它被視為循環向量的集合。在這種情況下,caxis 是保存循環係數向量的 c 軸。
- baxis: int
當 b 的維度大於 1 時,它被視為向量的集合。在本例中,baxis 是保存右側向量的 b 軸。
- outaxis: int
什麽時候c或者b是多維的,返回的值是
solve_circulant
是多維的。在這種情況下,離軸是保存解向量的結果的軸。
- x: ndarray
解決係統
C x = b
。
- LinAlgError
如果與 c 關聯的循環矩陣接近奇異。
參數 ::
返回 ::
拋出 ::
注意:
對於一維向量c有長度m, 和一個數組b有形狀
(m, ...)
,solve_circulant(c, b)
返回相同的結果
solve(circulant(c), b)
其中
solve
和circulant
來自scipy.linalg
。例子:
>>> import numpy as np >>> from scipy.linalg import solve_circulant, solve, circulant, lstsq
>>> c = np.array([2, 2, 4]) >>> b = np.array([1, 2, 3]) >>> solve_circulant(c, b) array([ 0.75, -0.25, 0.25])
將該結果與使用
scipy.linalg.solve
求解係統進行比較:>>> solve(circulant(c), b) array([ 0.75, -0.25, 0.25])
一個單一的例子:
>>> c = np.array([1, 1, 0, 0]) >>> b = np.array([1, 2, 3, 4])
調用
solve_circulant(c, b)
將引發LinAlgError
。對於最小二乘解決方案,請使用選項singular='lstsq'
:>>> solve_circulant(c, b, singular='lstsq') array([ 0.25, 1.25, 2.25, 1.25])
與
scipy.linalg.lstsq
比較:>>> x, resid, rnk, s = lstsq(circulant(c), b) >>> x array([ 0.25, 1.25, 2.25, 1.25])
廣播示例:
假設我們將兩個循環矩陣的向量存儲在一個形狀為 (2, 5) 的數組中,並將三個 b 向量存儲在一個形狀為 (3, 5) 的數組中。例如,
>>> c = np.array([[1.5, 2, 3, 0, 0], [1, 1, 4, 3, 2]]) >>> b = np.arange(15).reshape(-1, 5)
我們要解決循環矩陣的所有組合和b向量,結果存儲在形狀為 (2, 3, 5) 的數組中。當我們忽略坐標軸時c和b保存係數向量的集合的形狀分別為 (2,) 和 (3,),這與廣播不兼容。為了得到一個形狀為 (2, 3) 的廣播結果,我們添加一個平凡的維度到c:
c[:, np.newaxis, :]
具有形狀 (2, 1, 5)。最後一維保存循環矩陣的係數,所以當我們調用solve_circulant
,我們可以使用默認的caxis=-1
.的係數b向量在數組的最後一維b,所以我們使用baxis=-1
.如果我們使用默認離軸,結果將具有形狀 (5, 2, 3),所以我們將使用outaxis=-1
將解向量放在最後一維。>>> x = solve_circulant(c[:, np.newaxis, :], b, baxis=-1, outaxis=-1) >>> x.shape (2, 3, 5) >>> np.set_printoptions(precision=3) # For compact output of numbers. >>> x array([[[-0.118, 0.22 , 1.277, -0.142, 0.302], [ 0.651, 0.989, 2.046, 0.627, 1.072], [ 1.42 , 1.758, 2.816, 1.396, 1.841]], [[ 0.401, 0.304, 0.694, -0.867, 0.377], [ 0.856, 0.758, 1.149, -0.412, 0.831], [ 1.31 , 1.213, 1.603, 0.042, 1.286]]])
通過解決一對來檢查c和b向量(參見
x[1, 1, :]
):>>> solve_circulant(c[1], b[1, :]) array([ 0.856, 0.758, 1.149, -0.412, 0.831])
相關用法
- Python SciPy linalg.solve_continuous_lyapunov用法及代碼示例
- Python SciPy linalg.solve_continuous_are用法及代碼示例
- Python SciPy linalg.solve_banded用法及代碼示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代碼示例
- Python SciPy linalg.solve_sylvester用法及代碼示例
- Python SciPy linalg.solve_toeplitz用法及代碼示例
- Python SciPy linalg.solve_discrete_are用法及代碼示例
- Python SciPy linalg.solve_triangular用法及代碼示例
- Python SciPy linalg.solve用法及代碼示例
- Python SciPy linalg.solveh_banded用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.spsolve用法及代碼示例
- Python SciPy linalg.spsolve_triangular用法及代碼示例
- Python SciPy linalg.splu用法及代碼示例
- Python SciPy linalg.spilu用法及代碼示例
- Python SciPy linalg.svdvals用法及代碼示例
- Python SciPy linalg.sqrtm用法及代碼示例
- Python SciPy linalg.svds用法及代碼示例
- Python SciPy linalg.sinm用法及代碼示例
- Python SciPy linalg.schur用法及代碼示例
- Python SciPy linalg.sinhm用法及代碼示例
- Python SciPy linalg.signm用法及代碼示例
- Python SciPy linalg.subspace_angles用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.solve_circulant。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。