public static interface FeynmanKac.ForcingTerm
Modifier and Type | Method and Description |
---|---|
void |
force(int interval,
double[] y,
double time,
double width,
double[] xlocal,
double[] qw,
double[][] u,
double[] phi,
double[][] dphi)
Computes approximations to the forcing term ϕ(f,x,t)
and its derivative ∂ϕ/∂y.
|
void force(int interval, double[] y, double time, double width, double[] xlocal, double[] qw, double[][] u, double[] phi, double[][] dphi)
interval
- an int
, the index related to the integration
interval [xGrid[interval-1], xGrid[interval]]
.y
- an input double
array of length 3*xGrid.length
containing the coefficients of the Hermite quintic spline
representing the solution of the Feynman-Kac equation at time
point time
. For each
x∈[xi,xi+1],hi=xi+1−xi,zi=(x−xi)/hi,i=1,…,xGrid.length−1
the approximate solution is locally defined by
f(x,t)=fib0(z)+fi+1b0(1−z)+hif′ib1(z)−hif′i+1b1(1−z)+h2ifi″
The values
y_i=f_i, \, y_{i+1}=f_i', \, y_{i+2}=f_i'', \; i=1,4,7,\ldots,3\cdot \mbox{xGrid.length}-2,
are stored as successive triplets in y
.time
- a double
, the time point.width
- a double
, the width of the integration interval,
width=xGrid[interval]-xGrid[interval-1]
.xlocal
- an input double
array containing the Gauss-Legendre points
translated and normalized to the interval
[xGrid[interval-1], xGrid[interval]]
.qw
- an input double
array containing the Gauss-Legendre weights.u
- an input double
array of dimension 12 by xlocal.length
containing the basis function values that define
\tilde{\beta}(x) at the Gauss-Legendre
points xlocal
. Setting
u_{k,i}:=\text{u[k][i]} \quad \mbox{and} \quad x_i:=\text{xlocal[i]} \,,
vector \tilde{\beta}(x_i) is defined as
\tilde{\beta}(x_i):=(\beta_{3*(\text{interval}-1)}(x_i),\ldots,
\beta_{3*\text{interval}+2}(x_i))^T
= (u_{0,i},u_{1,i},u_{2,i},u_{6,i},u_{7,i},u_{8,i})^T \,.
phi
- an output double
array of length 6 containing Gauss-Legendre
approximations for the local contributions
\phi_t := \int_{\text{xgrid[interval-1]}}^{\text{xgrid[interval]}}\phi(f,x,t)
\tilde{\beta}(x) dx,
where t=time
and
\tilde{\beta}(x):=(\beta_{3*(\text{interval}-1)}(x),\ldots,\beta_{3*\text{interval}+2}(x))^T.
Denoting by degree
the number of Gauss-Legendre points (xlocal.length
) and setting
x_j:=\text{xlocal[j]}, vector phi
contains elements
\text{phi[i]} = \text{width}*\sum_{j=0}^{\text{degree-1}}\text{qw}[j]\,\tilde{\beta}_i(x_j)\,\phi(f,x_j,t)
for i=0,...,5
.dphi
- an output double
array of dimension 6 by 6
containing a
Gauss-Legendre approximation for the Jacobian of the local contributions
\phi_t at time point t=time
,
\frac{\partial \phi_t}{\partial y}=\int_{\text{xgrid[interval-1]}}^{\text{xgrid[interval]}}
\frac{\partial \phi (f,x,t)}{\partial f} \,\tilde{\beta}(x)\,\tilde{\beta}^T(x)dx\,.
The approximation to this symmetric matrix is stored row-wise, i.e.
\text{dphi[i][j]} = \text{width} * \sum_{k=0}^{\text{degree-1}}\text{qw}[k]\,\tilde{\beta}_i(x_k)\,\tilde{\beta}_j(x_k)
\left. \frac{\partial{\phi}}{\partial f}\right|_{x=\text{xlocal}[k],\,t=\text{time}}
for i,j=0,...,5
.Copyright © 2020 Rogue Wave Software. All rights reserved.