Why is my while loop not working?
显示 更早的评论
From this code, I am looking to get the nll values for all s = 0:999 where s is a parameter. When I run it, it runs very slow and only gives out one value of nll. Can anyone help me with getting the nll values for all values of the parameter s from 0 to 999.
% Initial parameter values
s = 0;
mu = 0.1;
om = 0.01;
% AT is a row vector
while s<=999
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);
j = 1:length(lambda);
nll = -sum(j.*log(lambda(j)))+sum(lambda(j));
end
s = s+1;
end
5 个评论
David Hill
2021-7-8
Provide the equation you are trying to solve. I would be guessing otherwise.
Is nll supposed to be a 2D rectangular array, or is it supposed to be a triangular array or a vector? Obviously, the code as given simply generates a scalar output, but this:
t = s+1:length(AT)
implies that the output is a triangular matrix of some shape, since the number of inner loop cycles varies with each pass of the outer loop.
For clarification:
a = 1:10
b = 3+1:10
c = 3+(1:10)
It doesn't make sense that the output should be a vector either, since nothing in the inner loop appears to depend prior passes. It would just be discarding calculated data.
EDIT:
Here's this. I have no idea if this even makes sense, but it makes numbers. I doubt it's right, but I have no idea what it's supposed to do.
AT = 1:10;
% Initial parameter values
mu = 0.1;
om = 0.01;
srange = [0 9];
s = srange(1):srange(2);
nll = zeros(numel(AT),numel(s));
for si = 1:numel(s)
t = s(si)+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);
% this changes size only for the first pass, which seems wrong
% this means col1 values of nll are skewed wrt other columns
j = 1:length(lambda);
% store all the results
nll(ti,si) = -sum(j.*log(lambda(j)))+sum(lambda(j));
end
end
nll
Leo Tu
2021-7-8
David Hill
2021-7-13
Better describe the equation of lambda with respect to s and your constants.
KSSV
2021-7-14
One reason for slow is you have not initiated lambda.
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Graphics Performance 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!