Py学习  »  Python

Python 进阶视频课 - 6. SciPy 下

王的机器 • 3 年前 • 510 次点击  

这是 Python 进阶课的第六节 - SciPy 下,进阶课的目录如下:


  1. NumPy 上

  2. NumPy 下

  3. Pandas 上

  4. Pandas 下

  5. SciPy 上


之前基础版的 11 节的目录如下:


  1. 编程概览

  2. 元素型数据

  3. 容器型数据

  4. 流程控制:条件-循环-异常处理

  5. 函数上:低阶函数

  6. 函数下:高阶函数

  7. 类和对象:封装-继承-多态-组合

  8. 字符串专场:格式化和正则化

  9. 解析表达式:简约也简单

  10. 生成器和迭代器:简约不简单

  11. 装饰器:高端不简单


上节主要从插值、数值积分和优化三大功能介绍 scipy,下节从有限差分和线性回归两大功能来介绍 scipy。


偏微分方程有限差分 (finite difference, FD) 算是金融工程中比较难学的,但我会讲里面所有难懂的概念可视化出来。下图可是我用 matplotlib 写代码画出 (敢问谁会这么用心来这么做) 用 FD 求解 PDE 所了解的核心元素:


  • 网格:空间维度的 S (对应标的资产价格),时间维度的 t (对应衍生品到期日)

  • 终止条件:任何金融产品都是支付函数,可设为 PDE 的终止条件

  • 边界条件:很多金融产品的支付在标的很大或很小时会确定比如看涨期权


    • 在标的为零时支付为零

    • 在标的很大时近似为一个远期。


  • 求解格式完全显式 (explicit)、完全隐式 (implicit) 和克莱克尼克尔森 (Crank-Nicolson)



在求解 PDE 时,我只说五句话,配着下面的图 (也是用 matpplotlib 写代码画的)。


  1. 水平面上的灰点是网格

  2. 红线是终值条件 (产品在到期日支付函数)

  3. 两条深青线是边界条件 (产品在标的上下界时的支付)

  4. 蓝点是期权值 (产品在 0 时点的值)

  5. 从 T4 到 T0 一步步解的 (从后往前解)



以上步骤弄明白了,要得到更精确的值,需要把 S 和 t 轴上的点打的更密就完事了,你看,其他书讲的很难懂的 PDE FD 我用几张简图可视化一下就好懂多了吧。


FD 对于定价标的少于 4 个的金融衍生品是个很好的方法:


  • 高效:和蒙特卡洛方法比快很多

  • 稳定和蒙特卡洛方法比稳很多

  • 普适:对于不同产品整个求解过程几乎一样,不同的就是设定不同的上下界、终止条件和边界条件。


在 PDE FD 中用到了稀疏矩阵 (sparse matrix),这个算是 SciPy 中最有内容的知识点之一。和稠密矩阵相比,稀疏矩阵的最大好处就是节省大量的内存空间来储存零。稀疏矩阵本质上还是矩阵,只不过多数位置是空的,那么存储所有的 0 非常浪费。稀疏矩阵的存储机制有很多种 (列出常用的五种):


  • COO (Coordinate List Format):座标格式,容易创建但是不便于矩阵计算,用 coo_matrix

  • CSR (Compressed Sparse Row): 压缩行格式,不容易创建但便于矩阵计算,用 csr_matri

  • CSC (Compressed Sparse Column): 压缩列格式,不容易创建但便于矩阵计算,用 csc_matrix

  • LIL (List of List): 内嵌列表格式,支持切片但也不便于矩阵计算,用 lil_matrix

  • DIA (Diagnoal):对角线格式,适合矩阵计算,用 dia_matrix


五种稀疏矩阵的动图如下:



付费用户(付 1 赠 1)可以获得:


  • 观看课程视频 (85 分钟)

  • Python 代码 (Jupyter Notebook)

  • 偏微分方程有限差分 PDF




Jupyter Notebook

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/100011
 
510 次点击