QuantLib: CrankNicolson< Operator > Class Template Reference

A free/open-source library for quantitative finance Reference manual - version 1.12

Public Types | Public Member Functions | List of all members
CrankNicolson< Operator > Class Template Reference
Finite-differences framework

Crank-Nicolson scheme for finite difference methods. More...

`#include <ql/methods/finitedifferences/cranknicolson.hpp>`

Inheritance diagram for CrankNicolson< Operator >:
[legend]

## Public Types
typedef OperatorTraits< Operator > | traits
typedef traits::operator_type | operator_type
typedef traits::array_type | array_type
typedef traits::bc_set | bc_set
typedef traits::condition_type | condition_type
Public Types inherited from MixedScheme< Operator >
typedef OperatorTraits< Operator > | traits
typedef traits::operator_type | operator_type
typedef traits::array_type | array_type
typedef traits::bc_set | bc_set
typedef traits::condition_type | condition_type

## Public Member Functions
| CrankNicolson (const operator_type &L, const bc_set &bcs)
Public Member Functions inherited from MixedScheme< Operator >
| MixedScheme (const operator_type &L, Real theta, const bc_set &bcs)
void | step (array_type &a, Time t)
void | setStep (Time dt)

## Additional Inherited Members
Protected Attributes inherited from MixedScheme< Operator >
operator_type | L_
operator_type | I_
operator_type | explicitPart_
operator_type | implicitPart_
Time | dt_
Real | theta_
bc_set | bcs_

## Detailed Description

### template<class Operator>
class QuantLib::CrankNicolson< Operator >

Crank-Nicolson scheme for finite difference methods.

In this implementation, the passed operator must be derived from either TimeConstantOperator or TimeDependentOperator. Also, it must implement at least the following interface:

typedef ... array_type;
// copy constructor/assignment
// (these will be provided by the compiler if none is defined)
Operator(const Operator&);
Operator& operator=(const Operator&);
// inspectors
Size size();
// modifiers
void setTime(Time t);
// operator interface
array_type applyTo(const array_type&);
array_type solveFor(const array_type&);
static Operator identity(Size size);
// operator algebra
Operator operator*(Real, const Operator&);
Operator operator+(const Operator&, const Operator&);
Operator operator+(const Operator&, const Operator&);

Warning:
  The differential operator must be linear for this evolver to work.