《计算方法》实验指导书讲解.docx
- 文档编号:9432335
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:39
- 大小:304.64KB
《计算方法》实验指导书讲解.docx
《《计算方法》实验指导书讲解.docx》由会员分享,可在线阅读,更多相关《《计算方法》实验指导书讲解.docx(39页珍藏版)》请在冰豆网上搜索。
《计算方法》实验指导书讲解
《计算方法》实验指导书
实验1方程求根
一、实验目的
1.通过对二分法、牛顿法、割线法作编程练习,进一步体会它们各自不同的特点;
2.了解二分法,切线法,割线法。
3.能熟练运用二分法,牛顿法进行方程求根
4.通过上机调试运行,对方程求根的几种方法程序进行改进。
二、实验要求
1.上机前作好充分准备,包括复习编程所需要的语言工具。
2.上机时要遵守实验室的规章制度,爱护实验设备。
3.记录调试过程及结果,记录并比较与手工运算结果的异同。
4.程序调试完后,须由实验辅导教师在机器上检查运行结果。
5.给出本章实验单元的实验报告。
三、实验环境、设备
1.
硬件设备:
IBMPC以上计算机,有硬盘和一个软驱、单机和网络环境均可。
2.软件环境:
C语言运行环境。
四、实验原理、方法
二分算法计算步骤:
(1)输入有根区间的端点a、b及预先给定的精度ε;
(2)计算中点x=(a+b)/2;
(3)若f(x)f(b)<0,则a=x,转向下一步;否则b=x,转向下一步;
(4)若b-a<ε,则输出方程满足精度要求的根x,结束;否则转向步骤
(2)。
迭代法:
牛顿法:
牛顿迭代法是一种逐步线性化方法,即将非线性方程f(x)=0的求根问题归结为计算一系列线性方程的根。
设xk是方程f(x)=0的一个近似根,将f(x)在xk处作一阶泰勒展开,即
f(x)≈f(xk)+f′(xk)(x-xk)
于是得到如下的近似方程
f(xk)+f′(xk)(x-xk)=0(2.7)
设f′(xk)≠0,则式(2.7)的解为
取x作为原方程的新的近似根xk+1,即令
k=0,1,2,… (2.8)
则称式(2.8)为牛顿迭代公式。
用牛顿迭代公式(2.8)求方程近似根的方法称为牛顿迭代法,简称牛顿法,又称切线法。
五、实验内容
1.以方程:
x3-0.2x2-0.2x-1.2=0为例,编写程序求方程的根
2.编写二分法、迭代法、牛顿法程序,分析运行结果。
3.对用这两种方法求解出的根进行对比分析
六、实验步骤
1.根据实验题目,给出题目的C程序。
2.上机输入和调试自己所编的程序。
3.上机结束后,应整理出实验报告。
七、实验报告要求及记录、格式
按金陵科技学院《实验报告(工科)》格式填写
附1:
牛顿法程序核心部分:
for(i=0;i {printf("x(%d)=%f\n",i,x1); x1=x0-f(x0)/f1(x0);/*牛顿迭代*/ if(fabs(x1-x0) {printf("\nTherootoftheequationisx=%f\n",x1);/*满足精度,输出近似根*/ return; } x0=x1; } 实验2线性方程组数值解法 一、实验目的 1.掌握方程组的解法,迭代法及其收敛性。 2.能熟练掌握高斯消去法,列主元高斯消去法,三角分解法。 3.掌握雅可比迭代法,高斯=赛德尔迭代求线性方程组的解。 二、实验要求 1.上机前作好充分准备,比较不用的方法解决相同问题的不同。 2.上机时要遵守实验室的规章制度,爱护实验设备。 3.记录调试过程及结果,记录并比较与手工运算结果的异同。 4.程序调试完后,须由实验辅导教师在机器上检查运行结果。 5.给出本章实验单元的实验报告。 三、实验设备、环境 1.硬件设备: IBMPC以上计算机,有硬盘和一个软驱、单机和网络环境均可。 2.软件环境: C语言运行环境。 四、实验原理、方法 1、高斯消去法: 1)计算步骤 (1)输入方程组的阶数n,系数矩阵A和右端常数矩阵b (2)消元过程: 设 ,对k=1,2,…,n-1计算 i,j=k+1,k+2,…,n (3)回代过程 (4)输出方程组的解 2、列主元高斯消去法 (1)、输入方程组的阶数n,系数矩阵A和右端常数矩阵b (2)、列主元素: 对k=1,2,…,n-1,选出 中绝对值最大的元素 ,对k行和m行交换后,再作第k步消元操作。 (3)、消元过程: 对k=1,2,…,n-1计算 (i,j=k+1,k+2,…,n) (4)、回代过程 (5)、输出方程组的解 3、三角分解法: (1)根据方程组得到增广矩阵 (2)对j=1,2,…,n计算 对i=2,3,…,n计算 (3)对k=1,2,…,n a.对j=k,k+1,…,n+1计算 b.对i=k+1,k+2,…,n计算 (4)回代计算解 ,对k=n-1,n-2,…,2,1计算 五、实验内容 1.求解方程组: (1) (2) 2.编写高斯消去法、三解分解法程序,分析运行结果。 3.调试运行列主元高斯消去法、列主元三解分解法算法程序。 4.并用上述几种算法程序计算出上面两个方程组的解。 六、实验步骤 1.根据实验题目,给出解决问题的程序代码。 2.上机输入和调试自己所编的程序。 3.上机结束后,应整理出实验报告。 七、实验报告要求及记录、格式 按金陵科技学院《实验报告(工科)》格式填写 附1: 列主元高斯消去法源程序: /****************************************************/ /*列主元高斯消去法求线性方程组的解*/ /****************************************************/ #include #include #defineMax_N10/*方程组最大维数*/ /*列主元高斯消去法函数*/ voidColPivot(floatA[Max_N][Max_N],floatB[],intn) {inti,j,k,m_i; floatm_x,temp; for(i=0;i {/*列主元*/ j=i+1;m_i=i;m_x=fabs(A[i][i]); for(;j if(fabs(A[j][i]>m_x))/*找主元素*/ {m_i=j; m_x=fabs(A[j][i]); } if(i {temp=B[i];B[i]=B[m_i];B[m_i]=temp; for(j=i;j {temp=A[i][j];A[i][j]=A[m_i][j];A[m_i][j]=temp; } } /*消元*/ for(j=i+1;j {temp=-A[j][i]/A[i][i]; B[j]+=B[i]*temp; for(k=i;k A[j][k]+=A[i][k]*temp; } } } main()/*主函数*/ {inti,j,k,n; floata[Max_N][Max_N],b[Max_N],x[Max_N]; printf("\nPleaseinputnvalue(dimofAx=b): ");/*输入矩阵维数*/ do {scanf("%d",&n); if(n>Max_N) printf("\npleasere-inputnvalue: "); } while(n>Max_N||n<=0); /*输入Ax=b的A矩阵*/ printf("InputtheA(i,j): \n"); for(i=0;i for(j=0;j scanf("%f",&a[i][j]); /*输入b矩阵*/ printf("Inputb(i): \n"); for(i=0;i ColPivot(a,b,n);/*调用列主元消去法函数计算方程组的解*/ 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 x[i]-=a[i][j]*x[j]; x[i]/=a[i][i]; } printf("Solveis: ");/*输出方程组的解*/ for(i=0;i {printf("x[%d]=%f",i,x[i]); if(i%2==0) printf("\n"); } } /*--------------------Endoffile------------------------*/ /*Pleaseinputnvalue(dimofAx=b): 3 InputtheA(i,j): 211 132 122 Inputb(i): 465 Solveis: x[0]=1.000000 x[1]=1.000000x[2]=1.000000 */ 附2: 三角分解法源程序: /*******************************************************/ /*直接三角分解法(LU分解法)求线性方程组的解*/ /******************************************************/ #include #include #defineMax_N10/*最大维数*/ /*直接三角分解法函数*/ float*DirectLU(floata[Max_N][Max_N],floatb[],intn) {inti,j,k; floaty[Max_N],L[Max_N][Max_N],U[Max_N][Max_N],x[Max_N]; /*U矩阵对角元素赋值为1*/ for(i=0;i for(k=0;k {for(i=k;i {L[i][k]=a[i][k]; for(j=0;j<=k-1;j++) L[i][k]-=(L[i][j]*U[j][k]); } for(j=k+1;j {U[k][j]=a[k][j]; for(i=0;i<=k-1;i++) U[k][j]-=(L[k][i]*U[i][j]); U[k][j]/=L[k][k]; } } for(i=0;i {y[i]=b[i]; for(j=0;j<=i-1;j++) y[i]-=(L[i][j]*y[j]); y[i]/=L[i][i]; } for(i=n-1;i>=0;i--)/*计算Ux=y中的x*/ {x[i]=y[i]; for(j=i+1;j x[i]-=(U[i][j]*x[j]); } return(x); } main()/*主函数*/ {inti,j,k,n; floattemp; floata[Max_N][Max_N],b[Max_N],*x; printf("\nPleaseinputnvalue(dimofAx=b): ");/*输入矩阵维数*/ do {scanf("%d",&n); if(n>Max_N) printf("\npleasere-inputnvalue: "); } while(n>Max_N||n<=0); /*输入Ax=b的A矩阵*/ printf("InputtheA(i,j): \n"); for(i=0;i for(j=0;j scanf("%f",&a[i][j]); /*输入b矩阵*/ printf("Inputb(i): \n"); for(i=0;i x=DirectLU(a,b,n);/*调用直接三角分解法函数*/ printf("Solveis: ");/*输出方程组的解*/ for(i=0;i {printf("x[%d]=%f",i,x[i]); if(i%2==0) printf("\n"); } } /*--------------------------Endoffile----------------------------*/ /*程序输入输出: Pleaseinputnvalue(dimofAx=b): 3 InputtheA(i,j): 211 132 122 Inputb(i): 465 Solveis: x[0]=1.000000 x[1]=1.000000x[2]=1.000000 */ 实验3插值法 一、实验目的 1.掌握插值函数的概念,插值多项式的唯一性。 2.掌握插值余项,差分及等距插值公式,高次插值的误差分析。 3.掌握基本插值多项式,拉格朗日插值多项式,差商,牛顿插值多项式。 二、实验要求 1.上机前作好充分准备,比较不用的方法解决相同问题的不同。 2.上机时要遵守实验室的规章制度,爱护实验设备。 3.记录调试过程及结果,记录并比较与手工运算结果的异同。 4.程序调试完后,须由实验辅导教师在机器上检查运行结果。 5.给出本章实验单元的实验报告。 三、实验设备、环境 1.硬件设备: IBMPC以上计算机,有硬盘和一个软驱、单机和网络环境均可。 2.软件环境: C语言运行环境。 四、实验原理、方法 1、拉格朗日插值算法步骤: (1)、输入n, , (i=0,1,2,…,n),给初值 (2)、对i=0,1,2,…,n计算 (3)、输出 2、牛顿插值法算法步骤 (1)、输入n, (要求其函数值), , (i=0,1,2,…,n); (2)、对k=1,2,3,…,n,i=1,2,…,k计算各阶均差 ; (3)、利用下面的牛顿插值公式计算 的函数值 (4)、输出函数值。 五、实验内容 1.已知函数表 x 1.615 1.634 1.702 1.828 1.921 Y=f(x) 2.41450 2.46459 2.65271 3.03035 3.34066 (1)用拉格朗日插值(二次、四次)计算f(1.682)和f(1.813)的近似值。 (2)构造出均差表,并利用牛顿(均差)插值多项式计算f(1.682)和f(1.813)的近似值。 (3)分析并比较两种算法得到的近似值的精度。 2.编写拉格朗日和牛顿插值算法程序,分析运行结果。 六、实验步骤 1.根据实验题目,给出解决问题的程序代码。 2.上机输入和调试自己所编的程序。 3.上机结束后,应整理出实验报告。 七、实验报告要求及记录、格式 按金陵科技学院《实验报告(工科)》格式填写 附1: 拉格朗日插值法核心程序: for(i=0;i {f[i]=y[i]; for(j=0;j if(j! =i)f[i]*=(xx-x[j])/(x[i]-x[j]); yy+=f[i]; } 附2: 牛顿插值法核心程序: for(I=1;I<=N;I++)/*计算牛顿插值函数的值*/ {f[0]=y[I]; for(j=0;j f[j+1]=(f[j]-y[j])/(x[I]-x[j]); y[I]=f[I]; } b=y[N]; for(I=N-1;I>=0;I--)b=b*(xx-x[I])+y[I];/*计算函数值*/ 实验4曲线拟合 一、实验目的 1.掌握最小二乘原理,正规方程组,超定方程组概念。 2.掌握用最小二乘法拟合曲线,超定方程级的最小二乘解。 3.掌握用最小二乘法拟合曲线。 二、实验要求 1.上机前作好充分准备,复习最小二乘拟合方法。 2.上机时要遵守实验室的规章制度,爱护实验设备。 3.记录调试过程及结果,记录并比较与手工运算结果的异同。 4.程序调试完后,须由实验辅导教师在机器上检查运行结果。 5.给出本章实验单元的实验报告。 三、实验设备、环境 1.硬件设备: IBMPC以上计算机,有硬盘和一个软驱、单机和网络环境均可。 2.软件环境: C语言运行环境。 四、实验原理、方法 最小二乘法: 对于给定的线性方程组 Ax=b 式中 A= ,b= ,x= 当m>n时,称为矛盾方程组,又称超定方程组。 对于这种方程组有m个方程,而只有比m小的n个变量,即方程的个数超过未知量的个数,这种方程组一般来说是没有解的。 我们转而寻求在某种意义下的近似解。 如果这组近似解对于矛盾方程组中的每个方程式的误差的平方和为最小,即 为最小值时,就可以认为该组近似值为矛盾方程组的近似解。 这种近似解不是指对精确解的近似(因为精确解并不存在),而是指寻求各未知数的一组取值,使方程式(5.1)中各方程式近似相等,这就是最小二乘法的基本思想。 五、实验内容 1.设有如下实验数据 x 1.36 1.49 1.73 1.81 1.95 2.16 2.28 2.48 y 14.094 15.069 16.844 17.378 18.435 19.949 20.963 22.495 试用最小二乘法分别求一次及二次多项式曲线拟合以上数据。 2.编写程序,分析运行结果。 六、实验步骤 1.根据实验题目,给出解决问题的程序代码。 2.上机输入和调试自己所编的程序。 3.上机结束后,应整理出实验报告。 七、实验报告要求及记录、格式 按金陵科技学院《实验报告(工科)》格式填写 附: 抛物函数拟合源程序 /********************************************************/ /*最小二乘法-拟合抛物函数*/ /********************************************************/ #include #include #defineMax_N25/*最大数据点的个数*/ #defineM3/*正规方程组的阶数*/ /*列主元高斯消去法求解线性方程组*/ voidColPivot(floatA[M][M],floatB[],intn) {inti,j,k,m_i; floatm_x,temp; for(i=0;i {/*列主元*/ j=i+1;m_i=i;m_x=fabs(A[i][i]); for(;j if(fabs(A[j][i]>m_x))/*找主元素*/ {m_i=j; m_x=fabs(A[j][i]); } if(i {temp=B[i];B[i]=B[m_i];B[m_i]=temp; for(j=i;j {temp=A[i][j];A[i][j]=A[m_i][j];A[m_i][j]=temp; } } /*消元*/ for(j=i+1;j {temp=-A[j][i]/A[i][i]; B[j]+=B[i]*temp; for(k=i;k A[j][k]+=A[i][k]*temp; } } } main() {inti,j,k,n; floatx[Max_N],y[Max_N],b[M],a[M][M],c[M]; printf("\nPleaseinputnvalue: ");/*输入点数n*/ do {scanf("%d",&n); if(n>Max_N) printf("\npleasere-inputnvalue: "); } while(n>Max_N||n<=0); printf("Inputx[i],i=0,...%d: \n",n-1); for(i=0;i printf("Inputy[i],i=0,...%d: \n",n-1); for(i=0;i for(i=0;i {for(j=0;j {a[i][j]=0;b[i]=0; for(k=0;k { a[i][j]=a[i][j]+pow(x[k],i+j); b[i]=b[i]+pow(x[k],i)*y[k]; } } } /*输出正规方程组 for(i=0;i {for(j=0;j printf("%f",a[i][j]); printf("%f",b[i]); printf("\n"); } */ ColPivot(a,b,M);/*调用列主元消去法函数计算方程组的解*/ c[M-1]=b[M-1]/a[M-1][M-1];/*解方程*/ for(i=M-2;i>=0;i--) {c[i]=b[i]; for(j=i+1;j c[i]-=a[i][j]*c[j]; c[i]/=a[i][i]; } printf("Solveis: \n");/*输出方程组的解*/ for(i=0;i printf("c[%d]=%f\n",i,c[i]); printf("Result: y=%f+(%f)x+(%f)x2",c[0],c[1],c[2]); getch(); } /*----------------------------------------Endoffile------------------------------------*/ /*程序输入输出 Pleaseinputnvalue: 16 Inputx[i],i=0,...N-1: 12345678910111213141516 Inputy[i],i=0,...N-1: 46.488.89.229.59.79.861010.210.3210.421
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 实验 指导书 讲解