【发布时间】:2015-12-06 01:27:42
【问题描述】:
这是我模拟 Levy 运动的小脚本:
clear all;
clc; close all;
t = 0; T = 1000; I = T-t;
dT = T/I; t = 0:dT:T; tau = T/I;
alpha = 1.5;
sigma = dT^(1/alpha);
mu = 0; beta = 0;
N = 1000;
X = zeros(N, length(I));
for k=1:N
L = zeros(1,I);
for i = 1:I-1
L( (i + 1) * tau ) = L(i*tau) + stable2( alpha, beta, sigma, mu, 1);
end
X(k,1:length(L)) = L;
end
q = 0.1:0.1:0.9;
quant = qlines2(X, q, t(1:length(X)), tau);
hold all
for i = 1:length(quant)
plot( t, quant(i) * t.^(1/alpha), ':k' );
end
stable2 返回一个带有给定参数的stable random variable(在这种情况下,您可以用normrnd(mu, sigma) 替换它,这并不重要); qlines2 返回绘图所需的分位数。
但我不想在这里谈论数学。我的问题是这个实现很慢,我想加快速度。不幸的是,计算机科学不是我的主要领域——我听说过一些关于记忆化、矢量化等方法的知识,还有很多其他技术,但我不知道如何使用它们。
例如,我很确定我应该以某种方式替换这个肮脏的双 for 循环,但我不确定该怎么做。
编辑:也许我应该使用(并学习......)另一种语言(Python、C、任何功能性语言)?我一直认为 Matlab/OCTAVE 是为数值计算而设计的,但如果改变,那是哪一个?
【问题讨论】:
-
脚本看起来并不太复杂,所以我大胆猜测您将通过优化的 Matlab 实现获得合理的性能。 Matlab 对新手也很宽容——除非最好的性能是绝对必要的,否则我觉得你现在应该坚持下去。特别是因为你现在已经在那里实现了你的模拟:)
标签: performance matlab optimization