量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

这是量化分析师的偏微分方程系列的第二篇,在这一篇中我们将解决上一篇显式格式留下的稳定性问题。本篇将引入隐式差分算法,读者可以学到:

  1. 隐式差分格式描述

  2. 三对角矩阵求解

  3. 如何使用 scipy 加速算法实现

在完成两天的基础学习之后,在下一天中,我们将把已经学到的知识运用到金融定价领域最重要的方程之一:Black - Shcoles - Merton偏微分方差

下文中需要的 plot 函数等定义:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

隐式差分格式

**
**

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

1.1 矩阵求解 (TridiagonalSystem)

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

1.2 隐式格式求解

**
**

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

继续组装

像我们在显示格式那一节介绍的同样做法,我们把之前的代码整合起来,归集与一个完整的类 ImplicitEulerScheme 中:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

然后我们可以使用下面的三行简单调用完成功能:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】使用 scipy 加速

软件工程行业里有句老话,叫做:“不要重复发明轮子!”。实际上,之前的代码里面,我们就造了自己的轮子:TridiagonalSystem。三对角矩阵作为最最常见的稀疏矩阵,关于它的线性方程组求解算法实际上早已为业界熟知,也已经有很多库内置了工业级别强度实现。这里我们取 scipy 作为例子,来展示使用外源库实现的好处:

*更加稳健的算法_:_知名库算法由于使用者广泛,有更大的概率发现一些极端情形下的 bug。库作者可以根据用户反馈,及时调整算法;

*更高的性能_:_由于库的使用更为广泛,库作者有更大的动力去使用各种技术去提高算法的性能:例如使用更高效的语言实现,例如 C。scipy 中的情形就是一例。

*持续的维护_:_库的受众范围广,社区的力量会推动库作者持续维护。

下面的代码展示,如何使用 scipy 中的 solve_banded 算法求解三对角矩阵:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

我们使用上面的算法替代我们之前的 TridiagonalSystem``:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

``

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

同样的我们定义一个新类 ImplicitEulerSchemeWithScipy 使用 scipy 的算法:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

下面的代码,比较了两种做法的性能。可以看到仅仅简单的替代三对角矩阵算法,我们就获得了接近8 倍的性能提升:

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

尾声

**
**

到这里为止,我们已经结束 了偏微分方差差分格式的基础学习。这是一个很大的学科,这两天也只能做到“管中窥豹”。但是有了以上的基础知识,读者已经有了足够的积累,可以处理一些金融工程中会实际遇到的方程。

在下一天中,我们将把这两天学习到的知识运用到金融工程史上最重要的方程:Black - Scholes - Merton偏微分方程。

量化分析师的 Python 日记【第 11 天 Q Quant 兵器谱之偏微分方程 2】

点击阅读原文,登陆或者注册,克隆源代码到自己的研究环境,就可以自己上手啦!

来源链接:mp.weixin.qq.com