MATH76108/31/2018
Mathematica implementation of finite difference calculus
In[1]:=
x \[Element] Reals; $Assumptions = h > 0;
Dp[f_[x_]] := f[x + h] - f[x];
Dm[f_[x_]] := f[x] - f[x - h];
d[f_[x_]] := f[x+h/2]-f[x-h/2];
Dp[a_ f_[x_]]=a Dp[f[x]]; Dp[a_+b_]=Dp[a]+Dp[b]; Dp[a_
(b_+c_)]=a Dp[b]+a Dp[c]; Dp[a_]=0;
Dm[a_ f_[x_]]=a Dm[f[x]]; Dm[a_+b_]=Dm[a]+Dm[b]; Dm[a_
(b_+c_)]=a Dm[b]+a Dm[c]; Dm[a_]=0;
d[a_ f_[x_]]=a d[f[x]]; d[a_+b_]= d[a]+ d[b]; d[a_
(b_+c_)]=a d[b]+a d[c]; d[a_]=0;
fdSort[expr_]:=Assuming[{h > 0, x > 0},
Sort[Level[expr, 1], Level[#1, {Depth[#1] - 1}] <
Level[#2, {Depth[#2] - 1}] &]];
Q[x_]=Subscript[Q,x];
Dp[f_[x_], p_] :=
Together[Normal[1/h Series[Log[1 + z], {z, 0, p}]] /.
Table[z^j -> Nest[Dp, f[x], j], {j, 1, p}]];
Dm[f_[x_], p_] :=
Together[Normal[-1/h Series[Log[1 - z], {z, 0, p}]] /.
Table[z^j -> Nest[Dm, f[x], j], {j, 1, p}]];
d[f_[x_], p_] := Together[Normal[2/h Series[ArcSinh[z/2],
{z, 0, 2 p - 1}]] /.
Table[z^j -> Nest[d, f[x], j], {j, 1, 2 p - 1}]];
Dp[f_[x_], p_, k_] :=
Together[Expand[(Normal[1/h Series[Log[1 + z], {z, 0,
p}]])^k] /.
Table[z^j -> Nest[Dp, f[x], j], {j, 1, p k}]];
Dm[f_[x_], p_, k_] :=
Together[Expand[(Normal[-1/h Series[Log[1 - z], {z, 0,
p}]])^k] /.
Table[z^j -> Nest[Dm, f[x], j], {j, 1, p k}]];
d[f_[x_], p_, k_] := Together[Expand[(Normal[2/h
Series[ArcSinh[z/2], {z, 0, 2 p - 1}]])^k]
/. Table[z^j -> Nest[d, f[x], j], {j, 1, (2 p - 1)k}]];
{qt1,qxx2,qxx4}={Dp[f[x],1],d[f[x],1,2],d[f[x],2,2]}
In[2]:=
Series[qxx4,{h,0,4}]
In[3]:=
Note that centered formulas for approximating the second derivative of comparable accuracy may be obtained by using a smaller stencil.
In[3]:=
dc[f_[x_], p_, k_] := Module[{z,n,zn,ser,serc,fd},
ser = Expand[(Normal[2/h Series[ArcSinh[z/2], {z, 0, 2 p
- 1}]])^k];
n = Exponent[ser,z]; zn = Coefficient[ser,z,n] z^n;
serc = ser - zn;
fd = serc /. Table[z^j -> Nest[d, f[x], j], {j, 1, (2
p - 1)k}];
Return[Together[fd]]];
qxx4=dc[f[x],2,2]
In[4]:=
Series[qxx4,{h,0,4}]
In[5]:=
From the PDE an ODE system
(1) |
is obtained. The eigenvalues of are necessary for stability analysis of various time integration schemes to solve (1). Since , the eigenvectors of are discrete approximations of the eigenfunctions of .
Separation of variables applied to , gives
with eigenfunctions , .
In[31]:=
op = -X”[x];
lftBC = DirichletCondition[X[x]==0,x==0];
rgtBC = DirichletCondition[X[x]==0,x==1];
DEigensystem[{op,lftBC,rgtBC},X[x],{x,0,1},7]
In[48]:=
qxx2
In[49]:=
xk[x_] = Sin[k Pi x];
Axki = qxx2 /. {f->xk, x-> i h}
In[55]:=
lambda2[h_]=FullSimplify[Axki/xk[i h]]
In[56]:=
Limit[lambda2[h],h->0]
In[57]:=
Separation of variables applied to , gives
with eigenfunctions , .
In[57]:=
qxx2
In[58]:=
xk[x_] = Sin[(4k+1) Pi x/2];
Axki = qxx2 /. {f->xk, x-> i h}
In[59]:=
lambda2[h_]=FullSimplify[Axki/xk[i h]]
In[60]:=
Limit[lambda2[h],h->0]
In[61]:=