pylops.signalprocessing.Fredholm1¶
-
class
pylops.signalprocessing.
Fredholm1
(G, nz=1, saveGt=True, usematmul=True, dtype='float64')[source]¶ Fredholm integral of first kind.
Implement a multi-dimensional Fredholm integral of first kind. Note that if the integral is two dimensional, this can be directly implemented using
pylops.basicoperators.MatrixMult
. A multi-dimensional Fredholm integral can be performed as apylops.basicoperators.BlockDiag
operator of a series ofpylops.basicoperators.MatrixMult
. However, here we take advantage of the structure of the kernel and perform it in a more efficient manner.Parameters: - G :
numpy.ndarray
Multi-dimensional convolution kernel of size \([n_{slice} \times n_x \times n_y]\)
- nz :
numpy.ndarray
, optional Additional dimension of model
- saveGt :
bool
, optional Save
G
andG^H
to speed up the computation of adjoint (True
) or createG^H
on-the-fly (False
) Note thatsaveGt=True
will double the amount of required memory- usematmul :
bool
, optional Use
numpy.matmul
(True
) or for-loop withnumpy.dot
(False
). As it is not possible to define which approach is more performant (this is highly dependent on the size ofG
and input arrays as well as the hardware used in the compution), we advise users to time both methods for their specific problem prior to making a choice.- dtype :
str
, optional Type of elements in input array.
Notes
A multi-dimensional Fredholm integral of first kind can be expressed as
\[d(sl, x, z) = \int{G(sl, x, y) m(sl, y, z) dy} \quad \forall sl=1,n_{slice}\]on the other hand its adjoin is expressed as
\[m(sl, y, z) = \int{G^*(sl, y, x) d(sl, x, z) dx} \quad \forall sl=1,n_{slice}\]In discrete form, this operator can be seen as a block-diagonal matrix multiplication:
\[\begin{split}\begin{bmatrix} \mathbf{G}_{sl1} & \mathbf{0} & ... & \mathbf{0} \\ \mathbf{0} & \mathbf{G}_{sl2} & ... & \mathbf{0} \\ ... & ... & ... & ... \\ \mathbf{0} & \mathbf{0} & ... & \mathbf{G}_{slN} \end{bmatrix} \begin{bmatrix} \mathbf{m}_{sl1} \\ \mathbf{m}_{sl2} \\ ... \\ \mathbf{m}_{slN} \end{bmatrix}\end{split}\]Attributes: Methods
__init__
(G[, nz, saveGt, usematmul, dtype])Initialize this LinearOperator. adjoint
()Hermitian adjoint. apply_columns
(cols)Apply subset of columns of operator cond
([uselobpcg])Condition number of linear operator. conj
()Complex conjugate operator div
(y[, niter])Solve the linear problem \(\mathbf{y}=\mathbf{A}\mathbf{x}\). dot
(x)Matrix-matrix or matrix-vector multiplication. eigs
([neigs, symmetric, niter, uselobpcg])Most significant eigenvalues of linear operator. matmat
(X)Matrix-matrix multiplication. matvec
(x)Matrix-vector multiplication. rmatmat
(X)Adjoint matrix-matrix multiplication. rmatvec
(x)Adjoint matrix-vector multiplication. todense
()Return dense matrix. tosparse
()Return sparse matrix. transpose
()Transpose this linear operator. - G :