偏微分方程解法總結「matlab解偏微分方程的函數」

一.Malthus模型(指數模型)
(1)提出以及假設
(2)影響人口增長的因素
(3)建立模型
(4)結論
(5)舉例(Matlab代碼)
二.Logistic模型(阻滯增長模型)
(1)背景
(2)建立 r 的關係式
(3)模型建立
(4)結論
(5)舉例(Matlab代碼)
三.總結

1一.Malthus模型(指數模型)

(1)提出以及假設

指數增長模型,由馬爾薩斯在1798年提出

基本假設:人口(相對)增長率r是常數(r很小)
相對增長率 = 出生率 - 死亡率

(2)影響人口增長的因素

人口的基數
出生率和死亡率
年齡結構
性別比例
工農業生產水平
醫療水平
政府出台的政策
民族政策

(3)建立模型

我們用 x(t) 表示 t 時刻的人口

那麼有

人口增長模型及其在matlab中的操作運用

結論:隨著時間的增加,人口按指數規律無限增長

(4)結論

可以進行短期的人口預測,較為符合

但是之後誤差就很大了

(5)舉例(Matlab代碼)

eg:已知一組數據如下(懶得打在表格裡面了,大家湊合著看吧):

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

t為年份,p為對應的人口數量,單位為:百萬

因為馬爾薩斯模型為指數函數為了線性擬合數據,我們對其進行如下操作:

兩邊同時取對數:

可得:ln(x) = ln(x0) + rt

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

y = log(p); %求ln(p)函數值

a = polyfit(t,y,1) %用一次多項式對t和y進行擬合

z = polyval(a,t); %求得以a為係數的多項式在t處的函數值

z1 = exp(z)

r = a(1)

plot(t,p,’bo’,t,z1,’r’) %分別畫出散點圖以及擬合曲線圖

xlabel(‘時間’);

ylabel(‘人口數量’);

legend(‘實際數據’,’理論曲線’);

作圖如下(短期內基本吻合):

人口增長模型及其在matlab中的操作運用

%結果如下,增長率r=0.0274

a =

0.0274 -47.6717

z1 =

列 1 至 5

4.1884 5.5105 7.2498 9.5382 12.5488

列 6 至 10

16.5097 21.7209 28.5769 37.5969 49.4640

列 11 至 12

65.0769 85.6179

r =

0.0274

當我們用更多的數據進行長期擬合是就會發現該方法做出來的差別較大!

二.Logistic模型(阻滯增長模型)

(1)背景

由於人口不可能無限制的增長,當人口達到一定數量後,那麼增長率就會下降。

我們要模擬這種增長率的變化

這裡簡化的將增長率 r 看做是人口 x 的減函數

(2)建立 r 的關係式

假設 r(x) = r – sx (r,s>0) 當x很小時,r仍為固有增長率,s為待求係數

xm 是當前環境可以容納的最大人口容量

人口增長模型及其在matlab中的操作運用

(3)模型建立

指數增長模型:

人口增長模型及其在matlab中的操作運用

(4)結論

最終得到 s 型增長曲線,x增長先快後慢,最終接近峰值 xm

該模型同樣可以用於種群數量中(魚群的捕撈要控制在 xm/2 附近,而害蟲的防治要遠遠低於 xm / 2)

(5)舉例(Matlab代碼)

已知一組數據同上:

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

t為年份,p為對應的人口數量,單位為:百萬

人口增長模型及其在matlab中的操作運用

下面代碼由兩個文件構成:

%代碼如下

t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990];

p = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4];

t = t-1780; %整體減去1780

x0 = [150,0.15]; %待定參數x的初值(自己根據實際情況給出初值,之後再不斷調整;其中第一個參數為最大人口數,第二個參數為人口增長率)

x = lsqcurvefit(‘population’,x0,t,p) %使用函數求得最終的(xm,r)

p1 = population(x,t);

plot(t+1780,p,’o’,t+1780,p1,’-r*’)

title(‘Logistic模型擬合圖’)

xlabel(‘年’);

ylabel(‘人口數’);

legend(‘實際數據’,’理論數據’)

函數m文件

%population.m函數文件

function g = population(x,t)

%UNTITLED2 此處顯示有關此函數的摘要

% 此處顯示詳細說明

g = x(1)./(1+(x(1)/3.9-1)*exp(-x(2)*t));

end

作圖如下:

人口增長模型及其在matlab中的操作運用

結果如下:

%第一個參數為 Xm,第二個參數為 r

x =

337.4308 0.0257

三.總結

Malthus 和 Logistic 均為宏觀模型,它們考慮的方面比較少。而且不考慮年齡分布。

以下的微觀模型考慮年齡結構

1)Leslie差分方程模型

2)Verhulst偏微分方程模型

3)Pollard隨機方程模型

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/268094.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:07
下一篇 2024-12-16 13:07

相關推薦

發表回復

登錄後才能評論