我似乎想不出如何解决这个问题。程序使用一秒钟来表示无限循环中运行期间的一年。在循环中,我需要解这个方程。
微分方程: dP/dt = rP(1-P/K) - hP
其中P(t)是随时间t(以年为单位)变化的人口。
这些符号的含义是: dP/dt是瞬时人口增长率(以年增长率为单位),r是自然生殖增长率(以每年部分增长)K是人口承载能力(环境所能支持的最大人口)h是种群被剔除的收获率(作为每年的部分损失)。
取决于运行时秒(每秒钟代表一年),下面是正确的示例
Simulation run time minute = 0; second = 3; millisec = 156
Year of simulation = 3
Rate of population change = 5180.209961正如您所看到的,在执行我的代码时,我无法计算出正确的人口变化。这取决于秒,所以它会变化。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int option = 0;
float initialPopulation = 0; //starting population
float maximumPopulation = 0; //max population
float harvestingRate = 0;
float fractionGrowthPopulationRate = 0;
int minutes = 0;
int milliseconds = 0;
char quit;
int forever = 1;
float total = 0.0;
printf("Population Simulation\n");
printf("1. run the simulation\n");
printf("2. Quit\n");
scanf("%d", &option);
if (option == 1) {
printf("ENTER SIMULATION PARAMETERS\n");
printf("Initial population (typically 900000)?");
scanf("%d", &initialPopulation);
printf("Maximum population the environment can support (typically 1000000)? \n");
scanf("%d", &maximumPopulation);
printf("Initial harvesting rate (fraction per year - 0 for no\n harvesting)? ");
scanf("%f", &harvestingRate);
printf("Natural fractional growth population rate (typically 0.2 per year)?\n");
scanf("%f", &fractionGrowthPopulationRate);
printf("\n");
}
else if (option == 2) {
return 0;
}
while (forever != 'q') {
printf("starting simulation\n");
clock_t t;
t = clock();
//confused on how to code the formula
total = fractionGrowthPopulationRate * initialPopulation* (1 - initialPopulation / maximumPopulation) - harvestingRate*initialPopulation;
t = clock() - t;
int seconds = ((int)t) / CLOCKS_PER_SEC; // in seconds
printf("Simulation run time minute = %d; second = %d; millisec = %d\n", minutes, seconds, milliseconds);
printf("*****************************************************************\n");
printf("Year of simulation = %d\n", seconds); //every seconds equals 1 year
printf("Rate of population change = %f\n", total); //total should be calculated
printf("*****************************************************************\n");
printf("Press w / e to increase / decrease harvesting rate.\n");
printf("Current harvesting rate : %f\n", harvestingRate);
printf("Press p / o to increase / decrease Max population supported.\n");
printf("Current Max population : %d\n", maximumPopulation);
printf("Press k / l to increase / decrease growth rate.\n");
printf("Current growth rate : %f\n", fractionGrowthPopulationRate);
printf("Press q to quit.\n");
fflush(stdin);
scanf("%c", &forever);
}
return 0;
}发布于 2016-04-17 18:04:46
以下代码:
processParameters()中,确保包含达到最大人口时的代码。以下是拟议的守则:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> // printf(), scanf()
#include <stdlib.h> // exit(), EXIT_FAILURE
//#include <time.h>
#include <string.h> // strerror()
#include <errno.h> // errno
// prototypes
void inputParameters( void );
void processParameters( void );
void displayResults( void );
int handleMenu( void );
// global data
float initialPopulation = 0.0f; //starting population
float maximumPopulation = 0.0f; //max population
float harvestingRate = 0.0f;
float fractionGrowthPopulationRate = 0.0f;
float total = 0.0f;
int minutes = 0;
int seconds = 0;
int milliseconds = 0;
int main(void)
{
int quit = 0;
while( !quit )
{
int option = handleMenu();
switch( option )
{
case 1:
inputParameters();
processParameters();
displayResults();
break;
case 2:
quit = 1;
break;
default:
printf( "invalid option: %d try again\n", option );
break;
} // end switch
} // end while
return 0;
} // end function: main
void inputParameters()
{
printf("ENTER SIMULATION PARAMETERS\n");
printf("Initial population (typically 900000)?");
if( 1 != scanf("%f", &initialPopulation) )
{
fprintf( stderr, "input of initial population failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
printf("Maximum population the environment can support (typically 1000000)? \n");
if( 1 != scanf("%f", &maximumPopulation) )
{
fprintf( stderr, "input of maximum population failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
printf("Initial harvesting rate (fraction per year - 0 for no harvesting)? ");
if( 1 != scanf("%f", &harvestingRate) )
{
fprintf( stderr, "input of omotoa; jarvestomg rate failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
printf("Natural fractional growth population rate (typically 0.2 per year)?\n");
if( 1 != scanf("%f", &fractionGrowthPopulationRate) )
{
fprintf( stderr, "input of initial population failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
printf("\n");
} // end function: inputParameters
void displayResults()
{
printf("Simulation run time minute = %d; second = %d; millisec = %d\n",
minutes, seconds, milliseconds);
printf("*****************************************************************\n");
printf("Year of simulation = %d\n", seconds); //every seconds equals 1 year
printf("Rate of population change = %f\n", total); //total should be calculated
printf("*****************************************************************\n");
printf("Press w / e to increase / decrease harvesting rate.\n");
printf("Current harvesting rate : %f\n", harvestingRate);
printf("Press p / o to increase / decrease Max population supported.\n");
printf("Current Max population : %f\n", maximumPopulation);
printf("Press k / l to increase / decrease growth rate.\n");
printf("Current growth rate : %f\n", fractionGrowthPopulationRate);
printf("Press q to quit.\n");
} // end function: displayResults
int handleMenu()
{
int option = 0;
printf("\nPopulation Simulation\n");
printf("1. run the simulation\n");
printf("2. Quit\n");
if( 1 != scanf("%d", &option) )
{
fprintf( stderr, "scanf failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
return( option );
} // end function: handleMenu
void processParameters()
{
int simulationDuration = 0;
printf( "how long is simulation to run:");
if( 1 != scanf( "%d", &simulationDuration ) )
{
fprintf( stderr, "input of simulation Duration failed due to: %s\n", strerror( errno ) );
exit( EXIT_FAILURE );
}
printf("\nstarting simulation\n");
total = initialPopulation;
for( int i=0; i<simulationDuration; i++ )
{
//confused on how to code the formula
total = fractionGrowthPopulationRate * total * (1 - total / maximumPopulation) - harvestingRate*initialPopulation;
seconds = i; // in seconds
}
printf( "\nsimulation complete\n");
} // end function: processParametershttps://stackoverflow.com/questions/36679244
复制相似问题