数值计算实验报告_第1页
数值计算实验报告_第2页
数值计算实验报告_第3页
数值计算实验报告_第4页
数值计算实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、2012级6班#(学号)计算机数值方法实验报告成绩册姓名:安元龙学号:成绩:实验编号实验名称实验学时实验成绩实验一Newton插值2实验二Romberg算法2实验三求拟合算法2实验四弦截断法2实验五Courant求解方程组2实验六超松弛迭代求解方程组2实验七幂法和反幂法2实验八R-K方法求解初值问题2 数值计算方法与算法 实验报告学期: 2014 至_2015 第 1 学期 2014年 10月26日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 12级5班实验编号: 1实验项目Neton插值多项式 指导教师_孙峪怀姓名: 安元龙 学号: 实验成绩: 1、 实验目的及要求实验目的:掌握

2、Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。实验要求:1. 给出Newton插值算法2. 用C语言实现算法二、实验内容三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Newton插值多项式的算法:Step1 输入插值节点数n,插值点序列x(i),f(i),i=1,2,n,要计算的插 值点x.Step2 形成差商表 for i=0 to n for j=n to i f(j)=(f(j)-f(j-1)/(x(j)-x(j-1-i);Step3 置初始值temp=1,newton=f(0)Step4 for i=1

3、 to n temp=(x-x(i-1)*temp/*由temp(k)=(x-x(k-1)*temp(k-1)形成 (x-x(0).(x-x(i-1)*/ Newton=newton+temp*f(i);Step5 输出f(x)的近似数值newton(x)=newton.#include#define MAX_N 20typedef struct tagPOINT double x; double y;POINT;int main() int n; int i,j; POINT pointsMAX_N+1;double diffMAX_N+1; double x,tmp,newton=0; p

4、rintf(nInput n value:); scanf(%d,&n); if(nMAX_N) printf(The input n is larger then MAX_N,please redefine the MAX_N.n); return 1; if(n=0) printf(Please input a number between 1 and %d.n,MAX_N); return 1; printf(Now input the (x_i,y_i),i=0,.,%d:n,n); for(i=0;i=n;i+) scanf(%lf%lf,&pointsi.x,&pointsi.y)

5、; printf(Now input the X value:); scanf(%lf,&x); for(i=0;i=n;i+)diffi=pointsi.y; for(i=0;ii;j-) diffj=(diffj-diffj-1)/(pointsj.x-pointsj-1-i.x); tmp=1;newton=diff0; for(i=0;in;i+) tmp=tmp*(x-pointsi.x); newton=newton+tmp*diffi+1; printf(newton(%f)=%fn,x,newton); return 0;数值计算方法与算法 实验报告学期: 2014 至_201

6、5 第 1 学期 2014年 10月26日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 11级5班实验编号: 2实验项目Romberg算法 指导教师_孙峪怀姓名: 安元龙 学号: 实验成绩: 一、实验目的及要求实验目的:熟练掌握数值积分的基本思想和动手推导积分公式的能力,并写出自己设计的变步长算法,用此算法解决实际问题。主要锻炼分析问题及对数值方法产生的误差在实际执行算法中的变化,体会事前误差和事后误差的不同之处。实验要求:写出Romberg算法的描述,并用此算法计算下列定积分的值,要求满足给定误差。二、实验内容。(1)用变步长的Romberg方法计算定积分:给定误差限为 三、实验

7、步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Romberg的算法描述:Sstep1 输入区间端点a,b,精度控制值e,循环次数M,定义函数f(x),取n=1, h=b-a;Step2 R1,1=(f(a)+f(b)*h/2;Step3 for k=2 to M Rk,1=(R(k-1),1+h(k-1)* /*/ for j=2 to k if 退出循环 Step4 输出.2. 用C语言实现算法的程序代码#include#include#define f(x) (sin(x) #define N_H 20#define MAXREPT 10 #define a 1.0 #de

8、fine b 2.0 #define epsilon 0.00001 double computeT(double aa, double bb, long int n) /*复化梯形公式*/ int i;double sum, h=(bb-aa)/n; sum=0; for(i=1;in;i+) sum+=f(aa+i*h); sum+=(f(aa)+f(bb)/2; return(h*sum);void main() int i; long int n=N_H,m=0; double TMAXREPT+12; T01=computeT(a,b,n); n*=2; for(m=1;mMAXRE

9、PT;m+) for(i=0;im;i+) Ti0=Ti1; T01=computeT(a,b,n); n*=2; for(i=1;i=m;i+)Ti1=Ti-11+(Ti-11-Ti-10)/(pow(2,2*m)-1);if(Tm-11Tm1-epsilon) printf(The Integrate is %lfn,Tm1); return; printf(Return no solved.n);3. 运行结果数值计算方法与算法 实验报告学期: 2014 至_2015 第 1 学期 2014年 10月26日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 12级5班实验编号: 3

10、实验项目:求拟合算法 指导教师_孙峪怀姓名: 安元龙 学号: 实验成绩: 1、 实验目的及要求实验目的: 学习了曲线拟合的最小二乘法,会求拟合曲线,线性拟合和二次拟合函数,还有形如aexp(bx)的曲线拟合,实验主要是求形如aexp(bx)的曲线拟合,并理解体会其意义。实验要求:1. 形如aexp(bx)曲线拟合的算法;2. 用C语言实现算法二、实验内容 用形如p(x)=aexp(bx)的函数拟合给定()三、实验步骤(该部分不够填写.请填写附页)1.算法分析: 拟合函数aexp(bx)的算法描述:Step1 输入m值,及(xi,yi),i=1,2,.,m;Step2 解方程组 m a = b

11、Step3 输出p(x)=aexp(bx)即所求拟合函数1.算法分析:2. 用C语言实现算法的程序代码#include#include#define MAX_N 25typedef struct tagPOINT double x; double y;POINT;int main() int m; int i; POINT pointsMAX_N; static double u11,u12,u21,u22,c1,c2; double A,B,tmp; printf(nInpute m value:); scanf(%d,&m); if(m=MAX_N) printf(The inpute m

12、 is larger than MAX_N,please redefine the MAN_N.n); return 1; if(m=0) printf(Please input a number between 1 and %d.n,MAX_N); return 1; printf(NOW inpute the(x_i,y_i),i=1,.,%d:n,m); for(i=1;i=m;i+) scanf(%lf,&tmp); pointsi.x=tmp; scanf(%lf,&tmp); pointsi.y=tmp; for(i=1;i=m;i+) u21+=pointsi.x; u22+=p

13、ointsi.x*pointsi.x; c1+=log(pointsi.y); c2+=pointsi.x *log(pointsi.y); u12=u21; u11=m; A=(c1*u22-c2*u12)/(u11*u22-u12*u21); B=(c1*u21-c2*u11)/(u21*u12-u22*u11); printf(Solve:p(x)=%lfexp(%lfx)n,exp(A),B); return 0;3. 实验输出结果:数值计算方法与算法 实验报告学期: 2014 至_2015 第 1 学期 2014年 10月27日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学

14、 12级5班实验编号: 4实验项目 弦截断法 指导教师_孙峪怀姓名: 安元龙 学号: 实验成绩: 一、实验目的及要求实验目的: 学习什么是弦截法,了解弦截法的用法,并学会用弦截法求方程的根。二、实验内容。 用弦截法求f(x)在x0,x1附近的根 三、实验步骤(该部分不够填写.请填写附页)1.算法分析:弦截法的算法描述:Sstep1 定义函数f(x0,输入控制精度epsilon,迭代初始值x_k1,x_k 计算f1:=f(x_k1) !x_k1,x_k2表示x(k-1),xk Step2 for k=2 to MAXREPT 2.1 f2:=f(x_k2) 2.1 x_k:=x_k2-f2(x_

15、k2-x_k1)/(f2-f1)!x_k表示x(k+1) 2.3 if(|x_k-x_k2|epsilon) OR (| f(x_k) |epsilon) Then输出满足给定精度的近似解x_k,结束 2.4 f1:=f2 !为下一次迭代准备数值 x_k1:=x_k2 X_k2:=x_kStep3 输出:在初始值x_k1,x_k2附近f(x)无根4. 用C语言实现算法的程序代码#include#include#define f(x) (x*x*x-7.7*x*x+19.2*x-15.3) #define x0 0.0 #define x1 1.0#define MAXREPT 1000 #de

16、fine epsilon 0.00001 void main() int i; double x_k=x0,x_k1=x1,x_k2=x1; for(i=0;iMAXREPT;i+) printf(Got.%fn,x_k2); x_k2=x_k1-(f(x_k1)*(x_k1-x_k)/(f(x_k1)-f(x_k); if(x_k2-x_k1-epsilon) printf(!Root:%fn,x_k2); return; x_k=x_k1;x_k1=x_k2; printf(After %d repeate,no solved.n,MAXREPT);5. 运行结果数值计算方法与算法 实验报

17、告学期: 2014 至_2015_ 第 1 学期 2014年 10月26日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 12级5班实验编号: 5实验项目:Courant求解方程组 指导教师_孙峪怀姓名: 安元龙 学号: 实验成绩: 一实验目的: 用C语言实现直接分解法的算法,掌握直接分解法与高斯消去法的不同之处实验要求:掌握怎样将已给的算法在计算机上实现,分析算法的优缺点,找到实现直接分解算法最佳的结构;体会从键盘读入二维数组的源代码,了解计算机内部存储二维数组得规则;体会Courant分解先分解U的行,再分解L列 的算法实现规则;将下面的方程组用直接分解法实现,并比较其与高斯消元

18、法的不同。二、实验内容1、用Corant直接分解法求解下列方程组: a a . a x b a a . a x = b . . . . . . . . . . . . . . . a a . a x b 三、实验步骤(该部分不够填写.请填写附页)1.courant的算法描述:Step1 输入矩阵A及列向量b;Step2 将矩阵A分解为 A=LU . . . , U= . . . L= . . . . . . . . . . . . . . . . . . 1 Step3 对k=1,2,.,n, =- i=k,k+2,.,n; = - j=k+1,k+2,.,n记=y,解=: = , i=1,2

19、,.,n Step4 再由=得 ,j=n,n-1,.,2,1 2. 用C语言实现算法的程序代码#include#include#define MAX_N 20 int main() int n; int i,j,k; static double aMAX_NMAX_N,bMAX_N,xMAX_N,yMAX_N; static double lMAX_NMAX_N,uMAX_NMAX_N; printf(nInput n value(dim of Ax=b):); scanf(%d,&n); if(nMAX_N) printf(The input n is larger than MAX_N,p

20、lease redefine the MAX_N.n); return 1; if(n=0) printf(Please input a number between a and %d.n,MAX_N); return 1; printf(Now input the matrix a(i,j), i,j=0,.,%d:n,n-1); for(i=0;in;i+) for(j=0;jn;j+) scanf(%lf,&aij); printf(Now input the matrix b(i), i=0,.,%d:n,n-1); for(i=0;in;i+) scanf(%lf,&bi); for

21、(i=0;in;i+) uij=1; for(k=0;kn;k+) for(i=k;in;i+) lik=aik; for(j=0;j=k-1;j+) lik-=(lij*ujk); for(j=k+1;jn;j+) ukj=akj;for(i=0;i=k-1;i+) ukj-=(lki*uij);ukj/=lkk; for(i=0;in;i+) yi=bi; for(j=0;j=0;i-) xi=yi; for(j=i+1;jn;j+) xi-=(uij*xj); printf(Solve.x_i=n); for(i=0;in;i+)printf(%fn,xi); return 0;3. 运

22、行结果数值计算方法与算法 实验报告学期: 2014 至_2015_ 第 1 学期 2014年 10月27日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 12级5班实验编号: 6实验项目:超松弛迭代求解方程组 指导教师_孙峪怀姓名 安元龙 学号: 实验成绩: 1 实验目的及要求实验目的:熟练掌握使用超松弛迭代求解线性方程组实验要求: 写出超松弛迭代的算法描述并使用C语言实现超松弛代法2 实验内容用超松弛迭代(作为参数)求解方程组 . . . . . . . . . . . . . . . . . . . . . . . . 三、实验步骤(该部分不够填写.请填写附页)1.算法描述:St

23、ep1: 输入矩阵A及列向量C;Step2: 按因子为的超松弛迭代公式 . Step3 求解AX=C2. 用C语言实现算法的程序代码#include#include#define MAX_N 20 #define MAXREPT 100#define epsilon 0.00001 int main() int n; int i,j,k; double err,w; static double aMAX_NMAX_N,bMAX_NMAX_N,cMAX_N,gMAX_N; static double xMAX_N,nxMAX_N; printf(nInput n value(dim of AX=

24、C):); scanf(%d,&n); if(nMAX_N) printf(The input n is larger than MAX_N,please redefine the MAX_N.n); return 1; if(n0) printf( Please input a number between 1 and %d.n,MAX_N); return 1; printf(Now input the matrix a(i,j),i,j=0,.,%d:n,n-1); for(i=0;in;i+) for(j=0;jn;j+) scanf(%lf,&aij); printf(Now inp

25、ut the matrix c(i),i=0,.,%d:n,n-1); for(i=0;in;i+) scanf(%lf,&ci); printf(Now input the w value:); scanf(%lf,&w); if(w=2) printf(w must between 1 and 2.n); return 1; for(i=0;in;i+) for(j=0;jn;j+) bij=-aij/aii; gi=ci/aii; for(i=0;iMAXREPT;i+) for(j=0;jn;j+) nxj=gj; for(j=0;jn;j+) for(k=0;kj;k+) nxj+=

26、bjk*nxk; for(k=j+1;kn;k+) nxj+=bjk*xk; nxj=(1-w)*xj+w*nxj; err=0; for(j=0;jn;j+) if(errfabs(nxj-xj) err=fabs(nxj-xj); for(j=0;jn;j+) xj=nxj; if(errepsilon) printf(Solve.x_i=n); for(i=0;in;i+) printf(%fn,xi); return 0; printf(After %d repeat,no result.n,MAXREPT); return 1;3. 运行结果数值计算方法与算法 实验报告学期: 201

27、4 至_2015_ 第 1 学期 2014年 10月26日课程名称:_数值计算方法与算法 _ 专业:信息与计算科学 12级5班实验编号:7实验项目:幂法和反幂法 指导教师_孙峪怀姓名:安元龙 学号: 实验成绩: 实验七 幂法和反幂法求解矩阵的特征值和特征向量 1 实验目的及要求 实验目的:理解和学会幂法和反幂法计算矩阵按模最大和按模最小的特征值及其特征向量实验要求:写出利用幂法的算法和C语言代码描述。2 实验内容 用幂法和反幂法计算矩阵按模最大和按模最小的特征值及其特征向量三、实验步骤(该部分不够填写.请填写附页)1.算法描述:Step 1 输入矩阵A,利用幂法 , k=1,2,. ,Step

28、2 求矩阵a的按模最大特征值 及其特征向量 (k足够大);Step3 利用反幂法求得其按模最小的特征值及其特征向量(即求矩阵的按模最大的特征值)。 其中是用直接分解法:用公式计算2.用C语言实现算法的程序代码#include#include#define MAX_N 20#define MAXREPT 100#define epsilon 0.0001int mian() int n; int i,j,k; double err; double xmax,oxmax; static double aMAX_NMAX_N; static double lMAX_NMAX_N,uMAX_NMAX_

29、N; static double xMAX_N,nxMAX_NMAX_N; printf(nInput n value(dim of AX=C):; scanf(%d,&n); if(nMAX_N) printf(The input n is larger than MAX_N,please redefine the MAX_N.n); return 1; if(1n=0) printf(Please input a number between 1 and %d.n,MAX_N); return 1; printf(Now input the matrix a(i,j),i,j=0,.,%d

30、:n,n-1); for(i=0;in;i+) for(j=0;jn;j+) scanf(%lf,&aij); for(i=0;in;i+) xi=1; oxmax=0; for(i=0;iMAXREPT;i+) for(j=0;jn;j+) nxj=0; for(k=0;jn;k+) nxj+=ajk*xk; xmax=0.0; for(j=0;jxmax) xmax=fabs(nxj);for(j=0;jn;j+)nxj/=xmax;for(j=0;jn;j+)xj=nxj;if(fabs(xmax-oxmax)epsilon) printf(Solve.max lamda=%lfn,xm

31、ax); printf(The vector is:n); for(i=0;in;i+) printf(%fn,nxi); break; return 0;oxmax=xmax; printf(After %d repeat,max no result.n,MAXREPT); for(i=0;in;i+) uij=1; for(k=0;kn;k+) for(i=k;in;i+) lik=aik; for(j=0;j=k-1;j+) lik-=(lij*ujk); for(j=k+1;i=k-1;i+) ukj=akj; for(i=0;i=k-1;i+) ukj-=(lki*uij); ukj/=lkk; for(i=0;in;i+) xi=1; oxmax=0; for(i=0;iMAXREPT;i+) for(j=0;jn;j+) nxj=xj; for(k=0;k=0;j-) xj=nxj; for(k=j+1;kn;k+) xj-=ujk*xk; xmax=0.0; for(j=0;jxmax) xmax=fabs(xj); for(j=0;jn;j+) xj/=xmax; if(fabs(xmax-oxmax)epsilon) pr

温馨提示

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

评论

0/150

提交评论