求助编写MATLAB代码

蒙特卡洛模拟方法产生服从标准正态分布的随机数, 迭代入 已知方程:

其中S初始值100,求一系列的值,迭代次数为1000次,求编MATLAB代码。
急,在线等,谢谢大家!

题中有几个参数的含义都没做说明,取值范围也不清楚:

1、μσ惯例是均值和均方差的符号,是哪个量的均方差?取值范围呢?

2、Δt是什么?

3、第一个方程中的S应该是指第二个方程中的S(t-1)吧?

4、ε服从标准正态分布”的意思应该是其均值为0、方差为1?

 

代码并不复杂:

N = 1000;
S = zeros(N+1,1);
S(1) = 100;
mu = 100;
sigma = 30;
dt = 0.001;
e = randn(N,1);
for i = 2 : N+1
    DS = S(i-1) * ( mu*dt + sigma * e(i-1) * sqrt(dt) );
    S(i) = S(i-1) + DS;
end
stem(0:N,S)

从参数取值看,Δt的影响比较大,如果取的稍大一些,就很容易发散。而按照当前的参数值,尽管过程不同,最终都能收敛到0。

追问

我们想要一系列迭代出来的数据,这个能修改一下代码出数据给我们嘛?

追答

要数据的话,运行完程序后,在命令窗口直接输入S就可以了。

或者用

mat2str(S,5)

转化为更紧凑的字符串(其中5是要保留的有效数字位数)。

追问

大神,问一下我们是想用蒙特卡洛模拟法模拟第二天的股票价格的,这代码貌似没有用到啊

追答

你的方程是什么意思,你没有说,我也不知道。

我只是按照你的方程,加上自己的理解编写的代码,但由于方程中很多参数你都没说明,我的理解不一定正确。

 

根据你刚才追问中体现出来的信息,我现在的理解是,第二个方程并不是要连续迭代1000次(时间序列),而是使用相同的初值100,用该方程随机独立地机算1000次。按这种理解,程序修改如下:

N = 1000;
mu = 0;
sigma = 0.2;
dt = 0.1;
e = randn(N,1);
S = zeros(N,1);
S0 = 100;
for i = 1 : N
    DS = S0 * ( mu*dt + sigma * e(i) * sqrt(dt) );
    S(i) = S0 + DS;
end
hist(S,30)

最后画的是分布图,也就是1000次独立计算得到的结果落在各区间的次数。

追问

这就是我们想要出来的结果的模式,是你第一次理解的连续迭代。

注:μ和σ是已知的参数,Δt因为还没有确定但是也是要知道的参数。

       3、第一个方程中的S应该是指第二个方程中的S(t-1)吧?

       4、ε“服从标准正态分布”的意思应该是其均值为0、方差为1?

       上述这2项就是应该这样理解的,你的意思没有错。

综上,谢谢帮助!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-29
应该不难,不过要先问清楚t和o(西格玛)是什么,是不是统计学里的几个参数,这要说清楚。追问

t和o(西格玛)是我们知道的参数,是已知的。

追答

好的,稍等。

追问

t先取0.1,o(西格玛)是0.2

相似回答