计算方法上机实验指导书刘轶中
- 格式:doc
- 大小:222.50 KB
- 文档页数:15
第一章 绪论一、主要要求通过实验,认真理解和体会数值计算的稳定性、精确性与步长的关系。
二、主要结果回顾:1、算法:电子计算机实质上只会做加、减、乘、除等算术运算和一些逻辑运算,由这些基本运算及运算顺序规定构成的解题步骤,称为算法.它可以用框图、算法语言、数学语言或自然语言来描述。
用计算机算法语言描述的算法称为计算机程序。
(如c —语言程序,c++语言程序,Matlab 语言程序等)。
2、最有效的算法:应该运算量少,应用范围广,需用存储单元少,逻辑结构简单,便于编写计算机程序,而且计算结果可靠。
3、算法的稳定性:一个算法如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是数值稳定的,否则称此算法为不稳定的。
换句话说:若误差传播是可控制的,则称此算法是数值稳定的,否则称此算法为不稳定的。
4、控制误差传播的几个原则: 1)防止相近的两数相减; 2)防止大数吃小数;3)防止接近零的数做除数;4)要控制舍入误差的累积和传播;5)简化计算步骤,减小运算次数,避免误差积累。
三、数值计算实验(以下实验都需利用Matlab 软件来完成) 实验1.1(体会数值计算精度与步长关系的实验)实验目的:数值计算中误差是不可避免的,要求通过本实验初步认识数值分析中两个重要概念:截断误差和舍入误差,并认真体会误差对计算结果的影响。
问题提出:设一元函数f :R →R ,则f 在x 0的导数定义为:hx f h x f x f h )()(lim)('0000-+=→实验内容:根据不同的步长可设计两种算法,计算f 在x 0处的导数。
计算一阶导数的算法有两种:h x f h x f x f )()()('000-+≈ (1)hh x f h x f x f 2)()()('000--+≈(2)请给出几个计算高阶导数的近似算法,并完成如下工作:1、对同样的h ,比较(1)式和(2)式的计算结果;2、针对计算高阶导数的算法,比较h 取不同值时(1)式和(2)式的计算结果。
计算方法A上机实验报告姓名:苏福班级:硕4020 学号:3114161019一、上机练习目的1)复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
2)利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
二、上机练习任务1)利用计算机语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
2)掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
3)写出上机练习报告。
三、上机题目1. 共轭梯度法求解线性方程组。
(第三章)2. 三次样条插值(第四章)3. 龙贝格积分(第六章)4. 四阶龙格-库塔法求解常微分方程的初值问题四、上机报告题目1:共轭梯度法求解线性方程组1.算法原理共轭梯度法是把求解线性方程组的问题转化为求解一个与之等价的二次函数极小值的问题。
从任意给定的初始点出发,沿一组关于矩阵A共轭的方向进行线性搜索,在无舍入误差的假定下,最多迭代n 次(其中n 为矩阵A 的阶数),就可求得二次函数的极小值,也就求得了线性方程组Ax b =的解。
定理:设A 是n 阶对称正定矩阵,则x *是方程组Ax b =的解得充分必要条件是x *是二次函数1()2TT f x x Ax b x =-的极小点,即 ()()min nx R Ax b f x f x **∈=⇔=共轭梯度法的计算公式:(0)(0)(0)()()()()(1)()()(1)(1)(1)()()()(1)(1)()k T k k k T k k k k k k k k T k k k T k k k k k d r b Ax r d d Ad xx d r b Ax r Ad d Ad d r d ααββ++++++⎧==-⎪⎪=⎪⎪=+⎪⎨=-⎪⎪⎪=-⎪⎪=+⎩2. 程序框图(1)编写共轭梯度法求解对称正定矩阵的线性方程组见附录(myge.m):function x=myge(A,b)输入对称正定矩阵及对应的列向量,初始向量设为0,精度取为810 。
西安电子科技大学出版社《计算方法》任传祥等编著第九章计算方法上机参考答案实验一,算法一#include <stdio.h>#include <math.h>double I0=log(6)/log(5),I1;int n=1;main (){while(1){I1=1.0/(n)-I0*5.0;printf("%d %lf\n", n,I1);if(n>=20)break;elseI0=I1;n++;}}实验一,算法二#include <stdio.h>#include <math.h>double I0=(1/105.0+1/126.0)/2,I1;int n=20;main (){printf("%d %lf\n", n,I0);while(1){I1=1.0/(5.0*n)-I0/5.0;printf("%d %lf\n", n-1,I1);if(n<2)break;elseI0=I1;n--;}}实验二,二分法#include <stdio.h>#include <math.h>#define esp 1e-3double f(double x);main (){double a=1,b=2,x;while(fabs(b-a)>esp){x=(a+b)/2;printf("x=%lf\n",x);if(f(x)==0)break;elseif(f(x)*f(a)<0)b=x;elsea=x;}}double f(double x){return pow(x,3)-x-1;}实验二,牛顿迭代法#include<stdio.h>#include<math.h>double f(double x);double f1(double x);#define esp 1e-3void main(){double x0 = 1.5, x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);x0 = x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);while (fabs(x1 - x0)>esp){x0 = x1;x1 = x0 - f(x0) / f1(x0);printf("x=%lf\n", x1);} }double f(double x){return pow(x, 3) - x - 1;} double f1(double x){return 3 * x*x - 1;}弦割法#include<stdio.h>#include<math.h>double f(double x);#define esp 1e-3void main(){double x0 = 1.5, x1=2.0,x2;do{ x2=x1 - (x1-x0)*f(x1) /(f(x1)-f(x0));x0=x1;x1=x2;printf("x=%lf\n", x1);}while (fabs(x1 - x0)>esp);{printf("x=%lf\n", x1);}}double f(double x){return pow(x, 3) - x - 1;}实验3#include <stdio.h>/*列主元高斯消去法*/#include <math.h>float x[3],temp,max;float A[3][4]={10,-2,-1,3,-2,10,-1,15,-1,-2,5,10},c[3][4]={10,-2,-1,3,-2,10,-1,15,-1,-2,5,10}; int n=3,i,k,j,m;void main(){for(i=0;i<n;i++){max=A[i][i];k=i;for(j=j+1;j<n;j++){{max=fabs(A[j][i]);k=j;}}if(k!=i){for(j=i+1;j<=n;j++){temp=A[i][j];A[i][j]=A[k][j];A[k][j]=temp;}}for(j=i+1;j<n;j++)for(m=i+1;m<=n;m++){c[j][m]=c[j][m]+(-c[j][i]/c[i][i])*c[i][m];}}for(i=n-1;i>=0;i--){temp=0.0;for(j=n-1;j>=i+1;j--)temp=temp+c[i][j]*x[j];x[i]=(c[i][n]-temp)/c[i][i];}printf("x[1]=%f\nx[2]=%f\nx[3]=%f\n",x[0],x[1],x[2]);实验四,拉格朗日插值#include<stdio.h>int n=5,i,j;double l,L=0,X=0.5;main(){double x[5]={0.4,0.55,0.65,0.8,0.9};doubley[5]={0.41075,0.57815,0.69675,0.88811,1.02652}; for(i=0;i<n;i++){l=y[i];for(j=0;j<n;j++){if(j!=i)l=l*(X-x[j])/(x[i]-x[j]); } L=L+l;}printf("%lf\n",L);return 0;} X=0.5 X=0.7 X=0.85牛顿插值法#include<stdio.h>#include<math.h>main(){double x[5]={0.4,0.55,0.65,0.8,0.9};doubley[5]={0.41075,0.57815,0.69675,0.88811,1.02652};int n=5,i,j;double z;printf("input z\n");scanf("%lf",&z);double a[5][5];for(i=0;i<5;i++)a[i][0]=y[i];for(i=1;i<5;i++)for(j=i;j<5;j++)a[j][i]=(a[j][i-1]-a[j-1][i-1])/(x[j]-x[j-i]);double N=a[0][0],temp=1.0;for(i=1;i<n;i++){temp=temp*(z-x[i-1]);N=N+a[i][i]*temp;}printf("N=%lf\n",N);return 0;}实验五曲线拟合#include <stdio.h>#include <math.h>float x[5]={1,2,3,4,5};float y[5]={7,11,17,27,40};float A[2][3],c[2][3];float z[2],temp,max;int i,j,k,m;int n=2;void main(){for(i=0;i<5;i++){c[0][0]=A[0][0]+=1;c[0][1]=A[0][1]+=x[i];c[0][2]=A[0][2]+=y[i];c[1][0]=A[1][0]+=x[i];c[1][1]=A[1][1]+=x[i]*x[i];c[1][2]=A[1][2]+=x[i]*y[i];}/* for(i=0;i<2;i++){printf(" %lf %lf %lf\n",A[i][0],A[i][1],A[i ][2]);}*/for(i=0;i<n;i++){max=A[i][i];k=i;for(j=j+1;j<n;j++){if(fabs(A[j][i])>max){max=fabs(A[j][i]);k=j;}} if(k!=i){for(j=i+1;j<=n;j++){temp=A[i][j];A[i][j]=A[k][j];A[k][j]=temp;}}for(j=i+1;j<n;j++)for(m=i+1;m<=n;m++){c[j][m]=c[j][m]+(-c[j][i]/c[i][i])*c[i][m];}}for(i=n-1;i>=0;i--){temp=0.0;for(j=n-1;j>=i+1;j--)temp=temp+c[i][j]*z[j];z[i]=(c[i][n]-temp)/c[i][i];}printf("a=%f\nxb=%f\n",z[0],z[1]); }实验六数值积分/*梯形*/#include<stdio.h>#include<math.h> double f(double x); main(){double x[10],y[10];double h,b=1,a=0,I;int n,i;printf("n\n");scanf("%d",&n);h=(b-a)/n;for(i=0;i<=n;i++){x[i]=a+(i*h);y[i]=f(x[i]);}I=f(a)+f(b);for(i=1;i<=n-1;i++){I=I+2*y[i];}I=(h/2)*I;printf("%lf",I);}double f(double x){double f;f=1.0/(1.0+(x*x));return(f);}/*辛普森*/#include<stdio.h>#include<math.h>double f(double x);main(){double x[30],y[30];double h,b=1,a=0,I;int n,i;printf("n\n");scanf("%d",&n);//点乘2扩展h=(b-a)/n;x[10]=1;y[10]=f(x[10]);for(i=0;i<n;i++){x[2*i]=a+(i*h);y[2*i]=f(x[2*i]);x[2*i+1]=a+(i+(1.0/2.0))*h;y[(2*i)+1]=f(x[(2*i)+1]);}I=f(a)+f(b);for(i=0;i<n;i++){I=I+4*y[(2*i)+1];}for(i=1;i<n;i++){I=I+2*y[2*i];}I=(h/6)*I;printf("%lf\n",I);}double f(double x){double f;f=1.0/(1.0+(x*x));return(f);}/*梯形*//*辛普森*/。
计 算 方 法实 验 指 导 书彭彬计算机技术实验中心2012年3月· 实验环境: VC++ 6.0· 实验要求:在机房做实验只是对准备好的实验方案进行验证,因此上机前要检查实验准备情况,通过检查后方可上机。
没有认真准备的学生不能上机,本次实验没有分数。
实验中要注意考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。
· 关于计算精度:如果没有特别说明,在计算的过程中,小数点后保留5位数字,最后四舍五入到小数点后四位数字。
迭代运算的结束条件统一为51102-⨯。
在VC++ 6.0中,可使用setprecision 在流的输出中控制浮点数的显示(缺省显示6位)。
演示如下: # include<iostream.h> # include<math.h> # include<iomanip.h>//输出6位精度,输出左对齐cout<<setprecision(6)<<setiosflags(ios::left); //设置输出宽度为12(不够将补充0) cout<<setw(12)<<coeff[i];· 关于图形绘制本课程个别实验要求画出函数的曲线,所有画图题目均要求用MFC 完成。
利用VC++6.0的MFC 画图,先要建立一个工程,然后在***View 中加入自定义变量、自定义函数等,最后在OnDraw ()方法中调用自定义函数。
也可以把代码直接写入OnDraw ()方法中。
画曲线有两种方法,(一)一句坐标逐个打点(用SetPixel()函数),(二)先把当前光标移动(MoveTo()函数)到曲线的始点,再用LineTo ()函数画线。
线的样式由画笔决定。
对封闭区域可以填充,填充的样式由画刷决定。
在VC++6.0中,先新建一个MFC AppWizard(exe)类型的工程(建立工程时,“应用程序类型”选择“单文档”;“是否包含数据库”选择“不包含数据库”;其它选择缺省),然后在“ClassView ”中选择XXView 类文件加以操作。
理学院《计算方法》实验指导书适合专业:信息与计算科学数学与应用数学贵州大学二OO七年八月前言《计算机数值计算方法》包括很多常用的近似计算的处理手段和算法,是计算科学与技术专业的必修课程,为了加强学生对该门课程的理解,使学生更好地掌握书中的计算方法、编制程序的能力,学习计算方法课程必须重视实验环节,即独立编写出程序,独立上机调试程序,必须保证有足够的上机实验时间。
在多年教学实践基础上编写了《计算机数值计算方法》上机实习指南,目的是通过上机实践,使学生能对教学内容加深理解,同时培养学生动手的能力.本实习指南,可与《计算机数值计算方法》课本配套使用,但是又有独立性,它不具体依赖哪本教科书,主要的计算方法在本指南中都有,因此,凡学习计算方法课的学生都可以参考本指南进行上机实习。
上机结束后,按要求整理出实验报告。
实验报告的内容参阅《计算机数值计算方法》上机实验大纲。
目录第一章解线性方程组的直接法实验一 Gauss列主元素消去法实验二解三对角线性方程组的追赶法第二章插值法与最小二乘法实验三 lagrange插值法实验四分段插值法实验五 曲线拟合的最小二乘法第三章 数值积分实验六 复合求积法实验七 变步长法第四章 常微分方程数值解法实验八 Euler 方法第五章 解线性方程组和非线性方程的迭代法实验九 Jacobi 迭代法、Gauss-Seidel 迭代法实验十 Newton 迭代法实验一 : Gauss 列主元素消去法实验学时:2实验类型:验证实验要求:必修一、实验目的用gauss 消去法求线性方程组AX=b. 其中一、 实验内容二、 实验条件PC 机,tc2.0,Internet 网。
三、 实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4. 调试通过,计算出正确结果后。
实验二 解三对角线性方程组的追赶法⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=b b b x x x a a a a a a a a a n n nn n n n n b X A M M 2122122221112111....................................实验学时:2实验类型:验证实验要求:必修一、实验目的二、实验内容三、实验组织远行要求统一进行实验,一人一组四、实验条件PC机,tc2.0,Internet网五、实验步骤a)根据算法事先写出相应程序。
计算方法实验报告班级: 学号: 姓名: 成绩:1 舍入误差及稳定性一、实验目的(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;(2)通过上机计算,了解舍入误差所引起的数值不稳定性二、实验内容1、用两种不同的顺序计算1000021n n -=∑,分析其误差的变化 2、已知连分数()101223//(.../)n n a f b b a b a a b =++++,利用下面的算法计算f : 11,i n n i i i a d b d b d ++==+ (1,2,...,0)i n n =-- 0f d = 写一程序,读入011,,,...,,,...,,n n n b b b a a 计算并打印f3、给出一个有效的算法和一个无效的算法计算积分1041nn x y dx x =+⎰ (0,1,...,10)n = 4、设2211N N j S j ==-∑,已知其精确值为1311221N N ⎛⎫-- ⎪+⎝⎭(1)编制按从大到小的顺序计算N S 的程序(2)编制按从小到大的顺序计算N S 的程序(3)按两种顺序分别计算10001000030000,,,S S S 并指出有效位数三、实验步骤、程序设计、实验结果及分析1、用两种不同的顺序计算1000021n n -=∑,分析其误差的变化 (1)实验步骤:分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h 和math.h(2)程序设计:a.顺序计算#include<stdio.h>#include<math.h>void main(){double sum=0;int n=1;while(1){sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum);if(n>=10000)break;n++;}printf("sum[%d]=%f\n",n,sum); }b.逆序计算#include<stdio.h>#include<math.h>void main(){double sum=0;int n=10000;while(1){sum=sum+(1/pow(n,2));if(n%1000==0)printf("sum[%d]=%-30f",n,sum);if(n<=1)break;n--;}printf("sum[%d]=%f\n",n,sum);}(3)实验结果及分析:程序运行结果:a.顺序计算b.逆序计算结果分析:两种不同顺序计算结果是一样的,顺序计算误差从一开始就很小,而逆序计算误差最开始十分大,后来结果正确。
. 《计算方法》上机实验报告班级:XXXXXX小组成员:XXXXXXXXXXXXXXXXXXXXXXXXXXXX任课教师:XXX二〇一八年五月二十五日前言通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。
以下为本次上机实验报告,按照实验内容共分为六部分。
实验一:一、实验名称及题目: Newton 迭代法例2.7(P38):应用Newton 迭代法求在附近的数值解,并使其满足.二、解题思路:设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交点的横坐标)(')(0001x f x f x x -=,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标)(')(1112x f x f x x -=称2x 为'x 的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把)(')(1n n n n x f x f x x -=+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。
三、Matlab 程序代码:function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0);y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1;while abs(x1-x0)>=tol x0=x1;y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; endx=double(x1) K四、运行结果:实验二:一、实验名称及题目:Jacobi 迭代法例3.7(P74):试利用Jacobi 迭代公式求解方程组要求数值解为方程组的精确解. 二、解题思路:首先将方程组中的系数矩阵A 分解成三部分,即:U D L A ++=,D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。
计算方法实验指导书(学生用书)实验一 非线性方程的迭代数值解法一、实验目的1) 熟悉用牛顿法解非线性方程的过程;熟悉用弦截法求解非线性方程的过程2) 编程实现牛顿法、弦截法求非线性方程的根。
二、实验设备PC 机一台,C 语言、PASCAL 语言、Matlab 任选三、实验内容1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程。
010*15.110*4.181.9*002.0)(255.15=--=--x x x f四、实验要求1) 认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2) 编写上机实验程序,作好上机前的准备工作;3) 上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4) 分析和解释计算结果;5) 按照要求书写实验报告;实验二插值法一、实验目的1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。
2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。
二、实验设备PC机一台,C语言、PASCAL语言、Matlab任选三、实验内容1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。
已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。
2) P129,(12)四、实验要求1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2)编写上机实验程序,作好上机前的准备工作;3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4)分析和解释计算结果;5)按照要求书写实验报告;实验三曲线拟合的最小二乘法一、实验目的在科学研究与工程技术中,常常需要从一组测量数据出发,寻找变量的函数关系的近似表达式,使得逼近函数从总体上与已知函数的偏差按某种方法度量能达到最小而又不一定过全部的点。
《计算方法》实验指导书课程名称:计算方法英文名称:Numerical Calculation Method一、实验的性质、目的和任务本实验是与本专业基础课《计算方法》相配套的,旨在巩固专业课内容和学生编程的能力。
通过实验加强对数值方法的理解和掌握,编制出适用的程序。
同时,在理论教学的基础上,注意方法处理的技巧及其与计算机的结合,要重视误差分析、收敛性的理论;其次要通过例子,学习使用各种数值方法解决实际计算问题。
要求学生应用高级计算机语言编程完成实验。
二、实验基本要求实验基本要求:要求熟悉高级计算机语言,以及相关上机操作说明;上机时要遵守实验室的规章制度,爱护实验设备;实验内容要求:(1)认真分析题目的条件和要求,复习相关理论知识,选择适当的解决方案和算法;(2)编写上机实验程序,作好上机前的准备工作;(3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);(4)分析和解释计算结果;(5)程序调试完后,须由实验辅导教师在机器上检查运行结果;(6)按照要求书写每次实验的实验报告。
(7)要求独立完成上述各项。
三、实验原理应用高级计算机语言实现数值计算方法课程中的各种算法。
四、实验环境实验设备:计算机实验使用的语言:C语言、Java语言或Matlab语言任选五、考核与报告(1)本课程的评分方法是考查,实验作为平时成绩占学期期末总成绩的30%。
(2)每个实验完成后必须完成相应的实验报告。
实验成绩组成为:实验报告占40%;按照教学计划的实验,现场编程序,演示计算结果占50%;创新占10%。
六、实验报告格式实验报告在书写过程中应该将以下问题写清楚1、实验目的:2、实验要求:3、实验内容:4、实验题目:5、设计原理与思想:6、对应程序:7、实验结果及其分析:8、计算中出现的问题,解决方法及体会:七、《计算方法》课程实验项目名称和实验目的及实验内容如下实验一 非线性方程求根一、实验类型 验证性 二、实验学时 2学时 三、实验目的:1、 掌握计算机上常用的一些求非线性方程的近似根的数值方法(二分法、迭代法、牛顿法、割线法),并能比较各种方法的异同点;2、 掌握迭代的收敛性定理,局部收敛性、收敛阶的概念3、正确应用所学方法求出给定的非线性方程满足一定精度要求的数值解。
理学院《计算方法》实验指导书适合专业:信息与计算科学数学与应用数学XX大学二OO七年八月前言《计算机数值计算方法》包括很多常用的近似计算的处理手段和算法,是计算科学与技术专业的必修课程,为了加强学生对该门课程的理解,使学生更好地掌握书中的计算方法、编制程序的能力,学习计算方法课程必须重视实验环节,即独立编写出程序,独立上机调试程序,必须保证有足够的上机实验时间。
在多年教学实践基础上编写了《计算机数值计算方法》上机实习指南,目的是通过上机实践,使学生能对教学内容加深理解,同时培养学生动手的能力.本实习指南,可与《计算机数值计算方法》课本配套使用,但是又有独立性,它不具体依赖哪本教科书,主要的计算方法在本指南中都有,因此,凡学习计算方法课的学生都可以参考本指南进行上机实习。
上机结束后,按要求整理出实验报告。
实验报告的内容参阅《计算机数值计算方法》上机实验大纲。
目录第一章解线性方程组的直接法实验一Gauss列主元素消去法实验二解三对角线性方程组的追赶法第二章插值法与最小二乘法实验三lagrange插值法实验四分段插值法实验五曲线拟合的最小二乘法第三章数值积分实验六复合求积法实验七变步长法第四章常微分方程数值解法实验八Euler方法第五章解线性方程组和非线性方程的迭代法实验九Jacobi 迭代法、Gauss-Seidel 迭代法 实验十 Newton 迭代法实验一 : Gauss 列主元素消去法实验学时:2 实验类型:验证 实验要求:必修一、实验目的用gauss 消去法求线性方程组AX=b. 其中一、 实验内容⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=b b b x x x a a a a a a a a a n n nn n n n n b X A 2122122221112111....................................1231231.2.3.2131,41243116:1,2,1.AX b A b x x x x xxx⎡⎤-⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥==-==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦===算法设计编写相应的程序上机调试计算实例求解其中正确结果二、 实验条件PC 机,tc2.0,Internet 网。
三、 实验步骤1. 根据算法事先写出相应程序。
2. 启动PC 机,进入tc 集成环境,输入代码。
3. 编译调试。
4.调试通过,计算出正确结果后。
实验二 解三对角线性方程组的追赶法实验学时:2 实验类型:验证 实验要求:必修一、实验目的111122222111:,01,2,310n nnn n i i i i i n n A i n f b cx f a b cx cabx fb c b a c a c b a -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎣⎦⎧>>⎪⎪≥+≠=-⎨⎪>>⎪⎩用追赶法解三对角线方程组其中满足 二、实验内容112211.,0,,411[][][][][],[],[][]n nn L U c i i b i w i f i y i x i a i w wr w rβββ-⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦算法设计由于系数矩阵只有三对角线上有元素其余元素都为所以算法实现时只用个一维数组由于所以与是同一单元与是同一单元是一个单元123412342.3.31123102311130:0.550.660.870.29x x x x x x x x⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦====-编写相应的程序上机调试计算实例用追赶法解方程组计算结果三、实验组织远行要求统一进行实验,一人一组四、 实验条件PC 机,tc2.0,Internet 网五、 实验步骤a)根据算法事先写出相应程序。
b)启动PC机,进入tc集成环境,输入代码。
c)编译调试。
d)调试通过,计算出正确结果后。
实验三lagrange插值法实验学时:1实验类型:验证实验要求:必修一、实验目的1100,.........,()()()(),n n nnjninj i iji jlagrange yx lagrange x f x x xx x x y y yx yp x xρ==≠-=≈-∑∏通过插值法的学习掌握如何根据已知函数表 构造插值多项式用二、实验内容1.2.计算设计编写相应的程序上机调试3.::80123456780.20.50.8 1.2 1.4 2.1 2.5 2.8 3.00.1930.40.4880.4920.4790.3880.3450.3170.30.20.40.60.1930.347460.43975i in i x y x y=计算实例已知下列函数表计算结果三、实验组织远行要求统一进行实验,一人一组四、实验条件PC 机,tc2.0,Internet 网五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验四 分段插值法实验学时:2 实验类型:验证实验要求:必修一、实验目的(). 掌握分段线性插值的基本思想即化整为零的思想掌握如何根据11,().()().n nx Lh x yLh x f x x x x y y x≈已知函数表构造分段线性插值函数用二、实验内容1.2.3.:算法设计编写相应的程序上机调试计算实例 21(),5510,().1(2.5)(2.5),.f x x n Lh x f Lh x=-≤≤=+设在上取按等距节点求分段线性插值函数然后计算和的值并比较计算结果三、实验组织远行要求统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网。
五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验五 曲线拟合的最小二乘法实验学时:2 实验类型:综合 实验要求:必修一、实验目的,,.掌握数据拟合的思想清楚数据拟合与插值法的区别及最小二乘原理在数据拟合中的重要作用以及最小二乘解的求法二、实验内容221.2.,.3.:,192531384419.032.349.073.397.8: 1.010.05y a b x y y x x =+=+算法设计编写程序上机调试计算实例用最小二乘法原理求一个形如的经验公式是与下列数据相拟合正确结果 三、实验组织远行要求统一进行实验,一人一组四、实验条件PC 机,tc2.0,Internet 网五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验六 复合求积法实验学时:1 实验类型:验证实验要求:必修一、实验目的0101(),(),,.bannf x dx f x x yx x x y yy⎰ 求定积分如果被积函数没有精确表达式只给出函数表这时可用梯形等公式求出它的近似值二、实验内容121.2.3.41dx xπ=+⎰算法设计编写程序上机调试计算实例计算三、实验组织远行要求统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验七 变步长法实验学时:2实验要求:必修一、 实验目的,,,,,.,.()..simpson b an h simpson n-=复化公式是提高精度的行之有效的方法但是在使用求积公式之前必须先给出步长步长取得太大精度难以保证步长太小则导致计算量的增加而事先给出一个合适的步长往往是困难的因此提出了自动取积分步长是在求积过程中根据精度要求自动确定因此提出公式的逐次分半加速法二、实验内容1.算法设计212.3.:0.7468242570.000((6)x I dx eε-=≈=⎰编写程序上机调试计算实例计算参考程序三、实验组织远行要求统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网。
五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验八 Euler 方法实验学时:2实验要求:必修一、 实验目的10101:(,),0,11(,)[,]::.ii iin x a nEuler hf i n y f x y x a b a by yy y x x x x y y y +==+=-'=∈⎧⎪=<<<=⎨=⎪⎩ 用公式求一阶常微分方程初值问题在离散点上的近似值二、实验内容1.2.3.201(0)0x y y x y y ⎧'=-<<⎪⎨⎪=⎩算法设计编写程序上机调试计算实例求一阶初值问题的数值解三、实验组织远行要求、统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网。
五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验九 Jacobi 迭代法、Gauss-Seidel 迭代法实验学时:2实验要求:必修一、 实验目的Jacobi Ax b =用迭代法解线性方程组二、实验内容1122331.2.3.:10127.2 1.09999:11028.3: 1.19999115 4.2 1.29999x x x x x x ⎡⎤⎧--=⎡⎤⎡⎤⎢⎥⎪⎢⎥⎢⎥--==⎨⎢⎥⎢⎥⎢⎥⎪⎢⎥⎢⎥⎢⎥--=⎣⎦⎣⎦⎣⎦⎩算法分析编写程序上机调试计算实例解方程组计算结果三、实验组织远行要求统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网。
五、实验步骤1.根据算法事先写出相应程序。
2.启动PC 机,进入tc 集成环境,输入代码。
3.编译调试。
4.调试通过,计算出正确结果后。
实验十 Newton 迭代法实验学时:2 实验类型:验证 实验要求:必修一、 实验目的1():0,1,2()()0.n n n n f Newton n f f x x x x x +=-='= 利用迭代公式求非线性方程的近似根二、实验内容531.2.3.:sin 200xx e x -+-=算法分析编写程序上机调试计算实例求方程的根三、实验组织远行要求统一进行实验,一人一组。
四、实验条件PC 机,tc2.0,Internet 网。