太原理工大学数值计算实验报告

上传人:仙*** 文档编号:119853838 上传时间:2022-07-16 格式:DOC 页数:16 大小:588KB
返回 下载 相关 举报
太原理工大学数值计算实验报告_第1页
第1页 / 共16页
太原理工大学数值计算实验报告_第2页
第2页 / 共16页
太原理工大学数值计算实验报告_第3页
第3页 / 共16页
点击查看更多>>
资源描述
本科实验报告课程名称:计算机数值方法实验项目: 方程求根,线性方程组的直接求解, 线性方程组的迭代求解,代数插值和最小二乘法拟合实验地点:软件楼208专业_学生_指导 李志 崔冬华2015年6月5日学生#实验成绩实验名称 实验一方程求根实验内容和要求必填目的:数值计算方法是一门实践性和实用性都很强的课程,学习的目的在于应用已有的理论基础和技术方法,实现对实际计算问题的计算机求解.本实验配合计算数值方法课堂教学,通过上机实践实验环节,巩固课堂和书本上所学的知识、加强实践能力、提高解决实际计算问题的水平、启发创新思想.其基本目的是: 培养理论联系实际的思路,训练综合运用已经学过的理论和实际知识去分析和解决实际问题的能力. 帮助学生全面消化已学的相关课程内容,深刻理解计算数值方法课程的内涵,培养使用电子计算机进行科学计算和解决问题的能力. 进行基本技能训练和巩固.使学生得到选择算法、编写程序、分析数值结果、写数值试验报告、课堂讨论等环节的综合训练.要求: 应用结构化程序设计编出通用程序,源程序要有详细的注释和说明; 比较计算结果,分析数值解误差的原因; 实验完成,要求提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训.实验原理必填选择上述方法中的两种方法求方程:f=x3+4x2-10=0在1,2内的一个实根,且要求满足精度|x*-xn|0.510-5主要仪器设备笔记本计算机实验记录迭代法:#include stdafx.h#includestdio.h#includemath.h#includeiostreamusing namespace std;float main float a; cina; float t, x; x=a; do x=sqrt/4; t=a; a=x; whilefabs0.5*1e-5; printf; system;割线法:#includestdafx.h#includestdio.h#includemath.h#includeiostreamusingnamespace std;float mainfloat c,a=1.0,b=2.0;/cinab;while c=b-*/b*b*b+4*b*b-;iffabs break; b=c;coutc;实验结果和分析 实验结果:迭代法:割线法:心得体会遇到的问题和解决方法使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同.实验名称 实验二线性方程组的直接求解实验内容和要求1了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法.2加深对线性方程组求解方法的认识,掌握算法.3会进行误差分析,并能对不同方法进行比较.实验原理合理利用Gauss消元法、LU分解法或追赶法求解下列方程组: 1 、2、3、4、n=5,10,100,主要仪器设备台式或笔记本计算机实验记录Gauss消元法:#includestdafx.h#includestdio.h#includeiostreamusingnamespace std;float mainfloat a34=1,2,3,14,0,1,2,8,2,4,1,13;float x3;float sum=0;int k,i,j;fork=0;kfori=k+1;iforj=k+1;jaij=aij-aik/akk*akj;fori=0;iforj=0;jprintf;coutendl; x2=a23/a22;for=0;k- sum=0;forj=k+1;j sum+=akj*xj; xk=/akk;fori=0;iprintf ; LU分解法:#includestdafx.h#include#include#define L 30double a L L , b L , l L L , u L L , x L , y L ;int mainint n, i, j, k, r;scanf;for i = 1; i for j = 1; j scanf;for i = 1; i scanf;for i = 1; i for j = 1; j l i j =0; u i j = 0.0; for k = 1; k for j = k; j u k j = a k j ;for r = 1; r u k j -= l k r * u r j ; for i = k + 1; i l i k = a i k ;for r = 1; r l i k -= l i r * u r k ; l i k /= u k k ; l k k = 1.0;for i = 1; i y i = b i ;for j = 1; j y i -= l i j * y j ; for 0; -i x i = y i ;for j = i + 1; j x i -= u i j * x j ; x i /= u i i ; for i = 1; i printf;return 0;追赶法:#include stdafx.h#include stdio.hvoid main FILE *f; double a15,b15,c15,d15; double t; int i,n; f=fopen; fscanf; fscanf; fori=2;i fscanf; fscanf; fclose; c1=c1/b1; d1=d1/b1; fori=2;i t=bi-ci-1*ai; ci=ci/t; di=/t; dn=/; for=1;i- di=di-ci*di+1; printf; fori=1;i printf;Zgf.txt文件中的内容是:52 1 -71 2 1 -5 1 2 1 -51 2 1 -5 1 2 -5实验结果和分析Gauss消元法:心得体会遇到的问题和解决方法在调试过程中发现自己还是很粗心,容易犯简单错误,在今后应该多编写程序.实验名称 实验三线性方程组的迭代求解实验内容和要求学习使用雅可比迭代法或高斯-赛德尔迭代法实验原理主要仪器设备台式或笔记本计算机实验记录高斯-赛德尔迭代法:#include stdafx.h#include stdio.h#include math.hvoid main float a33=10,-1,-2,-1,10,-2,-1,-1,5,b3=7.2,8.3,4.2;float x3=0,0,0,sum1,sum2;int i,j,k,n=3;for k=0;k fori=0;i sum1=0; sum2=0;forj=0;j sum1=sum1+aij*xj; forj=i+1;j sum2=sum2+aij*xj; xi=/aii; fori=0;i printf; printf; 雅克比迭代:#includestdafx.h#include#includevoid main float a33=10,-1,-2,-1,10,-2,-1,-1,5,b3=7.2,8.3,4.2;float x3=0,0,0,sum1;int i,j,k,n=3;for k=0;k fori=0;i sum1=0;forj=0;j if continue;sum1=sum1+aij*xj;xi=/aii; fori=0;i printf;printf; 实验结果和分析结果:高斯-赛德尔迭代法:雅克比迭代:分析:使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求.心得体会遇到的问题和解决方法高斯迭代法比雅克比迭代迭代速度快,所以在编程时选择了高斯迭代法.实验名称 实验四代数插值和最小二乘法拟合实验内容和要求实验内容:使用拉格朗日插值法求解:已知f在6个点的函数值如下表所示,运用插值方法,求f的近似值.x0.400.550.650.800.901.05f0.410750.578150.696750.888111.026521.25386实验要求:1了解拉格朗日插值法的基本方法、基本原理. 2通过编写程序,进行算法设计和数值求解.实验原理拉格朗日基函数为:拉格朗日插值多项式为:主要仪器设备台式或笔记本计算机实验记录#include#include#includetypedef struct data float x; float y;Data; Data d20; float f if return /; else return f-f/; float Newton int n; while cout请输入n值:; cinn; ifn break; else system; float t=1.0; float y=d0.y; float yt=0.0; forint j=1;j t=*t; yt=f*t; y=y+yt; return y;float lagrange float y=0.0; forint k=0;k float p=1.0; forint j=0;j ifcontinue; p=p*/; y=y+p*dk.y; return y;void main float x,y; int count; while coutcount; ifcount break; system; forint i=0;i cout请输入第i+1di.x; cout请输入第i+1di.y; system; coutx; while int choice=3; cout请您选择使用哪种插值法计算:endl; cout :退出endl; cout :Lagrangeendl; cout :Newtonendl; coutchoice; if cout你选择了牛顿插值计算方法,其结果为:; y=Newton;break; if cout你选择了拉格朗日插值计算方法,其结果为:; y=lagrange;break; if break; system; cout输入错误!endl; coutx , yendl;实验结果和分析分析:拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费.心得体会遇到的问题和解决方法16 / 16
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!