Ecco il mio piccolo script per la simulazione di Levy movimento:Accelerare simulazione dell'algoritmo movimento 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
Dove stable2
restituisce un stable random variable con determinati parametri (è possibile sostituirlo con normrnd(mu, sigma)
per questo caso, non è fondamentale); qlines2
restituisce i quantili necessari per il tracciamento.
Ma non voglio parlare di matematica qui. Il mio problema è che questa implementazione è piuttosto lenta e vorrei accelerarla. Sfortunatamente, l'informatica non è il mio campo principale - ho sentito parlare di metodi come la memoizzazione, la vettorizzazione e che ci sono molte altre tecniche, ma non so come usarle.
Ad esempio, sono abbastanza sicuro che dovrei sostituire questo sporco doppio per-loop in qualche modo, ma non sono sicuro di cosa fare invece.
EDIT: Forse dovrei usare (e imparare ...) un altro linguaggio (Python, C, qualsiasi altro funzionale)? Ho sempre pensato che Matlab/OCTAVE sia progettato per il calcolo numerico, ma se il cambiamento, allora per quale?
Lo script non sembra troppo complesso, quindi azzarderò un'ipotesi di prestazioni ragionevoli con un'implementazione Matlab ottimizzata. Matlab è anche abbastanza indulgente per un novizio - a meno che le migliori prestazioni possibili siano una necessità assoluta, sento che dovresti seguirlo per ora.Soprattutto da quando hai implementato la tua simulazione ora :) – mikkola