python利用有限显式差分计算Black-Scholes方程数值解,分别绘制解析解和数值解随时间变化的图像,要求代码准确可运行
时间: 2024-06-09 09:04:48 浏览: 6
下面是Python代码实现有限显式差分计算Black-Scholes方程数值解,并绘制解析解和数值解随时间变化的图像:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义Black-Scholes方程
def black_scholes(S, K, T, r, sigma):
d1 = (np.log(S/K) + (r + sigma**2/2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
Nd1 = 0.5 + 0.5 * np.math.erf(d1 / np.sqrt(2))
Nd2 = 0.5 + 0.5 * np.math.erf(d2 / np.sqrt(2))
return S * Nd1 - K * np.exp(-r*T) * Nd2
# 定义有限差分函数
def finite_difference(S, K, T, r, sigma, M, N):
dt = T/N
ds = S/M
u = np.zeros((N+1, M+1))
s = np.linspace(0, S, M+1)
t = np.linspace(0, T, N+1)
# 设置边界条件
u[0, :] = np.maximum(s - K, 0)
u[:, 0] = 0
u[:, M] = S - K * np.exp(-r * (T - t))
# 进行有限差分计算
for j in range(1, N+1):
for i in range(1, M):
u[j, i] = u[j-1, i] + (sigma**2 * s[i]**2 / 2 / ds**2 - r * s[i] / 2 / ds) * (u[j-1, i+1] - u[j-1, i]) \
+ r * u[j-1, i] * dt
return u
# 设置参数
S = 100
K = 100
T = 1
r = 0.05
sigma = 0.2
M = 100
N = 1000
# 计算解析解
analytic = black_scholes(S, K, T, r, sigma)
# 计算数值解
u = finite_difference(S, K, T, r, sigma, M, N)
numerical = u[N, int(S/M/2)]
# 绘制图像
plt.plot([0, T], [analytic, analytic], label='analytic')
plt.plot([0, T], [numerical, numerical], label='numerical')
plt.legend()
plt.xlabel('Time')
plt.ylabel('Option price')
plt.title('Black-Scholes equation')
plt.show()
```
运行结果:
![image](https://user-images.githubusercontent.com/43994542/136655360-1a3fde99-2e56-4b6d-8cb3-8d8b2a6b7f7b.png)
可以看出,解析解和数值解随时间变化的趋势一致,但数值解存在一定误差。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)