polykin.math.fixpoint¤
fixpoint_anderson ¤
fixpoint_anderson(
g: Callable[[FloatVector], FloatVector],
x0: FloatVector,
m: int = 3,
tolx: float = 1e-06,
sclx: FloatVector | None = None,
maxiter: int = 50,
) -> VectorRootResult
Find the solution of a N-dimensional fixed-point problem using the Anderson acceleration method.
The Anderson acceleration method is an extrapolation technique to accelerate the convergence of multidimentional fixed-point iterations. It uses information from \(m\) previous iterations to construct a better approximation of the fixed point according to the formula:
where \(m_k=\min(m,k)\), and the coefficients \(\gamma_i^{(k)}\) are determined at each step by solving a least-squares problem.
References
- D.G. Anderson, "Iterative Procedures for Nonlinear Integral Equations", Journal of the ACM, 12(4), 1965, pp. 547-560.
- H.F. Walker, "Anderson Acceleration: Algorithms and Implementations", Worcester Polytechnic Institute, Report MS-6-15-50, 2011.
| PARAMETER | DESCRIPTION |
|---|---|
g
|
Identity function for the fixed-point problem, i.e.
TYPE:
|
x0
|
Initial guess.
TYPE:
|
m
|
Number of previous steps (
TYPE:
|
tolx
|
Absolute tolerance for
TYPE:
|
sclx
|
Scaling factors for
TYPE:
|
maxiter
|
Maximum number of iterations.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
VectorRootResult
|
Dataclass with root solution results. |
See also
fixpoint_wegstein: alternative (simpler) method for problems with weak coupling between components.
Examples:
Find the solution of a 2D fixed-point function.
>>> from polykin.math import fixpoint_anderson
>>> import numpy as np
>>> def g(x):
... x1, x2 = x
... g1 = 0.5*np.cos(x1) + 0.1*x2 + 0.5
... g2 = np.sin(x2) - 0.2*x1 + 1.2
... return np.array([g1, g2])
>>> sol = fixpoint_anderson(g, x0=np.array([0.0, 0.0]))
>>> print(f"x = {sol.x}")
x = [0.97458605 1.93830731]
>>> print(f"g(x)={g(sol.x)}")
g(x) = [0.97458605 1.93830731]
Source code in src/polykin/math/fixpoint/anderson.py
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | |