Unrecognized Variable despite being defined

1 view (last 30 days)
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');

Accepted Answer

Cris LaPierre
Cris LaPierre on 11 Nov 2020
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
LL = 23×1
0 0 0 0 0 0 0 0 0 0
  8 Comments
Cris LaPierre
Cris LaPierre on 11 Nov 2020
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.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 11 Nov 2020
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.

Categories

Find more on Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!