在Mathematica中可视化微分方程组的方式一般有两种,第一种是绘制向量场,涉及到的命令有VectorPlot[]和VectorPlot3D[]。而第二种是先将其求解出来,再绘制相应的图像,涉及到的命令主要有DSolve[]、NDSolve[]、DSolveValue[],第一个命令是求解析解,而第二个命令是求数值解 ,得到函数,第三个命令得到的数值。
以Volterra-Lotka方程为例,它是一个描述捕食者与被捕食者种群的方程组:
其中四个参数均为正数。
在Mathematica中可视化微分方程组的方式一般有两种,第一种是绘制向量场,涉及到的命令有VectorPlot[]和VectorPlot3D[]。而第二种是先将其求解出来,再绘制相应的图像,涉及到的命令主要有DSolve[]、NDSolve[]、DSolveValue[],第一个命令是求解析解,而第二个命令是求数值解 ,得到函数,第三个命令得到的数值。
以Volterra-Lotka方程为例,它是一个描述捕食者与被捕食者种群的方程组:
其中四个参数均为正数。
Mathematica可能是地表最强的数学软件,现在我们用它来解一下PDE。
以金融随机分析领域著名的BSM方程为例:
边界条件:。
式中,表示基础资产的价值,而自然是表示时间,表示基础资产的波动率,通常小于1,为无风险利率,表示期权价格,为期权的执行价格,注意区分期权的价格与执行价格,表示期权的到期时间,它的单位与波动率的单位相同,通常对于两者我们都以年为单位。在给定的情况下通过求解这个方程,我们可以得到期权的价格关于基础资产价格与时间的函数。
在Mathematica中我们用以下代码求解这个方程:
r=0.1;sigma=0.3;T=0.25;
sol=DSolve[{D[f[S, t], t] + r S D[f[S, t], S] + 1/2 D[f[S, t], {S, 2}] sigma^2 S^2 == r f[S, t],
f[S, T] == Max[S – X, 0]}, f[S, t], {S, t}]
在输入这个方程时,有几点需要注意的地方:
注意在输入的方程中,我们没有设定,原因是运行时发现如果指定了,则方程解不出来。
得到以下结果(直接copy as Latex):
$latex \left\{\left\{f(S,t)\to -0.487655 \left(e^{0.1 t} X \text{erfc}\left(\frac{1.17851 (-2 \log (S)+0.11 (t-0.25)+2 \log (X))}{\sqrt{0.25\, -t}}\right)-1.02532 S \text{erfc}\left(\frac{1.17851 (-2 \log (S)+0.29 (t-0.25)+2 \log (X))}{\sqrt{0.25\, -t}}\right)\right)\right\}\right\}$
用Plot3D可以进行可视化,对于X,我们可以用Manipulate动态展示:
c[S_, t_, X_] := Evaluate[f[S, t] /. sol]; Manipulate[Plot3D[c[S, t, X], {S, 0, X}, {t, 0, T}, AxesLabel -> Automatic, PlotRange -> All], {{X, 40, "parameter"}, 30, 80, Appearance -> "Labeled"}]
在Manipulate语句中用Apperance->”Labeled”来显示可变参数的数值。
结果如下:
从图中可以看出,随着基础资产价格的升高,期权的价格也会变高,而随着时间接近有效期,期权价格也会降低。