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!