# How to perform this for loop for multiple parameter values

2 ビュー (過去 30 日間)
Leo Tu 2021 年 7 月 7 日

I have the following script and vector of temperatures. I need to run it for parameter values of s=0:1:999, mu=0.1:0.1:100, om=0.01:0.01:10, i.e I need to run the script so many times such that all combinations of the parameters are used. I should end up with 1000^3 nll values stored in an array or table.
If anyone could offer some advice on how to approach this, it would be much appreciated.
% T is temperatures, t = time in days
T = T'; % from column vector to row vector
AT = T-min(T); % this is the adjusted positive temperatures
s = 0; % lag in days
mu = 0.1;
om = 0.01; % omega
for t=s+1:length(AT)
k = abs(s:-1:(s-t+1));
id=[(t-1):-1:0]+1;
lambda(t) = mu+sum(om.^k.*AT(id))/sum(om.^k);
end
for j=1:length(lambda)
nll = -sum(j*log(lambda(j)))+sum(lambda(j));
end
##### 4 件のコメント表示非表示 3 件の古いコメント
Leo Tu 2021 年 7 月 8 日
@Are Mjaavatten This is now my updated code
% parameter values
srange = [0 9];
om = 0.1;
mu = 0.1;
r = mypoiss(5,om,mu);
s = srange(1):srange(2);
nll = zeros(numel(s));
for si = 1:numel(s)
t = max(srange)+1:numel(AT);
for ti = 1:numel(t)
k = abs(s(si):-1:(s(si)-t(ti)+1));
id = ((t(ti)-1):-1:0)+1;
lambda(t(ti)) = mu+sum(om.^k.*AT(id))/sum(om.^k);
% store all the results
end
nll(si) = 0;
nll(si) = nll(si) - (r(ti).*log(lambda(t(ti)))) + (lambda(t(ti)));
end
where I am still loading the temperatures in same as before. r is the function
function r = mypoiss(s,om,mu)
% output; r is synthetic time series for number of cases
% input; s is lag, om is decay rate, mu is baseline rate
% T is temperatures, t = time in days
T = T'; % from column vector to row vector
AT = T-min(T); % this is the adjusted positive temperatures
for t=s+1:length(AT)
k = abs(s:-1:(s-t+1));
id=[(t-1):-1:0]+1;
lambda(t) = mu+sum(om.^k.*AT(id))/sum(om.^k);
end
r = poissrnd(lambda);
So now this loops for all values of s from 0 to 9 and gives 10 nll values stored in a 10x10. I now want the parameter s to be from 0 to 60 but mu and om I think I can get away with just 100 equally spaced points for each.
The problem here is that I don't know how I can loop this for all the other parameter values.
An example of what I am looking for is the second plot from here:
The axis should be the parameters s, mu, om and the colorbar should be values of nll.
Thank you for your help so far!

サインインしてコメントする。

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!