File: implicit_system.qbk

package info (click to toggle)
boost1.90 1.90.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 593,168 kB
  • sloc: cpp: 4,190,642; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,776; makefile: 1,162; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (43 lines) | stat: -rw-r--r-- 1,647 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[/============================================================================
  Boost.odeint

  Copyright 2011 Mario Mulansky
  Copyright 2011-2012 Karsten Ahnert

  Use, modification and distribution is subject to the Boost Software License,
  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]



[section Implicit System]

[heading Description]

This concept describes how to define a ODE that can be solved by an implicit routine.
Implicit routines need not only the function /f(x,t)/ but also the Jacobian /df/dx = A(x,t)/.
/A/ is a matrix and implicit routines need to solve the linear problem /Ax = b/.
In odeint this is implemented with use of __ublas, therefore, the ['state_type] implicit routines is ['ublas::vector] and the matrix is defined as ['ublas::matrix].

[heading Notation]

[variablelist
  [[`System`] [A type that is a model of `Implicit System`]]
  [[`Time`] [A type representing the time of the ODE]]
  [[`sys`] [An object of type `System`]]
  [[`x`] [Object of type ublas::vector]]
  [[`dxdt`] [Object of type ublas::vector]]
  [[`jacobi`] [Object of type ublas::matrix]]
  [[`t`] [Object of type `Time`]]
]

[heading Valid Expressions]

[table
  [[Name] [Expression] [Type] [Semantics]]
  [[Calculate ['dx/dt := f(x,t)]] [`sys.first( x , dxdt , t )`] [`void`] [Calculates `f(x,t)`, the result is stored into dxdt] ]
  [[Calculate ['A := df/dx (x,t)]] [`sys.second( x , jacobi , t )`] [`void`] [Calculates the Jacobian of /f/ at /x/,/t/, the result is stored into `jacobi`] ]
]

[endsect]