当前位置:文档之家› 数学建模实验报告4酵母培养物离散阻滞增长模型

数学建模实验报告4酵母培养物离散阻滞增长模型

一.实验题目:
已知从测量酵母培养物增长的实验收集的数据如表:
时刻/h 0 1 2 3 4 5 6 7 8 9 生物量/g 513.3 559.7 594.8 629.4 640.8 651.1 655.9 659.6 661.8
二.实验要求
1、作图分析酵母培养物的增长数据、增长率、与相对增长率.
2、建立酵母培养物的增长模型.
3、利用线性拟合估计模型参数,并进行模型检验,展示模型拟合与预测效果图.
4、利用非线性拟合估计模型参数,并进行模型检验,展示模型拟合与预测效果图.
5、请分析两个模型的区别,作出模型的评价.
三.实验内容
(1)对于此问,可直接根据数据作图
先求相对增长率随时间的变化,程序如下:
k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
x=[9.6,18.3,29.0,47.2,71.1,119.1,174.6,257.3,350.7,441.0,513.3,559.7,594.8,629.4,640.8,651. 1,655.9,659.6,661.8];
n=1;
for n=1:18
dx(n)=x(n+1)-x(n);
end
r=dx./x(1:18);
plot(0:17,r,'kv')
xlabel('时间k(小时)'),ylabel('增长率(%)')
title('增长率与时间')
模拟效果图如下:
时间 k(小时)
增长率 (%)
再求增长量随时间的变化,程序如下:
k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
x=[9.6,18.3,29.0,47.2,71.1,119.1,174.6,257.3,350.7,441.0,513.3,559.7,594.8,629.4,640.8,651.1,655.9,659.6,661.8]; n=1;
for n=1:18
dx(n)=x(n+1)-x(n); end
plot(0:17,dx,'ko')
xlabel('时间k (小时) '),ylabel('增长量 (克)') title('增长量与时间')
模拟效果图如下:
2
4
6
81012
14
16
18
时间 k(小时)
增长量 (克)
(2)建立酵母培养物的模型 k---时刻(小时);
x(k)---酵母培养物在第k 小时的生物量(克);
r(k)---用前差公式计算的生物量在第k 小时的增长率; r---生物量的固有增长率; N---生物量的最大容量。

在营养有限的环境下,假设用前差公式计算的增长率r(k)随着生物量x(k)的增加而线性递减,即
r_k=(x_(k+1)-x_k)/x_k=r*(1-x_k/N),k=0,1,2… 根据以上模型假设,即可建立离散阻滞增长模型 x_(k+1)=x_k+r*x_k*(1-x_k/N),k=0,1,2…
(3)首先,根据r_k 和x_k 的数据多项式拟合出(2)问中的r,N ;然后根据生物量的观测数据直接取x_0=9.6,用(2)问中的循环语句进行迭代计算,算出0~18小时酵母生物量的模拟值,并计算误差平方和,绘制模拟效果图和模拟误差图。

程序如下:t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
x=[9.6,18.3,29.0,47.2,71.1,119.1,174.6,257.3,350.7,441.0,513.3,559.7,594.8,629.4,640.8,651.1,655.9,659.6,661.8];
r=(x(2:19)-x(1:18))./x(1:18); a1=polyfit(x(1:18),r,1); r1=a1(2),N1=-a1(2)/a1(1) x1=x(1); for k=1:18
x1(k+1)=x1(k)+r1*x1(k)*(1-x1(k)/N1); end
resd1=x-x1;sse1=sum(resd1.^2) subplot(2,1,1),plot(t,x,'k*',t,x1,'ks')
axis([-1,19,0,670]),legend('观测值 ','模拟值 ',4) xlabel('时间 k(小时)'),ylabel('生物量 x_k(克)') title('离散阻滞增长模型的线性模拟效果图 ') subplot(2,1,2),plot(t,resd1,'k.',[-1,19],[0,0],'k') axis([-1,19,-40,40])
xlabel('时间k(小时)'),ylabel('模拟误差') title('离散阻滞增长模型的线性模拟误差')
线性拟合结果如下:
R1=0.66935 N1=635.71 sse1=6293.2
线性模拟效果图如下:
0200400
600时间 k(小时)
生物量 x k
(克)
离散阻滞增长模型的线性模拟效果图
2
4
6
81012
14
16
18
-40
-2002040时间k(小时)
模拟误差
离散阻滞增长模型的线性模拟误差
(4)对于此问,可以利用MATLAB统计工具箱的非线性拟合函数nlinfit计算参数r和N 以及初始值x_0的值,使得误差平方和达到最小值。

困难在于待拟合的函数模型不是熟悉的初等函数,而是数列递推关系,但是非线性拟合函数nlinfit仍然胜任。

程序如下:
函数:
function y=Untitled(b,x)
y=zeros(size(x));
y(1)=b(3);
for k=2:length(x)
y(k)=y(k-1)+b(1).*y(k-1).*(1-y(k-1)./b(2));
end
脚本:
t=0:18;
x=[9.6,18.3,29.0,47.2,71.1,119.1,174.6,257.3,350.7,441.0,513.3,559.7,594.8,629.4,640.8,651. 1,655.9,659.6,661.8];
[a2,resd2]=nlinfit(t,x,@Untitled,[0.5,660,9.6])
sse2=sum(resd2.^2)
subplot(2,1,1)
plot(t,x,'k*',t,Untitled(a2,t),'ks')
axis([-1,19,0,670])
legend('观测值','模拟值',4)
xlabel('时间k(小时)'),ylabel('生物量x_k(克)')
title('离散阻滞增长模型的非线性模拟效果图')
subplot(2,1,2)
plot(t,resd2,'k.',[-1,19],[0,0],'k')
axis([-1,19,-40,40])
xlabel('时间k(小时)'),ylabel('模拟误差')
title('离散阻滞增长模型的非线性模拟误差')
非线性拟合结果如下:
A2=0.56037 652.46 15
Sse2=1353.5
非线性模拟效果图如以下:
0200400
600时间 k(小时)
生物量 x k
(克)
离散阻滞增长模型的非线性模拟效果图
2
4
6
81012
14
16
18
-40
-2002040时间 k(小时)
模拟误差
离散阻滞增长模型的非线性模拟误差
(5)两个模型的区别及评价分别如下:
由线性拟合得出的结果和模拟效果图可知,计算结果即固有增长率r=0.66935,大容量N=635.71,误差平方和等于6293.2。

计算结果以及模拟误差图表明,线性拟合能够用离散阻滞模型模拟酵母培养物生物量的变化趋势,前半段的误差很小,但后半段的误差很大,误差平方和很大。

另外,最大容量N 的估计值偏低。

总之,线性拟合的模拟效果不够令人满意。

由拟和结果及模拟效果图可知,固有增长率r=0.56073,最大容量N=652.46,初始值x_0=15,误差平方和等于1353.5,计算结果以及模拟效果图和模拟误差图表明,非线性拟合能够更好地用离散阻滞增长模型模拟酵母培养物生物量的变化趋势,误差平方和比线性拟合明显下降。

另外最大容量N 的估计值也比线性拟合更合理。

总之,非线性拟合的模拟效果比较令人满意。

今后计算差分方程的数据拟合问题,一般都采用这种非线性拟合方法。

相关主题