Unrecognized Variable despite being defined
8 次查看(过去 30 天)
显示 更早的评论
Hello,
I seem to be having this issue of an unrecognize variable, despite being defined, when trying to run a simple Gompertz equation. I have tried removing the clear and clc becaue that was the issue last time, however it did not work. I have attached a screenshot and my code below. Thanks!
%Gompertz Equation
clear
clc
% Parameter and intial condtions
r= (0.349);
P= [2.913 3.929 5.308 7.239 9.638 12.866 17.069 23.191 39.818 50.189 62.947 76.212 92.228 106.021 122.775 132.164 150.697 179.323 203.302 226.545 248.709 281.421 308.745];
k2= 330.0;
% Time interval
t = (1790:10:2010);
%Gompertz Equation
% for i=1:length(t)
%GM(i)= -r*P(i)*log((P(i)/k2));
%end
for i=1:length(t)
LL(i,1) = exp((exp(-j)).*log(LL(i-1,1))+((1-exp(-j)).*log(k)));
end
%% Fix K = 3.3e+8
k2 = 330.0;
B = log(P(2:23,1)./k2);
A = log(P(1:22,1)./k2);
X = A\B;
j = -log(X(1,1));
P0 = P(1,1);
LL = zeros(23,1);
LL(1,1) = P0;
% Time Interval
a=(1790:10:2010)';
% Population
j= [3.929 5.308 7.239 9.638 12.866 17.069 23.191 31.443 39.818 50.189 62.947 76.212 92.228 106.021 122.775 132.164 150.697 179.323 203.302 226.545 248.709 281.421 308.745]';
% Plot
plot (a,j,'bo');hold on
plot(t,GM,'r');
line_color=['r'];
hold off
legend('Census Data','Gompertz Model');
axis([1790 2010 0 500]);
title('US Population Data');
ylabel('Population (Millions)');
xlabel('Years');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/410878/image.png)
0 个评论
采纳的回答
Cris LaPierre
2020-11-11
The problem is you are using LL to define the values of LL. The first time through, LL has not yet been defined. Incidentally, you also use k in the equation, but define a variable k2.
Upon fixing that, you will encounter another error that indices must be real positive integers. This is because, when i=1, log(LL(i-1,1)) will try to take the log of LL(0,1).
My suggestion is to first define a value for LL(1,1), and then start your for loop at i=2.
% Parameter and intial condtions
k= 330.0;
% Time interval
t = (1790:10:2010);
LL = 0;
for i=2:length(t)
LL(i,1) = exp((exp(-j)).*log(LL(i-1,1))+((1-exp(-j)).*log(k)));
end
LL
8 个评论
Cris LaPierre
2020-11-11
Also, because of how you defined j in the latest versino of your code, the equation inside your for loop now returns an array as a result instead of a single number. This will cause an assignment error since you are trying to assign the result to a single element of LL.
With all these indexing issues, I'm going to suggest you take a minute to go through Ch 5 of MATLAB Onramp.
更多回答(1 个)
Walter Roberson
2020-11-11
for i=1:length(t)
LL(i,1) = exp((exp(-j)).*log(LL(i-1,1))+((1-exp(-j)).*log(k)));
You are defining LL(i,1) in terms of LL(i-1,1) but at that point in the code, you have not assigned anything at all to LL yet.
Note too that your i starts from 1, and i-1 would be 0, so if LL did exist, you would be trying to index LL(0,1)
LL(1,1) = P0;
That initialization of LL(1,1) is not until a number of lines after you try to compute LL based upon exp() and so on. Furthermore, the line before that in the code
LL = zeros(23,1);
would throw away whatever had been stored in LL and replace it with zeros.
You need to initialize LL before the for i loop, and your for loop should start from 2.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!