内容发布更新时间 : 2025/4/1 0:01:49星期一 下面是文章的全部内容请认真阅读。
td?xxb?2xa?2xd??td???2x1xd?1xc??1xd?21源时蓝鲸数目会减少,其减少速度与当时蓝鲸的数目成线性关系,即
dx1??cx1(t) (1) . dt当有食物来源时,蓝鲸的数目会增加。增加的速度和它捕食的数目有关,即
dx1= dx1(t) x2(t) (2) . dt合并(1)和(2),得到蓝鲸变化速度满足的微分方程
dx1??cx1(t)? dx1(t) x2(t). (3) dt同样,在没有蓝鲸时,磷虾的增加速度满足
dx2=ax(t). (4) dt考虑到被捕食情况,则磷虾的数目满足
dx2=ax(t)-bx1(t) x2(t). (5) dt合并(3)和(5),得到著名的Lotka-Volterra方程
(6)
其中a,b,c,d均为正常数。
(6)是一个非线性常微分方程组,不可能有解析解。
实验要求:假设a?1.2,b?0.6,c?0.8,d?0.3,而且初始值为x1(0)=2,
x2(0)=1.
1)
用不同的数值方法求解(6)。把x1(t) 和x2(t)画在同一张
图上并给以解释。
6
2) 把(6)的两个方程相除,得到
dx1?cx1?dx1x2 (7) ?dx2ax2?bx1x2用不同的数值方法解出x2~x1之间的函数关系。并把它画在以x1,x2为坐标的图上,对所得结果加以解释。
附1:部分数值分析常用实验程序
1)Guass列主元消元法解线性方程组:
//高斯列主元消去法求解非线性方程组源程序清单 # define NUMBER 20 # include \
float A[NUMBER][NUMBER+1] ,ark; int flag,n;
exchange(int r,int k) { int i;
for(i=1;i<=n+1;i++) A[0][i]=A[r][i];
for(i=1;i<=n+1;i++) A[r][i]=A[k][i];
for(i=1;i<=n+1;i++) A[k][i]=A[0][i];} float max(int k) { int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp) { temp=fabs(A[i][k]); flag=i;} return temp; } main()
{ float x[NUMBER],b[NUMBER]; int r,k,i,j;
me: printf(\用Gauss列主元消元法解线性方程组\ printf(\ scanf(\
printf(\现在输入系数矩阵A和向量b:\\n\\n\
7