课程实验及解决方案

内容发布更新时间 : 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

>>灞曞紑鍏ㄦ枃<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi