python scipy库函数solve用法_python scipy linalg.solve_circulant用法及代码示例

求解x的C x = b,其中C是循环矩阵。

C是与向量c相关的循环矩阵。

该系统通过在傅立叶空间中进行除法来解决。计算公式为:

x = ifft(fft(b) / fft(c))

其中fft和ifft分别是快速傅立叶变换及其逆。对于大向量c,这比用完整循环矩阵求解系统要快得多。

参数:

c:array_like循环矩阵的系数。

b:array_likeRight-hand侧矩阵在a x = b。

singular:str, 可选参数此参数控制如何处理近似奇异的循环矩阵。如果奇异点是“raise”并且循环矩阵接近奇异点,则aLinAlgError被提出。如果单数是“lstsq”,则返回最小二乘解。默认值为“raise”。

tol:float, 可选参数如果循环矩阵的任何特征值的绝对值都小于或等于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的轴,其中包含right-hand个边矢量。

outaxis:int当c或b为多维时,由返回solve_circulant是多维的。在这种情况下,外来是保存解向量的结果轴。

返回值:

x:ndarray系统解决方案C x = b。

异常:

LinAlgError如果与c相关的循环矩阵接近奇异。

注意:

对于长度为m的一维向量c和形状为b的数组(m, ...),

solve_circulant(c, b)

返回与以下相同的结果

solve(circulant(c), b)

版本0.16.0中的新函数。

例子:

>>> 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])

>>> 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])

>>> 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库中的stats.genextreme模块来计算广义极值分布的参数和概率密度函数。 下面是一个示例代码,展示了如何使用stats.genextreme模块来拟合广义极值分布,并绘制其概率密度函数: ```python import numpy as np from scipy.stats import genextreme import matplotlib.pyplot as plt # 生成一组随机变量 x = np.random.normal(size=1000) # 计算广义极值分布的参数 params = genextreme.fit(x) # 绘制概率密度函数 fig, ax = plt.subplots(1, 1) x_axis = np.linspace(genextreme.ppf(0.01, *params), genextreme.ppf(0.99, *params), 100) ax.plot(x_axis, genextreme.pdf(x_axis, *params), 'r-', lw=5, alpha=0.6, label='genextreme pdf') plt.show() ``` 在代码中,我们首先生成了一组随机变量x。然后使用genextreme.fit()函数来计算广义极值分布的参数,保存在params变量中。最后,使用genextreme.pdf()函数来计算概率密度函数,并使用matplotlib库将其绘制出来。 需要注意的是,genextreme.fit()函数可以自动选择最适合数据的参数估计方法。如果需要手动指定参数估计方法,可以使用fitmethod参数来指定。例如,可以将fitmethod参数设置为MLE来使用最大似然估计方法: ```python params = genextreme.fit(x, fitmethod='MLE') ``` 总之,使用Scipy库中的stats.genextreme模块可以方便地计算和绘制广义极值分布的概率密度函数,从而对一组随机变量的极端值进行建模和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值