求SDE模拟场景下Matlab的simulate(MDL)方法的Python等价实现
Matlab SDE simulate 方法的Python等价实现
你当前使用的sdeint库已经可以完全匹配Matlab对应功能的输出,只要调整时间序列生成逻辑对齐Matlab参数即可,对应关系和实现方案如下:
输出对应关系
- Matlab返回的第二个参数
Times:等价于自定义的时间步数组 - Matlab返回的第一个参数
Paths:等价于sdeint.itoint的返回值,数组维度为(时间步数量, 状态变量数量),和Matlab输出维度完全一致
对齐Matlab DeltaTime参数的实现
如果你需要和Matlab代码一样通过dt(时间间隔)和nPeriods(时间步数量)定义采样规则,调整时间数组生成逻辑即可:
import numpy as np import sdeint # 自定义参数 dt = 0.01 # 对应Matlab的DeltaTime nPeriods = 2000 # 对应Matlab的simulate第二个参数 x0 = np.array([0.006, 5.05, 0.07, 29.78]) # 初始状态,对应Matlab的StartState # 漂移项、扩散项函数提前定义 F = lambda x, t: drift(x, t) G = lambda x, t: diffusion(x, t) # 生成时间序列,和Matlab DeltaTime逻辑完全对齐,加小值避免浮点误差丢失最后一个时间步 times = np.arange(0, nPeriods * dt + 1e-12, dt) # 求解SDE得到路径 paths = sdeint.itoint(F, G, x0, times)
多路径模拟实现
如果需要和Matlab一样生成多条模拟路径,加一层循环即可:
n_paths = 10 # 模拟路径数量 paths_list = [] for _ in range(n_paths): paths_list.append(sdeint.itoint(F, G, x0, times)) # 合并为维度(时间步, 状态数, 路径数)的数组,和Matlab多路径输出维度一致 paths_all = np.stack(paths_list, axis=-1)
内容的提问来源于stack exchange,提问作者the_lizard_wizard
相关产品推荐
相关产品推荐

