! A simple linear population model (PoplnMod.lng);
! Keywords: Eigenvalue, Population growth;
SETS:
GROUP: X0;
TIME;
GXG( GROUP, GROUP): A;
TXG( TIME, GROUP): X , RATIO;
ENDSETS DATA:
GROUP = BUNNIES CLOVER FOXES;
! Initial population in time period 0.
You can get different growth rates, depending
upon initial configuration;
X0 =
! 1st eigenvector;
!73507 33817 58763;
! 2nd eigenvector;
!82067 37069 43485;
! 3rd eigenvector;
83970 43307 32765;
! A(i,j) = effect on GROUP i of GROUP j in each time period.
Notice, Clover is very helpful to Bunnies, Foxes not so much;
A =! Bunnies Clover Foxes;
0.612 2.291 -1.200
-0.295 2.321 -0.560
0.500 -0.050 0.110 ;
! Number of time periods we will simulate;
TIME = 1..9;
ENDDATA
CALC:
@SET( 'TERSEO',2); ! Output level (0:verb, 1:terse, 2:only errors, 3:none);
! Compute population of GROUP s in time period 1 based on period 0;
@FOR( GROUP( s):
X(1,s) = @SUM( GROUP(i): X0(i)*A(s,i));
);
! Compute populations in period t based on period t-1;
@FOR( TIME( t) | t #GT# 1:
@FOR( GROUP( s):
X(t,s) = @SUM( GROUP(i): X(t-1,i)*A(s,i))
);
);
@WRITE(' ');
@FOR( GROUP(s):
@WRITE(' Growth');
);
@WRITE(@NEWLINE(1));
@WRITE(' Period');
@FOR( GROUP(s):
@WRITE(' ',@FORMAT( GROUP( s),"9s"),' Rate ');
);
@WRITE(@NEWLINE(1));
@FOR( GROUP(s):
@WRITE(' ',@FORMAT(X0(s),"11.1F"),' ');
);
@WRITE(@NEWLINE(1));
@FOR( TIME(t):
@WRITE(@FORMAT(t,"3.0F"));
@FOR( GROUP(s):
@IFC( t #EQ# 1:
RATIO = X(t,s)/X0(s);
@ELSE
RATIO = X(t,s)/X(t-1,s);
);
@WRITE(' ', @FORMAT(X(t,s),"11.1F"), ' ',@FORMAT(RATIO,"6.3F"));
);
@WRITE(@NEWLINE(1));
);
ENDCALC
|