|
1 |
| -# Nonlinear Problems |
| 1 | +# Linear Problems |
2 | 2 |
|
3 | 3 | ## Mathematical Specification of a Nonlinear Problem
|
4 | 4 |
|
5 |
| -To define a Nonlinear Problem, you simply need to give the function ``f`` |
6 |
| -which defines the nonlinear system: |
| 5 | +### Concrete LinearProblem |
| 6 | + |
| 7 | +To define a `LinearProblem`, you simply need to give the `AbstractMatrix` ``A`` |
| 8 | +and an `AbstractVector` ``b`` which defines the linear system: |
7 | 9 |
|
8 | 10 | ```math
|
9 |
| -f(u,p) = 0 |
| 11 | +A*u = b |
10 | 12 | ```
|
11 | 13 |
|
12 |
| -and an initial guess ``u₀`` of where `f(u,p)=0`. `f` should be specified as `f(u,p)` |
13 |
| -(or in-place as `f(du,u,p)`), and `u₀` should be an AbstractArray (or number) |
14 |
| -whose geometry matches the desired geometry of `u`. Note that we are not limited |
15 |
| -to numbers or vectors for `u₀`; one is allowed to provide `u₀` as arbitrary |
16 |
| -matrices / higher-dimension tensors as well. |
| 14 | +### Matrix-Free LinearProblem |
| 15 | + |
| 16 | +For matrix-free versions, the specification of the problem is given by an |
| 17 | +operator `A(u,p,t)` which computes `A*u`, or in-place as `A(du,u,p,t)`. These |
| 18 | +are specified via the `AbstractSciMLOperator` interface. For more details, see |
| 19 | +the [SciMLBase Documentation](https://scimlbase.sciml.ai/dev/). |
| 20 | + |
| 21 | +Note that matrix-free versions of LinearProblem definitions are not compatible |
| 22 | +with all solvers. To check a solver for compatibility, use the function xxxxx. |
17 | 23 |
|
18 | 24 | ## Problem Type
|
19 | 25 |
|
20 | 26 | ### Constructors
|
21 | 27 |
|
| 28 | +Optionally, an initial guess ``u₀`` can be supplied which is used for iterative |
| 29 | +methods. |
| 30 | + |
22 | 31 | ```julia
|
23 |
| -NonlinearProblem(f::NonlinearFunction,u0,p=NullParameters();kwargs...) |
24 |
| -NonlinearProblem{isinplace}(f,u0,p=NullParameters();kwargs...) |
| 32 | +LinearProblem{isinplace}(A,x,p=NullParameters();u0=nothing,kwargs...) |
| 33 | +LinearProblem(f::AbstractDiffEqOperator,u0,p=NullParameters();u0=nothing,kwargs...) |
25 | 34 | ```
|
26 | 35 |
|
27 |
| -`isinplace` optionally sets whether the function is in-place or not. This is |
28 |
| -determined automatically, but not inferred. |
| 36 | +`isinplace` optionally sets whether the function is in-place or not, i.e. whether |
| 37 | +the solvers are allowed to mutate. By default this is true for `AbstractMatrix`, |
| 38 | +and for `AbstractSciMLOperator`s it matches the choice of the operator definition. |
29 | 39 |
|
30 | 40 | Parameters are optional, and if not given, then a `NullParameters()` singleton
|
31 | 41 | will be used, which will throw nice errors if you try to index non-existent
|
32 |
| -parameters. Any extra keyword arguments are passed on to the solvers. For example, |
33 |
| -if you set a `callback` in the problem, then that `callback` will be added in |
34 |
| -every solve call. |
35 |
| - |
36 |
| -For specifying Jacobians and mass matrices, see the [NonlinearFunctions](@ref nonlinearfunctions) |
37 |
| -page. |
| 42 | +parameters. Any extra keyword arguments are passed on to the solvers. |
38 | 43 |
|
39 | 44 | ### Fields
|
40 | 45 |
|
41 |
| -* `f`: The function in the ODE. |
42 |
| -* `u0`: The initial guess for the steady state. |
43 |
| -* `p`: The parameters for the problem. Defaults to `NullParameters`. |
| 46 | +* `A`: The representation of the linear operator. |
| 47 | +* `b`: The right-hand side of the linear system. |
| 48 | +* `p`: The parameters for the problem. Defaults to `NullParameters`. Currently unused. |
| 49 | +* `u0`: The initial condition used by iterative solvers. |
44 | 50 | * `kwargs`: The keyword arguments passed on to the solvers.
|
0 commit comments