Zostałem przypisany program do pobierania danych wejściowych i wyprowadzania tabeli, która obliczała wzór Verhulsta na k liczbę lat. Że stosuje się równania:Czy coś jest nie tak z moją implementacją Formuły Verhulsta?
http://www.resnet.wm.edu/~jxshix/math410/Verhulst.html
Równanie poniżej:
p (n + 1) = (1 + G-H), p (n) - GP (n)^2/m.
Oto program, który zrobiłem. I usunęliśmy część mojego kodu, który żąda wejście jak czuję, że byłoby uciążliwe dla Was przesiać przez:
> #include <iostream>
using namespace std;
int main() {
int k = 20; // number of years to calculate for
int pn = 10; // the population of animals for the first year
double g = 275; // rate of growth
g = g/100.00;
double h = 20; // rate of animal death/animals leaving population
h = h/100.00;
int M = 100; // carrying capacity of the ecosystem
/*
Implementing Verhulst's Formula in C++
*/
int i;
int pop;
for (i = 1; i <= k ; i++)
{
pop = (((1 + (g - h)) * pn) - g*(pn*pn)/M) + .5; // the equation
pn = pop; // this takes the new value of pop and inserts it as pn, to be looped until i <= k
cout << i << " " << pop << endl;
}
return 0;
}
polecono mi sprawdzić mój kod za pomocą przykładów z linku powyżej, który określa g (stopa wzrostu) odpowiednio na poziomie 125, 250 i 300. Czuję, że mój program jest dość dokładny w przypadku pierwszych dwóch liczb (pasują one do wykresu dość dokładnie), ale po podłączeniu 300 otrzymuję bardzo różne wartości z przedstawionego wykresu. Nie jestem pewien, czy popełniłem jakiś błąd w wyrażaniu powyższego w moim kodzie, czy wykres jest szczególnie okropny. Utrzymałem wszystko inne na stałym poziomie, używając parametrów wspomnianych na wyżej wymienionej stronie.
Oto wynik mam ustawić g = 300. Pierwsza kolumna to lat, drugi jest populacja:
1 35
2 96
3 88
4 102
5 75
6 116
7 37
8 100
9 80
10 112
Versus wyjściu mam eyeballed od 3 wykresem w powyższy link. Ponownie, są to przypuszczenia, więc nie mogę ręczyć za ich dokładność:
1 25
2 70
3 120
4 33
5 94
6 90
7 98
8 86
9 92
10 70
Że mogę wyjść, które odpowiadają pierwszej i drugiej wykresy, ale nie trzeci jest dość kłopotliwy. Czy moja implementacja w C++ dźwięku równania ?:
int i;
int pop;
for (i = 1; i <= k ; i++)
{
pop = (((1 + (g - h)) * pn) - g*(pn*pn)/M) + .5; // the equation
pn = pop; // this takes the new value of pop and inserts it as pn, to be looped until i <= k
cout << i << " " << pop << endl;
}
No nie. OP naprawdę prosi nas o znalezienie (możliwych) błędów. Witryna codereview służy do >> pracy tylko z kodem <<. –