【发布时间】:2018-04-23 00:01:44
【问题描述】:
我正在运行蒙特卡罗模拟来计算 Y,例如: Y(i,j+1)=Y(i,j)*a(i,j)+b
我想尽可能避免使用 for 循环,而是使用矩阵计算,因为这是 Matlab 的优势。
这是我的代码:
kappa = 6.21;
theta = 0.019;
sigma = 0.61;
rho = -0.7;
r = 0.0319;
V0 = 0.010201;
T = 1;
N = 300; % Time steps
M = 1e6; % Number of simulations
dt = T/N;
Z = randn(M,N);
a = kappa*dt+sigma*sqrt(dt);
b = kappa*theta*dt;
% With loop
tic
y = zeros(M,N); % preallocate
y(:,1) = V0; % initial value
for i=1:M
for j = 1:N
y(i,j+1) = y(i,j)*(1-a*Z(i,j))+b;
end
end
toc
这是我整个代码的一小部分,单独运行给定参数需要 65 秒。有没有办法让它更快,通过矩阵计算而不是循环?谢谢
【问题讨论】:
标签: matlab