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 \(\phi(f,x,t)\)
and its derivative \(\partial \phi/\partial 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 \in [x_i,x_{i+1}], \, h_i=x_{i+1}-x_i, z_i=(x-x_i)/h_i,\,i=1,\ldots, \text{xGrid.length}-1
$$
the approximate solution is locally defined by
$$
f(x,t) = f_ib_0(z)+f_{i+1}b_0(1-z)+h_i f_i' b_1(z)-h_i f_{i+1}' b_1(1-z)+
h_i^2f_i''b_2(z)+h_i^2f_{i+1}''b_2(1-z).
$$
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.