随机微分方程例子@Matlab

分享一个在Matlab中求解随机微分方程(SDE)的例子

首先,获取并加载求解SDE的工具箱

可以在google中搜索求解SDE的工具箱,也可以通过其他途径获得。我下载的其实就是一个由许多文件组成的压缩包,解压,然后注意添加到当前路径。

% 这是我自己的情况
addpath("../SDETools-master/SDETools-master/")

其次,编写SDE方程

SDE方程包括漂移项和扩散项。

% 举一个简单的例子,三个方程组成的方程组
% a,b,c是参数
a = 0.5;
b = 0.25;
c = 0.33;
f = @(t,x)[ x(1)*(x(2)-a)+x(3);
            1-b*x(2)-x(2)^2;
           -x(1)-c*x(3)]; % drift function
g = 10; % or @(t,x)10;    % diffusion function, constant in this case
dt = 1e-3;                % time step
t = 0:dt:1;               % time vector
x0 = [0.5;0.1;1];               % 3-by-1 initial condition
opts = sdeset('RandSeed',1);  % Set random seed

接下来,使用工具箱中的sde_euler求解

% 附上全部的代码
addpath("../SDETools-master/SDETools/")
a = 0.5;
b = 0.25;
c = 0.33;
f = @(t,x)[ x(1)*(x(2)-a)+x(3);
            1-b*x(2)-x(2)^2;
           -x(1)-c*x(3)]; % drift function
g = 10; % or @(t,x)10;    % diffusion function, constant in this case
dt = 1e-3;                % time step
t = 0:dt:1;               % time vector
x0 = [0.5;0.1;1];               % 3-by-1 initial condition
opts = sdeset('RandSeed',1);  % Set random seed
y = sde_euler(f,g,t,x0,opts); % Integrate
figure;
plot(t,y);

下面是SDE仿真的结果
仿真结果

可以再更改一下扩散项

% 附上全部的代码
addpath("../SDETools-master/SDETools/")
a = 0.5;
b = 0.25;
c = 0.33;
f = @(t,x)[ x(1)*(x(2)-a)+x(3);
            1-b*x(2)-x(2)^2;
           -x(1)-c*x(3)]; % drift function
g = [0;10;0]; % or @(t,x)10;    % This code has been changed.

dt = 1e-3;                % time step
t = 0:dt:1;               % time vector
x0 = [0.5;0.1;1];               % 3-by-1 initial condition
opts = sdeset('RandSeed',1);  % Set random seed
y = sde_euler(f,g,t,x0,opts); % Integrate
figure;
plot(t,y);

看看结果
仿真结果

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值