Unrecognized Variable despite being defined
    14 ビュー (過去 30 日間)
  
       古いコメントを表示
    
    Kailin Johnsson
 2020 年 11 月 11 日
  
    
    
    
    
    コメント済み: Kailin Johnsson
 2020 年 11 月 12 日
            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');

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!


