2016-02-06 26 views
5

Girdileri almak ve Verhulst Formülünü k yıl sayısı olarak hesaplayan bir tablo için bir program atadım. (N), gp^2/M -Verhulst’ın Formülünün uygulanmasında bir sorun mu var?

s (n + 1) = (1 + g-h) p (n):

http://www.resnet.wm.edu/~jxshix/math410/Verhulst.html

denklemi aşağıdaki gibidir: Bu denklem kullanılır.

İşte yaptığım program.

> #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; 

} 

ben g ayarlar yukarıdaki bağlantıyı, örnekler kullanarak kodumu test etmek talimatı verildi: ben Sizlerin aracılığıyla elemek için o sıkıcı olacağını hissediyorum girdi istenen benim kodu bölümünü kaldırdık (büyüme hızı) sırasıyla 125, 250 ve 300'de. Programımın ilk iki sayı için oldukça doğru olduğunu hissediyorum (grafikleri oldukça doğru bir şekilde eşleştiriyorlar) ama 300'ü eklediğimde sunulan grafikten çok farklı değerler elde ediyorum. Yukarıdaki kodu kodumda ifade etmemde veya grafik özellikle çok kötüyse, bir hata yapıp yapmadığımı bilmiyorum. Yukarıda belirtilen sitede belirtilen parametreleri kullanarak her şeyi sabit tuttum. Yukarıdaki linkte 3 grafikten eyeballed ettik çıkış Karşı

1 35 
2 96 
3 88 
4 102 
5 75 
6 116 
7 37 
8 100 
9 80 
10 112 

: Burada

ikinci nüfusu, = 300. Birinci sütun yıl ben g set olsun çıkıştır. Yine, bu tahminler, bu yüzden onların doğruluğunu teyit etmez edemez:

1 25 
2 70 
3 120 
4 33 
5 94 
6 90 
7 98 
8 86 
9 92 
10 70 

Ben birinci ve ikinci grafikler maç ancak üçüncü oldukça şaşırtıcı olduğunu çıkışlarını sahip olabilirsem. Mı denklem ses ?:

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; 
} 
+2

yok üretecek o. OP, gerçekten (olası) hataları bulmamızı istiyor. Codereview sitesi >> çalışmak için sadece << kod içindir. –

cevap

3

Bildirim 3 grafikte yıl 0 nüfus C++ benim uygulaması değil 20. Değişim, başlangıçta 120 girişinizi 120 ise ve çok daha yakın değerler ile bitireceğiz Masanın üstüne gözlerini soktun. Sağladığınız kod tipleri, çıkış olduğunda

verilerinizi Leaving:

1 24 
2 74 
3 117 
4 34 
5 95 
6 90 
7 99 
8 82 
9 110 
10 55 
11 118 
12 31 
13 89 
14 101 
15 78 
16 114 
17 43 
18 108 
19 60 
20 120 

hatası yuvarlama için 0.5 ekleyerek hesaba işaret etmek istiyorum gereksizdir için türünü double kullanırsanız tüm senin değerler:

#include <iostream> 
using namespace std; 

int main() { 
    int k = 20; // number of years to calculate for 
    double pn = 120; // the population of animals for the first year 
    double g = 300; // rate of growth 
    g = g/100.00; 
    double h = 20; // rate of animal death/animals leaving population 
    h = h/100.00; 
    double M = 100; // carrying capacity of the ecosystem 

/* 
Implementing Verhulst's Formula in C++ 
*/ 

    int i; 
    double pop; 
    for (i = 1; i <= k ; i++) 
    { 
    pop = (((1 + (g - h)) * pn) - g*(pn*pn)/M); // the equation 
    pn = pop; // this takes the new value of pop and inserts it as pn, to be looped until i <= k 
    cout << i << " " << (int)pop << endl; 
    } 

    return 0; 
} 

öyle değil

1 24 
2 73 
3 116 
4 34 
5 94 
6 91 
7 97 
8 85 
9 105 
10 67 
11 119 
12 25 
13 76 
14 115 
15 39 
16 102 
17 73 
18 117 
19 32 
20 91 
+0

Bunun için çok teşekkür ederim - bence bu, çıktılarımdaki uyumsuzluğu açıklıyor. –

İlgili konular