数学建模由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现_第1页
数学建模由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现_第2页
数学建模由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现_第3页
数学建模由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现_第4页
数学建模由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

由鸡兔同笼问题抽象出的一类线性方程组的解法并用代码进行实现摘要:线性方程组的解法,早在中国古代的数学著作《九章算术方程》章中已作了比较完整的论述。其中所述方法实质上相当于现代的对方程组的增广矩阵施行初等行变换从而消去未知量的方法,即高斯消元法。在西方,线性方程组的研究是在17世纪后期由莱布尼茨开创的。他曾研究含两个未知量的三个线性方程组组成的方程组。麦克劳林在18世纪上半叶研究了具有二、三、四个未知量的线性方程组,得到了现在称为克莱姆法则的结果。克莱姆不久也发表了这个法则。18世纪下半叶,法国数学家贝祖对线性方程组理论进行了一系列研究,证明了n元齐次线性方程组有非零解的条件是系数行列式等于零。大量的科学技术问题,最终往往归结为解线性方程组。因此线性方程组的数值解法在计算数学中占有重要地位。本文将对一般线性方程组的解法进行探究。关键字:线性方程组、高斯消元、矩阵相关知识:高斯消元法:基本思想:用逐次消去未知数的方法把原方程组化为上三角形方程组进行求解。求解分为两步:消元过程:用初等行变换把原方程组的系数矩阵化为上三角形矩阵。回代过程:对上三角方程组的最后一个方程求解,将求得的解逐步往上一个方程代入求解。一、问题的提出大约在1500年前,我国古代数学名著《孙子算经》中记载了一个有趣的问题。书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔?古人在《孙子算经》中是这样解决这个问题的:假设让鸡抬起一只脚,兔抬起两只脚,还有94÷2=47只脚;这时每只鸡一只脚,每只兔两只脚,笼子里只要有一只兔,则脚的总数就比头的总数多1;这时脚的总数与头的总数之差47-35=12,就是兔的只数。这个问题虽然很容易就得到了解决,但是在继续进行“龟鹤同游”和“人狗同行”问题的研究时,我们发现“鸡兔同笼”不只是代表着鸡、兔同笼的问题,有很多类似的问题都可以看成是“鸡兔同笼”问题,如牛鸡问题、汽车和自行车的轮子问题等等。所以,我们对这类问题进行抽象,以找出这一类问题的解法。问题分析对于“鸡兔同笼”问题不用方程的思想可以这样认为:假设全是鸡:2×35=70(只),比总脚数少的:94-70=24(只)兔:24÷(4-2)=12(只)鸡:35-12=23(只)将“鸡兔同笼”问题中的“鸡”和“兔”分别抽象为“x”和“y”,于是上述问题转化为求解二元一次方程组:针对“鸡兔同笼”的实际问题,其中假设的“x”和“y”都必须是非负整数,实际生活中的问题的解并不都是这样整齐的,于是我们继续将这个问题一般化,这一类的所有问题都可以归结为解方程组:即Ax=b其中,A=QUOTE,b=QUOTEQUOTE对比看:这样,就将与“鸡兔同笼”同类问题抽象为求二元一次方程组的解的问题。利用以前所学习过的知识,上述问题很容易求得答案。于是这一类问题很容易的得到解决。而在实际生活中,只存在两个变量的问题是很少的,例如下面的问题:营养减肥食谱剑桥减肥食谱——用33种食物精确提供31种营养现仅考虑三种食品三种营养成分如下表:营养每100克成分所含的营养(g)剑桥食谱一天所提供的营养脱脂牛奶大豆粉乳清蛋白质36511333碳水化合物52347445脂肪073同样将变量抽象为数学符号,设这三种食物的量分别为,,。可列方程组:其增广矩阵B为:用高斯消元法对矩阵化简:回代得解:=0.277,=0.392,=0.233.为了提供所需要的蛋白质、碳水化合物和脂肪总量,食谱中需要包含0.277单位的脱脂牛奶,0.392单位的大豆粉,0.233单位的乳清.由上面问题可以看出,将问题抽象为数学符号并用二元一次方程组和三元一次方程组的方法求解会使问题更加清晰,把事物符号化也更容易向别人解释阐述。三、问题的推广在实现了三元一次方程组求解之后,我们希望找到更复杂问题的解,于是将方程推广为n元其中的以及等等是已知的常数,而等等则是要求的未知数。如果用线性代数"\o"线性代数"线性代数中的概念来表达,则线性方程组可以写成:其中,由于方程与未知数较多,计算较为复杂,为了更高效的求解,我们利用高斯消元法的思想用c语言编写程序,实现对n元线性方程组的求解。四、程序代码#include<math.h>#include<stdio.h>#defineMAX10floata[MAX][MAX+1],ark;intr,n;jiaohuan(intr,intk){ floatb; inti,j; for(i=1;i<=n+1;i++) { b=a[r][i]; a[r][i]=a[k][i]; a[k][i]=b; } for(i=1;i<=n;i++) { for(j=1;j<=n+1;j++) { printf("%fl",a[i][j]); } printf("\n"); } printf("\n");}floatmaxr(intk){ inti; doublezhu=0; for(i=k;i<=n;i++) { if(fabs(a[i][k])>zhu) { zhu=fabs(a[i][k]); r=i; } } returnzhu; }main(){floatx[MAX];intk,i,j;printf("\n高斯列主元消元法解线性方程组");printf("\n请输入方程组的维数:n=");scanf("%d",&n);printf("\n\n请输入系数矩阵a:\n");for(i=1;i<=n;i++){ for(j=1;j<=n;j++) {printf("请输入a[%d][%d]=",i,j); scanf("%f",&a[i][j]); }}for(i=1;i<=n;i++){printf("\n请输入b[%i]=",i); scanf("%f",&a[i][n+1]);}for(k=1;k<=n-1;k++){ark=maxr(k); if(ark==0) {printf("\n系数为零错误,即将退出!"); } elseif(r!=k) jiaohuan(r,k); for(i=k+1;i<=n;i++) {for(j=k+1;j<=n+1;j++) {a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k]; } } for(i=k+1;i<=n;i++) {a[i][k]=0; } for(i=1;i<=n;i++) {for(j=1;j<=n+1;j++) {printf("%fl",a[i][j]); } printf("\n"); } printf("\n");}x[n]=a[n][n+1]/a[n][n];for(k=n-1;k>=1;k--){floatme=0; for(j=k+1;j<=n;j++) {me=me+a[k][j]*x[j]; }x[k]=(a[k][n+1]-me)/a[k][k];}printf("\n回代求得:\n");for(i=1;i<=n;i++){printf("\tx%d=%f",i,x[i]);}printf("\n");}在VC++6.0上运行程序,试解一个四元一次方程组得到结果如下:优缺点及改进方法用线性方程组可以清晰的表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论