计算方法上机实验指导书刘轶中
计算方法实验指导书1
第一章 绪论一、主要要求通过实验,认真理解和体会数值计算的稳定性、精确性与步长的关系。
二、主要结果回顾: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)式的计算结果。
(完整word版)计算方法A上机实验报告
计算方法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 类文件加以操作。
《算法与数据结构》上机指导书
else {printf("不存在值为%d的元素\n",e);return 0;}
}
int scan()
{int d;
printf("请选择所要进行的操作\n");
printf("1.初始化2.清空3.求顺序表长度4.检查顺序表是否为空\n");
}
五、实验注意事项
1、在做第一次“数据结构”课程实验之前,要在硬盘上建立好自己的工作目录,专门来存储你所做的实验程序及相关信息,以后每次做实验都采用这个目录。
实验二顺序表其它操作
一、目的和要求
1、进一步掌握在线性表的顺序存储结构上的一些其它操作。
三、仪器、设备和材料
1、计算机若干台
四、实验步骤
/*定义ElemType为int类型*/
typedef int ElemType;
/*顺序表存储空间的总分配量*/
#define MAXSIZE 100
#define FALSE 0
#define TRUE 1
/*顺序存储类型*/
typedef struct
前言
算法与数据结构是计算机科学与技术专业和其他有志从事计算机技术工作的人员的一门重要的专业基础课。算法与数据结构课程的教学要求是学会分析研究计算机加工的数据对象的特征,以便在实际应用中选择适当的数据结构、存储结构和相应的算法,初步掌握算法的时间与空间性能分析技巧,得到复杂程序设计的训练。
本书是与高等教育出版社出版的《数据结构――用C语言描述》(唐策善等编)相配套的,给出了十三个上机实验指导,每个实验都给出了几道上机题目,每个实验题目都介绍了实验目的,主要采用的方法与技术和C语言实现程序。通过实验使学生了解并学会如何运用数据结构只是去解决现实世界的某些实际问题,具备设计较复杂程序的初步能力。
《计算方法》上机实验指导书刘轶中-8页word资料
理学院《计算方法》实验指导书适合专业:信息与计算科学数学与应用数学贵州大学二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、正确应用所学方法求出给定的非线性方程满足一定精度要求的数值解。
《计算方法》实验大纲2014
《计算方法》实验大纲数学与统计学学院信息与计算科学教研室2014修订内容提要本书内容包括:一元非线性方程的解法、线性代数方程组的直接解法、线性方程组的迭代解法、插值法和曲线拟合等主要方法简介,给出了上机实验的目的、内容,并设计了一些实验习题,最后给出了几个综合型案例供有兴趣的学生进一步研究选用。
前言随着计算机的广泛应用和迅猛发展,在各门自然科学和工程、技术科学的发展中,“数值计算”已经成为平行于理论分析和科学实验的第三种科学手段。
现在,不管是在高科技领域还是在一些传统领域,数值计算都是一个不可或缺的环节。
而《计算方法》介绍了一些基础性和应用较广的数值计算方法,使学生对计算数学的特点和计算机如何解题有一个初步的了解;同时,本课程又是一门实践性较强的课程,必须通过实验课使学生对于算法如何在计算机上实现有一个感性的认识,要求学生运用matlab语言结合上机实践,掌握编写数值计算程序的基本方法,通过做一些实验性练习,强化已经学到的知识,逐步完成从学到用的过程。
适用专业:信息与计算科学专业、应用数学专业四年制本科生。
实验要求:1.用matlab语言或你熟悉的其他算法语言遍程序,使之尽量具有通用性。
2.上机前充分准备,复习有关算法,写出并反复查对程序,列出上机步骤。
3.根据老师要求选做实验习题。
4.完成计算后根据要求写出计算实验报告,内容包括:实验目的,实验内容,算法步骤描述,变量说明,程序清单,输出计算结果,结果分析、小结及心得体会、备注等。
1.课程名称:即计算方法2.课程类型:专业课3.适用专业:应用数学、信息与计算科学4.课程学时与学分:8 学时数值计算的应用范围已十分广泛,作为用计算机解决实际问题的基础、桥梁和纽带,是架设在数学与计算机之间的一条通道。
本大纲是《计算方法》的配套上机实验,旨在引导学生使用计算机开展数值试验,掌握数值算法和程序设计的基本原理和技能。
学生通过选择算法,编写程序,分析数值结果,写数值实验报告,课堂讨论等环节的综合训练,从而逐步掌握数值试验的方法和技巧,获得多方面的计算经验。
长春工大计算方法实验课程指导书2016
《计算方法》实验课程指导书徐中宇2016年9月目录第一章插值法 (1)§1拉格朗日插值 (1)§2牛顿插值 (5)第二章数值积分 (8)第三章线性方程组的解法 (10)§1高斯消去法 (10)§2列主元消去法 (14)§3线性方程组的迭代解法 (18)第四章方程求根 (23)§1二分法 (23)§2牛顿迭代法 (26)§3埃特金(A ITKEN)迭代法 (28)第一章 插值法目的与要求:1. 掌握不同的输入、输出语句,注意节约内存方法。
2. 熟悉拉格朗日插值和牛顿插值公式,并体会它们不同的特点。
§1拉格朗日插值1.方法概要:拉格朗日N 次插值多项式 0()()nn i L x li x yi ==∑,其中0,()()/()ni j i j j j il x x x x x =≠=--∏可用双重循环来实现;内循环为连乘;外循环为连加。
用数组表下标变量,给出i i y x ,。
图1-1 拉格朗日插值法程序流程图3.程序及例例1.1 已知函数表:X I 0.56160 0.56280 0.56401 0.56521Y I 0.82741 0.82659 0.82577 0.82495用三次拉格朗日插值多项式求X=0.5635时的函数值。
程序为#INCLUDE "STDAFX.H"#INCLUDE <IOSTREAM.H>CONST INT N=3;CONST DOUBLE XX=0.5635;VOID MAIN(){DOUBLE X[N+1]={0.56160,0.56280,0.56401,0.56521}; DOUBLE Y[N+1]={0.82741,0.82659,0.82577,0.82495};DOUBLE L=0,LI=1;FOR (INT I=0;I<=N;I++){LI=1;FOR (INT J=0;J<=N;J++){IF (J!=I){LI=LI*(XX-X[J])/(X[I]-X[J]);}}L+=LI*Y[I];}COUT<<"THE RESULT IS:"<<L<<ENDL;}例1.2已知函数表,用拉格朗日插值多项式求0.5,0.7,0.85三点处的函数值。
计算方法上机实验指导
计算方法上机实验指导一、非线性方程求解(一)问题的指出二分法1.方法概要假定f(x)在[a,b]上连续,f(a)f(b) 0且f (x)在(a,b)内仅有一实根x*取区间中点c,若f(c) 0,则c恰为其根,否则,根据f(a)f(c) 0是否成立,可判断出根所属的新的有根子区间(a,c)或(c, b),为节省内存,仍称其为(a,b)。
运算重复进行,直到满足精度要求为止,即|c x*| b a 。
式中a,b为新的有根子区间的端点。
2•计算框图Nowt on 迭代法1.方法概要X。
为初始猜测,则由递推关系X k 1 x k f (X k)f (x k)法。
当x°距x*较近时,{xd很产生逼近解x的迭代序列{x k},这个递推公式就是Newton快收敛于X*。
但当X。
选择不当时,会导致{X k}发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
掌握二分法与牛顿法的基本原理及应用(三)要求1•用二分法计算方程X2sin x 02在(1, 2)内的根的近似值2•用二分法计算方程X3x 1 0 在(1,1.5)内的根的近似值(0.5 10 5)。
3 •用牛顿法求下列非线性方程的近似根。
① xxe 1 0 x0.5② 3 x x 1 0X 。
1③ (x1)2(2X 1)x 0.45x 0.654 • 用改进的牛顿法X k1x k2f (X k ) f (x k )计算方程(x 1)2(2X 1) 0x 0 0.55的近似根,并与要求 3•中的③的结果进行比较。
二、Gauuss 列主元消去法(一)问题的提出由地一般线性方程组在使用Gauss 消去法求解时,从求解过程中可以清楚地看到,若a kk 1)0,必须施以行交换的手续,才能使消去过程继续下去。
有时既使 a kk 1)0,但其绝对值很小,由于舍入误差的影响, 消去过程也会出现不稳定现象。
因此, 为使这种不稳定 现象发生的可能性减至最小,在施行消去过程时每一步都要选主元素,即要寻找行r ,使并将第r 行与第k 行交换,以使 |a 「)| max|a ik k1)la k k 1}的当前值(即a ik k 1}的数值)远大于0。
计算方法与程序设计实验指导书
《计算方法与程序设计》实验指导书1.上机实验使用的语言:C 语言或PASCAL 语言任选。
2.上机要求和步骤:(1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;(2)编写上机实验程序,作好上机前的准备工作;(3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);(4)分析和解释计算结果; (5)按照要求书写实验报告; (6)要求独立完成上述各项。
3.实验内容:实验一 非线性方程求根从下列3题中任选2题:1为求方程01)(23=--=x x x f 在5.10=x 附近的一个根,可将方程改写成下列下列等价形式,并建立相应的迭代公式(1) 改写成211x x +=迭代公式为2111kk x x +=+; (2) 改写成231x x +=迭代公式为3211k k x x +=+;(3) 改写成112-=x x 迭代公式为111-=+k k x x试分析每一种迭代公式的收敛性。
2 证明:当5.10=x 时,迭代法k k x x +=+4101 和 311021k k x x -=+都收敛于方程0104)(23=-+=x x x f 在区间[1,2]内唯一实根*x ,并分别用上迭代法求满足要求5110-+≤-k k x x 的近似根。
再用牛顿迭代法求此方程根的近似值(精确到5110-+≤-k k x x ),并将迭代次数与上面方程相比较。
3 设0>a ,试写出用牛顿迭代法求a 近似值的计算公式,并且 (1) 讨论该迭代法的收剑性;(2) 求17具有4位有较数字的近似值。
实验二 线代数方程求解 从下列3题中任选2题:1 分别用顺序消去法和列主元消去法解方程组⎪⎩⎪⎨⎧=++-=++-=++000.3643.5072.1000.2000.2623.4712.3000.1000.1000.3000.2001000.0321321321x x x x x x x x x (要求用具有舍入的4位数进行运算),并将所得结果与具有四位有较数字的准确解T x )3675.0,05104.0,4904.0(*--=进行比较。
计算方法上机作业
计算方法上机报告姓名:学号:班级:上课班级:说明:本次上机实验使用的编程语言是Matlab 语言,编译环境为MATLAB 7。
11。
0,运行平台为Windows 7。
1. 对以下和式计算:∑∞⎪⎭⎫ ⎝⎛+-+-+-+=0681581482184161n n n n S n ,要求:① 若只需保留11个有效数字,该如何进行计算;② 若要保留30个有效数字,则又将如何进行计算;(1) 算法思想1、根据精度要求估计所加的项数,可以使用后验误差估计,通项为:142111416818485861681n n n a n n n n n ε⎛⎫=---<< ⎪+++++⎝⎭; 2、为了保证计算结果的准确性,写程序时,从后向前计算;3、使用Matlab 时,可以使用以下函数控制位数:digits (位数)或vpa(变量,精度为数)(2)算法结构1。
;0=s⎪⎭⎫ ⎝⎛+-+-+-+=681581482184161n n n n t n ; 2。
for 0,1,2,,n i =⋅⋅⋅if 10m t -≤end ;3。
for ,1,2,,0n i i i =--⋅⋅⋅;s s t =+(3)Matlab源程序clear;%清除工作空间变量clc; %清除命令窗口命令m=input(’请输入有效数字的位数m=’); %输入有效数字的位数s=0;for n=0:50t=(1/16^n)*(4/(8*n+1)—2/(8*n+4)—1/(8*n+5)—1/(8*n+6));if t〈=10^(—m) %判断通项与精度的关系break;endend;fprintf('需要将n值加到n=%d\n',n-1); %需要将n值加到的数值for i=n—1:-1:0t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)—1/(8*i+5)—1/(8*i+6));s=s+t; %求和运算ends=vpa(s,m)%控制s的精度(4)结果与分析当保留11位有效数字时,需要将n值加到n=7,s =3.1415926536;当保留30位有效数字时,需要将n值加到n=22,s =3。
华科计算方法上机实验报告
《计算方法》实验报告专业及班级 : 姓名:学号:日期:2013年6月12日一,方程求根1.用牛顿迭代法求解下列方程的正根(1)log(1+x)-x^2=0 x=7.468818e-001求解代码:牛顿迭代法的函数M文件:function x=Newt_n(f_name,x0)x=x0;xb=x+1;k=0;n=50;del_x=0.01;while abs(x-xb)>0.000001k=k+1;xb=x;if k>=n break;end;y=feval(f_name,x);y_driv=(feval(f_name,x+del_x)-y)/del_x;x=xb-y/y_driv;fprintf('k=%3.0f,x=%12.5e,y=%12.5e,yd=%12.5e\n',k,x,y,y_driv); end;fprintf('\n Final answer=%12.6e\n',x);待求方程的函数M文件:function y=eqn_1(x)y=log(x+1)-x^2;运行结果:Newt_n('eqn_1',1)k= 1,x=7.96954e-001,y=-3.06853e-001,yd=-1.51125e+000k= 2,x=7.50200e-001,y=-4.90424e-002,yd=-1.04895e+000k= 3,x=7.46936e-001,y=-3.07003e-003,yd=-9.40663e-001k= 4,x=7.46882e-001,y=-5.03365e-005,yd=-9.33074e-001k= 5,x=7.46882e-001,y=-6.30906e-007,yd=-9.32949e-001Final answer=7.468818e-001(2)e^x-5x=0 x=6.052671e-001待解方程:function y=eqn_1(x)y=exp(x)-5*x^2;运行结果:Newt_n('eqn_2',2)k= 1,x=1.00102e+000,y=-1.26109e+001,yd=-1.26239e+001 k= 2,x=6.88531e-001,y=-2.28918e+000,yd=-7.32552e+000 k= 3,x=6.11607e-001,y=-3.79584e-001,yd=-4.93453e+000 k= 4,x=6.05365e-001,y=-2.69226e-002,yd=-4.31343e+000 k= 5,x=6.05268e-001,y=-4.13312e-004,yd=-4.26254e+000 k= 6,x=6.05267e-001,y=-3.99547e-006,yd=-4.26175e+000 Final answer=6.052671e-001ans =0.6053(3)x^3+2x-1=0 x=4.533977e-001待解方程:function y=eqn_1(x)y=x^3+2*x-1;运行结果:Newt_n('eqn_3',3)k= 1,x=1.89997e+000,y=3.20000e+001,yd=2.90901e+001k= 2,x=1.15047e+000,y=9.65861e+000,yd=1.28868e+001k= 3,x=6.80277e-001,y=2.82368e+000,yd=6.00536e+000k= 4,x=4.82154e-001,y=6.75369e-001,yd=3.40884e+000k= 5,x=4.53984e-001,y=7.63945e-002,yd=2.71198e+000k= 6,x=4.53401e-001,y=1.53570e-003,yd=2.63202e+000k= 7,x=4.53398e-001,y=8.46834e-006,yd=2.63042e+000k= 8,x=4.53398e-001,y=4.41262e-008,yd=2.63041e+000 Final answer=4.533977e-001ans =0.4534(4)(x+2)^0.5-x=0 x=2.0000待解方程:function y=eqn_1(x)y=(x+2)^0.5-x;运行结果:Newt_n('eqn_4',1)k= 1,x=2.02879e+000,y=7.32051e-001,yd=-7.11565e-001 k= 2,x=2.00002e+000,y=-2.16052e-002,yd=-7.51049e-001 k= 3,x=2.00000e+000,y=-1.72788e-005,yd=-7.50157e-001 k= 4,x=2.00000e+000,y=-3.60276e-009,yd=-7.50156e-001 Final answer=2.000000e+000ans =2.00002.先用图解法确定初始点,然后再求方程 x sin x −1 = 0 x ∈[0,10]的所有根。
计算方法上机实验
1.拉格朗日插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/{ int i,j;float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/a=(float *)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){ a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);return yy;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;} if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");printf("Input xx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f\n",xx,yy);getch();}2.牛顿插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>void difference(float *x,float *y,int n){ float *f;int k,i;f=(float *)malloc(n*sizeof(float));for(k=1;k<=n;k++){ f[0]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");difference(x,(float *)y,n);printf("Input xx:");scanf("%f",&xx);yy=y[20];for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];printf("NewtonInter(%f)=%f",xx,yy);getch();}3.高斯列主元消去法,求解其次线性方程组第一种#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1);for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;}}for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];}for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return 0;}第二种#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main(){float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);}for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,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];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=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];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}message(){printf("\n\n Go on Enter ,Exit press Esc!");switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();} }}4.龙贝格求积公式,求解定积分#include<stdio.h>#include<math.h>#define f(x) (sin(x)/x)#define N 20#define MAX 20#define a 2#define b 4#define e 0.00001float LBG(float p,float q,int n){ int i;float sum=0,h=(q-p)/n;for (i=1;i<n;i++)sum+=f(p+i*h);sum+=(f(p)+f(q))/2;return(h*sum);}void main(){ int i;int n=N,m=0;float T[MAX+1][2];T[0][1]=LBG(a,b,n);n*=2;for(m=1;m<MAX;m++){ for(i=0;i<m;i++)T[i][0]=T[i][1];T[0][1]=LBG(a,b,n);n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)){ printf("Answer=%f\n",T[m][1]); getch();return ;}}}5.牛顿迭代公式,求方程的近似解#include<stdio.h>#include<math.h>#include<conio.h>#define N 100#define PS 1e-5#define TA 1e-5float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;int k=0;do{ x1= x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<PS)){ printf("\nFailed!");getch();exit();}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\n",k,x0);}while((fabs(d))>PS&&fabs(f(x1))>TA) ;return x1;}float f(float x){ return x*x*x+x*x-3*x-3; }float f1(float x){ return 3.0*x*x+2*x-3; }void main(){ float f(float);float f1(float);float x0,y0;printf("Input x0: ");scanf("%f",&x0);printf("x(0)=%f\n",x0);y0=Newton(f,f1,x0);printf("\nThe root is x=%f\n",y0); getch();}。
计算方法实验指导书(2014.2.27)讲解
实验一——插值方法实验学时:4实验类型:设计 实验要求:必修一 实验目的通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C )编程实现数值方法的求解。
并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。
二 实验内容通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。
取点越密集,所得折线就越逼近理论上的插值曲线。
本实验中将所取的点的横坐标存放于动态数组[]X n 中,通过插值方法计算得到的对应纵坐标存放于动态数组[]Y n 中。
以Visual C++.Net 2005为例。
本实验将Lagrange 插值、Newton 插值和三次样条插值实现为一个C++类CInterpolation ,并在Button 单击事件中调用该类相应函数,得出插值结果并画出图像。
CInterpolation 类为 class CInterpolation { public :CInterpolation();//构造函数CInterpolation(float *x1, float *y1, int n1);//结点横坐标、纵坐标、下标上限 ~ CInterpolation();//析构函数 ………… …………int n, N;//结点下标上限,采样点下标上限float *x, *y, *X;//分别存放结点横坐标、结点纵坐标、采样点横坐标float *p_H,*p_Alpha,*p_Beta,*p_a,*p_b,*p_c,*p_d,*p_m;//样条插值用到的公有指针,分别存放i h ,i α,i β,i a ,i b ,i c ,i d 和i m};其中,有参数的构造函数为CInterpolation(float *x1, float *y1, int n1) {//动态数组x1,y1中存放结点的横、纵坐标,n1是结点下标上限(即n1+1个结点) n=n1;N=x1[n]-x1[0]; X=new float [N+1]; x=new float [n+1]; y=new float [n+1];for (int i=0;i<=n;i++) {x[i]=x1[i]; y[i]=y1[i]; }for (int i=0;i<=N;i++) X[i]=x[0]+i; }2.1 Lagrange 插值()()nn i i i P x y l x ==∑,其中0,()nji j j n i jx x l x x x =≠-=-∏对于一个自变量x ,要求插值函数值()n P x ,首先需要计算对应的Lagrange 插值基函数值()i l x float l(float xv,int i) //求插值基函数()i l x 的值 {float t=1;for (int j=0;j<=n;j++) if (j!=i)t=t*(xv-x[j])/(x[i]-x[j]); return t; }调用函数l(float x,int i),可求出()n P xfloat p_l(float x) //求()n P x 在一个点的插值结果 {float t=0;for (int i=0;i<=n;i++) t+=y[i]*l(x,i); return t; }调用p_l(float x)可实现整个区间的插值float *Lagrange() //求整个插值区间上所有采样点的插值结果 {float *Y=new float [N+1]; for (int k=0;k<=N;k++) Y[k]=p_l(x[0]+k*h); return Y; } 2.2Newton 插值010()(,,)()nn i i i P x f x x x x ω==∑,其中101,0()(),0i i j j i x x x i ω-==⎧⎪=⎨-≠⎪⎩∏,0100,()(,,)()ik i nk k j j j kf x f x x x x x ==≠=-∑∏对于一个自变量x ,要求插值函数值()n P x ,首先需要计算出01(,,)i f x x x 和()i x ωfloat *f() {//该函数的返回值是一个长度为n +1的动态数组,存放各阶差商 }float w(float x, int i) {//该函数计算()i x ω }在求()n P x 的函数中调用*f()得到各阶差商,然后在循环中调用w(float x)可得出插值结果 float p_n(float x) {//该函数计算()n P x 在一点的值 }调用p_n(float x)可实现整个区间的插值 float *Newton() {//该函数计算出插值区间内所有点的值 }2.3 三次样条插值三次样条插值程序可分为以下四步编写: (1) 计算结点间的步长i hi 、i α、i β;(2) 利用i hi 、i α、i β产生三对角方程组的系数矩阵和常数向量; (3) 通过求解三对角方程组,得出中间结点的导数i m ; (4) 对自变量x ,在对应区间1[,]i i x x +上,使用Hermite 插值; (5)调用上述函数,实现样条插值。
计算方法课程教学大纲汇总
《计算方法》课程教学大纲课程编号:学时:54 学分:3适用对象:教育技术学专业先修课程:高等数学、线性代数考核方式:本课程考试以笔试为主70%,兼顾学生的平时成绩30%。
使用教材及主要参考书:使用教材:李庆扬.《数值分析(第四版)》, 清华大学出版,2014年。
主要参考书:1.朱建新,李有法.《高等学校教材:数值计算方法(第3版)》,高等教育出版社,2012。
2.徐萃薇,孙绳武.《计算方法引论(第4版)》,高等教育出版社,2015。
一课程的性质和任务计算方法是教育技术学专业学生的一门专业选修课。
作为计算数学的一个重要分支,它是数学科学与计算机技术结合的一门应用性很强的学科,本课程重点介绍计算机上常用的基本计算方法的原理和使用;同时对计算方法作适当的分析。
教学任务:通过本课程的学习,要使学生具有现代数学的观点和方法,并初步掌握处理计算机常用数值分析的构造思想和计算方法。
同时,也要培养学生抽象思维和慎密概括的能力,使学生具有良好的开拓专业理论的素质和使用所学知识分析和解决实际问题的能力。
二教学目的与要求教学目的:通过学习使学生了解数值计算方法的基本原理。
了解计算机与数学结合的作用及课程的应用性。
为今后使用计算机解决实际问题中的数值计算问题打下基础。
通过理论教学达到如下基本要求。
1.了解误差的概念2.掌握常用的解非线性方程根的方法3.熟练掌握线性代数方法组的解法4.熟练掌握插值与拟合的常用方法5.掌握数值积分方法6.了解常微分方程初值问题的数值方法三学时分配四教学中应注意的问题本课程是一门理论性较强、内容较抽象的综合课程,因此面授辅导或自学,将是不可缺少的辅助教学手段,教师在教学的过程中一定要注意理论结合实际,课堂教学并辅助上机实验,必须通过做练习题和上机实践来加深对概念的理解和掌握,熟悉公式的运用,从而达到消化、掌握所学知识的目的。
同时应注重面授辅导或答疑,及时解答学生的疑难问题。
五教学内容第一章绪论(误差)基本内容:第一节数值分析研究的对象和特点第二节数值计算的误差1.误差的来源与分类2.误差与有效数字3.数值运算的误差估计第三节误差的定性分析与避免误差的危害1.病态问题与条件数2.算法的数值稳定性3.避免误差危害的若干原则教学重点难点:重点:数值运算的误差估计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
理学院《计算方法》实验指导书适合专业:信息与计算科学数学与应用数学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 网。