ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:140.79KB ,
资源ID:10738266      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10738266.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《计算机数值方法C》实验指导书新.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

《计算机数值方法C》实验指导书新.docx

1、计算机数值方法C实验指导书新计算机数值方法实验指导书(2017版) 太原理工大学计算机科学与技术学院二一七年三月目 录实验一 方程求根 2实验二 线性方程组的直接解法 4实验三 线性方程组的迭代解法 9实验四 代数插值 10实验五 最小二乘法拟合多项式 11实验一 方程求根【目的与要求】1了解方程求根的基本方法、基本原理、误差估计;2能够按照工程实际要求,选择适当的算法;3通过编写程序,进行算法设计和数值求解。【实验内容】1. 熟悉使用二分法、迭代法、牛顿法、割线法等方程求根的基本方法、基本原理、误差估计的相关理论。2. 选择方程求解方法中的两种方法求方程:f(x)=x3+4x2-10=0在1

2、,2内的一个实根,且要求满足精度|x*-xn|0,说明xn+1, xn内无根;(3) f(xn+1)* f(xn)0,说明xn+1, xn内有根;搜索过程,可从a开始,也可从b开始,这时应取更小的步长h,直到有根区间的长度|xn+1-xn|e。(e为所要求的精度),此时f(xn)或f(xn+1)就可近似认为是零,xn或xn+1就是满足精度的方程的近似根。基于增值寻根法,设计程序如下:#include double fun(double x) double y=x*x; return y*x+4*y-10; void main(void) double x0=-4,x; double h=1;

3、double step=0; x=x0; while(h0.000001) cout- h=h -endl; while(true) step+; if(fun(x)=0) coutx=x0) x+=h; continue; else if(fun(x)*fun(x+h)0) coutx1=xendl; coutx2=(x+h)endl; break; h=h/10; coutstep=stependl; 实验二 线性方程组的直接解法【目的与要求】1了解Gauss消元法、LU分解法等线性方程组直接求解的基本方法、基本原理;2能够按照工程实际要求,选择适当的算法;3通过编写程序,进行算法设计和数

4、值求解。【实验内容】合理利用高斯消元法、高斯主元素消元法、LU分解法求解下列方程组:【示例程序】高斯消元法的基本思想是将原有线性方程组化为与之等价的三角形方程组,这个过程也称为消元过程,再通回代过程进行求解。消元过程使用公式为:回代过程使用公式如下:首先,设定数据文件Gaussdata.txt中的数据为要求解的线性方程组数据,如下:32 2 3 34 7 7 1-2 4 5 -7其中的3表示三阶线性方程组,下面是三行四列的系数矩阵。编写函数displayA()以显示系数矩阵及其的运算中的变化如下:void displayA() printf(n); for(int j=1;j=n;j+) fo

5、r(int i=1;i=n+1;i+) printf(%lf ,aji); printf(n); 定义全局变量如下:double a1516,a01516;/a和a0用以记录方程组系数,/其中:a为本次运算的结果,a0为上次运算的结果double l15,tmp; /l用做消元过程使用系数l的计算和存储,tmp为零时变量int n; /n为线性方程组阶数完整的程序如下:#include stdafx.h#include stdio.hdouble a1516,a01516;double l15,tmp;int n;void displayA() printf(n); for(int j=1;j

6、=n;j+) for(int i=1;i=n+1;i+) printf(%lf ,aji); printf(n); void main() FILE *f; int i,j,k; f=fopen(Gaussdata.txt,r); fscanf(f,%d,&n); for(i=1;i=n;i+) for(j=1;j=n+1;j+) fscanf(f,%lf,&aij); a0ij=aij; displayA(); fclose(f); /消元过程 k=1; do for(i=k+1;i=n;i+) li=a0ik/a0kk; printf(l%i%i=%lf,i,k,li); for(j=k+

7、1;j=n+1;j+) aij=a0ij-li*a0kj; displayA(); k+; if(k=n) break; for(j=1;j=n;j+) for(i=1;i=1;k-) tmp=0; for(j=k+1;j=n;j+)tmp+=akj*lj; lk=(akn+1-tmp)/akk; for(i=1;i=n;i+)printf(x%i=%lfn,i,li);运行结果如下:2.000000 2.000000 3.000000 3.0000004.000000 7.000000 7.000000 1.000000-2.000000 4.000000 5.000000 -7.00000

8、0l21=2.0000002.000000 2.000000 3.000000 3.0000000.000000 3.000000 1.000000 -5.000000-2.000000 4.000000 5.000000 -7.000000l31=-1.0000002.000000 2.000000 3.000000 3.0000000.000000 3.000000 1.000000 -5.0000000.000000 6.000000 8.000000 -4.000000l32=2.0000002.000000 2.000000 3.000000 3.0000000.000000 3.0

9、00000 1.000000 -5.0000000.000000 0.000000 6.000000 6.000000x1=2.000000x2=-2.000000x3=1.000000实验三 线性方程组的迭代解法【目的与要求】1了解雅可比迭代法、高斯-赛德尔迭代法等线性方程组迭代求解的基本方法、基本原理;2能够按照工程实际要求,选择适当的算法;3通过编写程序,进行算法设计和数值求解。【实验内容】使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。【内容提示】雅可比迭代法的公式如下:高斯-赛德尔迭代法的公式如下:实验五 代数插值【目的与要求】1了解拉格朗日插值法或牛顿插值法的基本方法、基

10、本原理;2通过编写程序,进行算法设计和数值求解。【实验内容】使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。x0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386【内容提示】拉格朗日基函数为:拉格朗日插值多项式为:实验六 最小二乘法拟合多项式【目的与要求】 1了解最小二乘法拟合多项式的基本方法、基本原理;2通过编写程序,进行算法设计和数值求解。【实验内容】给定数据点(xi ,yi),用最小二乘法拟合数据的多项式,并求平方误差。xi00.5

11、0.60.70.80.91.0yi11.751.962.192.442.713.00【示例程序】定义要拟合的数据文件数据如下:91 103 54 45 26 17 18 29 310 42一共9个点,最后的2是要拟合的次数。程序使用完全主元素消去法对方程组进行了求解,得到2次拟合函数。源程序如下:#include stdio.h#include math.h#define num 10double xnum,ynum,sumXnum,sumYnum;double anumnum,a0numnum;double neiji(double b,double c) /*内积函数*/ int p; d

12、ouble nj=0; for (p=1;pnum;p+) nj+=cp*bp; return nj;double power(double &a,int n) double b=1; for(int i=0;in;i+) b*=a; return b;/完全主元素消去法相关程序void displayA(double anum,int n) printf(n); for(int j=1;j=n+1;j+) for(int i=1;i=n+1;i+) printf(%lf ,aji); printf(n); void main() int i,j,n,k,index; double l15,x

13、15,sum,max; int maxL,maxC; FILE *f; f=fopen(zxec.txt,r); fscanf(f,%d,&n); printf(已知点的个数n=%in,n); sumX1=sumY1=0; printf(No. x yn); for(i=1;i=n;i+) fscanf(f,%lf,&xi); printf(%i %lf ,i,xi); sumX1+=xi; fscanf(f,%lf,&yi); printf(%lfn,yi); sumY1+=yi; printf(nsumX1=%lfnsumY1=%lf ,sumX1,sumY1); fscanf(f,%d,

14、&index); printf(n拟和次数=%in,index); fclose(f); i = n; sumX0=i; for(i=2;i=2*index;i+) for(j=1;j=n;j+) sumXi+=power(xj,i); printf(sumX%d=%lf n,i,sumXi); for(i=2;i=index+1;i+) for(j=1;j=n;j+) sumYi+=power(xj,i-1)*yj; printf(sumY%d=%lf n,i,sumYi); f=fopen(Gaussdata.txt,w); fprintf(f,%in,index+1); printf(n

15、n%in,index+1); for(i=0;i=index;i+) for(j=i;j=index+i;j+) fprintf(f,%lf ,sumXj); printf(%lf ,sumXj); fprintf(f,%lfn,sumYi+1); printf(%lfn,sumYi+1); fclose(f); /完全主元素消去法相关程序 f=fopen(Gaussdata.txt,r); fscanf(f,%d,&n); for(i=1;i=n;i+) for(j=1;j=n+1;j+) fscanf(f,%lf,&aij); a0ij=aij; for(j=1;j=n+1;j+) an+

16、1j=j; displayA(a,n); fclose(f); /消元过程 k=1; do /选择主元素 max=0;maxL=k;maxC=k; for(i=k;i=n;i+) for(j=k;j=n;j+) if(fabs(max)fabs(aij) max=aij; maxL=i;maxC=j; printf(%i,%i)(%i,%i),k,k,maxL,maxC); /进行行变换 if(maxL!=k) for(i=1;i=n+1;i+) sum=amaxLi; amaxLi=aki; aki=sum; a0maxLi=a0ki; a0ki=sum; /进行列变换 if(maxC!=k

17、) for(i=1;i=n+1;i+) sum=aik; aik=aimaxC; aimaxC=sum; a0ik=a0imaxC; a0imaxC=sum; displayA(a,n); /进行消元 for(i=k+1;i=n;i+) li=a0ik/a0kk; printf(l%i%i=%lf,i,k,li); /for(j=k+1;j=n+1;j+) /书上的公式 for(j=1;j=n+1;j+) /出题用 aij=a0ij-li*a0kj; displayA(a,n); k+; if(k=n) break; for(j=1;j=n;j+) for(i=1;i=1;k-) sum=0;

18、 for(j=k+1;j=n;j+)sum+=akj*lj; lk=(akn+1-sum)/akk; for(j=1;j=n;j+) for(i=1;i=n;i+) if(j!=an+1i) continue; xj=li; printf(x%i=%lfn,j,xj); break; printf(y=%lf,x1); for(i=2;i=0?+%lfx%i:%lfx%i,xi,i-1); printf(n);程序运行结果如下:已知点的个数n=9No. x y1 1.000000 10.0000002 3.000000 5.0000003 4.000000 4.0000004 5.000000

19、 2.0000005 6.000000 1.0000006 7.000000 1.0000007 8.000000 2.0000008 9.000000 3.0000009 10.000000 4.000000sumX1=53.000000sumY1=32.000000拟和次数=2sumX2=381.000000sumX3=3017.000000sumX4=25317.000000sumY2=147.000000sumY3=1025.00000039.000000 53.000000 381.000000 32.00000053.000000 381.000000 3017.000000 14

20、7.000000381.000000 3017.000000 25317.000000 1025.0000009.000000 53.000000 381.000000 32.00000053.000000 381.000000 3017.000000 147.000000381.000000 3017.000000 25317.000000 1025.0000001.000000 2.000000 3.000000 4.000000(1,1)(3,3)25317.000000 3017.000000 381.000000 1025.0000003017.000000 381.000000 5

21、3.000000 147.000000381.000000 53.000000 9.000000 32.0000003.000000 2.000000 1.000000 4.000000l21=0.11916925317.000000 3017.000000 381.000000 1025.0000000.000000 21.467314 7.596635 24.851839381.000000 53.000000 9.000000 32.0000003.000000 2.000000 1.000000 4.000000l31=0.01504925317.000000 3017.000000

22、381.000000 1025.0000000.000000 21.467314 7.596635 24.8518390.000000 7.596635 3.266264 16.5745943.000000 2.000000 1.000000 4.000000(2,2)(2,2)25317.000000 3017.000000 381.000000 1025.0000000.000000 21.467314 7.596635 24.8518390.000000 7.596635 3.266264 16.5745943.000000 2.000000 1.000000 4.000000l32=0.35387025317.000000 3017.000000 381.000000 1025.0000000.000000 21.467314 7.596635 24.8518390.000000 0.000000 0.578044 7.7802783.000000 2.000000 1.000000 4.000000x1=13.459664x2=-3.605309x3=0.267571y=13.459664-3.605309x1+0.267571x2提醒:每个实验结束后,应整理出实验报告,实验报告模版到学校教务处网站下载。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2