@@ -20,4 +20,68 @@ Pkg.add("LinearOperatorCollection")
20
20
```
21
21
22
22
## Usage
23
- ...
23
+ After loading the package one can construct an operator ` Op ` using the generic syntax
24
+ ``` julia
25
+ op = Op (T; kargs... )
26
+ ```
27
+ Here, ` T ` is the element type of the operator that usually should match the element type that
28
+ the operator will later operate on. The keyword arguments are operator specific but there are
29
+ some common parameters. For instance, most operators have a ` shape ` parameter, which encodes
30
+ the size of the vector ` x ` , the operator is applied to
31
+
32
+ ### Extensions
33
+ To keep the load time of this package low, many operators are implemented using package extensions.
34
+ For instance, in order to get the ` FFTOp ` , one needs to load not only ` LinearOperatorCollection ` but
35
+ also ` FFTW ` :
36
+ ``` julia
37
+ using LinearOperatorCollection, FFTW
38
+ ```
39
+ Small operators are implemented in LinearOperatorCollection directly.
40
+
41
+ ### Example
42
+
43
+ The following shows how to build a two dimensional FFT operator and apply it to an image:
44
+ ``` julia
45
+ using LinearOperatorCollection, FFTW, LinearAlgebra
46
+
47
+ N = (64 , 64 )
48
+ x = vec ( rand (ComplexF64, N) ) # The image needs to be vectorized so that the operator can be applied
49
+
50
+ F = FFTOp (ComplexF64, shape= N, shift= true ) # shift will apply fftshifts before and after the FFT
51
+
52
+ # apply operator
53
+ y = F * x
54
+ # apply the adjoint operator
55
+ z = adjoint (F) * y
56
+
57
+ # apply the in place variants, which do not allocate memory during the computation
58
+ mul! (y, F, x)
59
+ mul! (z, adjoint (F), x)
60
+ ```
61
+
62
+ ### Implemented operators
63
+
64
+ Currently the following operators are implemented:
65
+ * ` WeightingOp ` : A diagonal weighting matrix
66
+ * ` SamplingOp ` : An operator which (sub)-samples the input vector
67
+ * ` NormalOp ` : An operator building the normal matrix ` A' W A ` in a lazy fashion
68
+ * ` GradientOp ` : An operator calculating the gradient along one or several directions
69
+ * ` FFTOp ` : An operator applying the fast Fourier transform
70
+ * ` DCTOp ` : An operator applying the discrete cosine transform
71
+ * ` DSTOp ` : An operator applying the discrete sine transform
72
+ * ` NFFTOp ` : An operator applying the non-equidistant fast Fourier transform
73
+ * ` WaveletOp ` : An operator applying the wavelet transformation
74
+
75
+ ### Factory method
76
+
77
+ One can also create operators using a factory method that takes as input the abstract type. The above
78
+ operator can be also created by
79
+ ``` julia
80
+ F = createLinearOperator (FFTOp{ComplexF64}, shape= N, shift= true )
81
+ ```
82
+ This is useful in cases where the operator should be exchangeable. A list of all implemented
83
+ can be obtained by calling
84
+ ``` julia
85
+ list = linearOperatorList ()
86
+ ```
87
+
0 commit comments