计算机实习任务报告.doc_第1页
计算机实习任务报告.doc_第2页
计算机实习任务报告.doc_第3页
计算机实习任务报告.doc_第4页
计算机实习任务报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

计算机实习C语言编程计算实习报告 学号:姓名:班级:专业:2011年12月23一、实习目的通过16学时的计算机实习(C语言编程计算),掌握一种技能。二、实习课题1、用牛顿迭代法求在附近的实根,取四位有效数字。2、用高斯消去法求解下述线性方程组:三、算法分析、牛顿迭代法设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))作曲线y = f(x)的切线L,L的方程为y = f(x0)+f(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f(x0),称x1为r的一次近似值。过点(x1,f(x1))作曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)f(x(n)/f(x(n),称为r的n+1次近似值,上式称为牛顿迭代公式。 在程序中利用该迭代公式采用控制循环迭代次数得出方程的解。、高斯消去法消元过程如下:1.定出每列的最后一个非0的数,将每行的数字除以该数,使得每行的第一个数成为1;2.将每行的数字减去第一行的第一个数的某个倍数。重复上述两个步骤直至增广矩阵变成一个行梯阵式,再用代入法就可以求得这个方程组的解。 在程序中用一维数组分别存储系数矩阵,常数项矩阵。高斯消元法的算法复杂度是O(n3);这就是说,如果系数矩阵的是n n,那么高斯消元法所需要的计算量大约与n3成比例。对于较大的线性方程组,一般不会直接使用高斯消去法,而采用相应的迭代加速法。四、程序流程图牛顿迭代法: 开始输入&x0,maxcyc,precision0=kkmaxcyc或f(x0)=0?Y输出“迭代失败”N结束x0-f(x0)/f(x0)=x1输出根x1Y|x1-x0|x0,k+1=k高斯消元法:开始3=n,&pA,&pB,0=kpAk*n+k=akkYakk=0?pBn-1/pA(n-1)*n+(n-1)= pXn-1 n-2=kNpBk=temp,k+1=jk+1=i,jtemp-(pAk* n + j * pXj)= temp j+1=j pAi*n+k/akk=mikpAi * n + j= temptemp mik * pAk * n + j= pAi * n + j pBi= temp j+1=jYj pXk k-1=kj=0?temp - mik * pBk= pBi 0=pAi * n + ki+1=iN输出根&pXY结束ikYNk n-1五、程序运行结果截图牛顿迭代法结果:高斯消去法结果:附:(源程序)牛顿迭代法源程序Newton.cpp:#include#includedouble func (double x) /函数f(x)=x3-3*x-1return x*x*x-3*x-1; double func1(double x) /导函数f(x)=3*x2-3 return 3*x*x-3.0;int Newton(double *x,double precision,int macyc)double x1,x0;int k;x0=*x;for (k=0;kmacyc;k+) if (func1(x0)=0.0 )printf (迭代过程中导数为0!n);return 0;x1 = x0 - func(x0)/func1(x0); /进行牛顿迭代计算if (fabs(x1-x0)precision | fabs(func(x1)precision) /达到结束条件*x = x1; /返回结果return 1;else /未达到结束条件x0 = x1; /准备下一次迭代printf (迭代次数超过预期!n); /迭代次数达到,仍没有达到精度return 0;int main() double x,precision; int maxcyc; printf(输入初始迭代值x0:); scanf(%lf,&x); printf(输入最大迭代次数:); scanf(%d,&maxcyc); printf(迭代要求的精度:); scanf(%lf,&precision); if(Newton(&x,precision,maxcyc)=1) /若函数返回值为1 printf(该值附近的根为:%.3lfn,x); else /若函数返回值为0 printf(迭代失败!n); return 0; 高斯消去法源程序GuassElimination.cpp:#include void GuassCommon(double *pA, double *pB, double *pX, int n)double akk, mik, temp;int k, i, j;for (k = 0; k n - 1; k+) /化成行阶梯形akk = pAk * n + k;if (akk -0.00001) printf(nError: ak, k = 0n);break;for (i = k + 1 ; i n; i+) mik = pAi * n + k / akk;for (j = k + 1; j = 0; k-) /求根 temp = pBk;for (j = k + 1; j n; j+)temp =temp- (pAk * n + j * pXj);pXk = temp / pAk * n + k;int main()int i, n;double X3; /根矩阵n = 3; /一个方程的系数个数double A2 = /系数矩阵2, -1, -1, 3, 4, -2, 3,

温馨提示

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

评论

0/150

提交评论