数值计算方法实验
- 格式:doc
- 大小:96.50 KB
- 文档页数:4
本科实验报告课程名称:数值计算方法实验地点:计算机科学与技术学院506 专业班级:学号:学生姓名:指导教师:**年月日太原理工大学学生实验报告}printf("%f\n",c);}五、实验结果与分析二分法割线法分析:使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。
并且割线法程序代码量较少,精简明了。
六、讨论、心得本次数值计算方法程序设计实验是在不断的习题练习中跳脱出来,直接面对实用性较强的程序代码编写。
效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。
将理论成功地转化成实践结果。
实验地点北区多学科综合楼4506指导教师王峥太原理工大学学生实验报告x[i] = y[i];for(j=i+1;j<=n;++j){x[i]-=u[i][j]*x[j];}x[i]/= u[i][i];}for(i=1;i<=n;++i){printf("%0.2lf\n",x[i]);}return 0;}五、实验结果与分析完全主元素消元法:列主元素消元法:LU分解法:分析:对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。
即,为了节约内存及时效,可以不必计算出主元素下方数据。
列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。
列主元素消元法的耗时比完全主元素法少很多,常采用之。
对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。
其中的L为n阶单位下三角阵、U为上三角阵.六、讨论、心得本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。
纠正各种语法、算法、思路错误。
最后勉强成功,但还是有几处警告,不得解决之法。
数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。
本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。
二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。
本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。
2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。
本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。
3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。
本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。
4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。
本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。
三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。
在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。
在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。
在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。
在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。
四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。
在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。
数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
第1篇一、实验目的1. 理解数值计算的基本概念和常用算法;2. 掌握Python编程语言进行数值计算的基本操作;3. 熟悉科学计算库NumPy和SciPy的使用;4. 分析算法的数值稳定性和误差分析。
二、实验内容1. 实验环境操作系统:Windows 10编程语言:Python 3.8科学计算库:NumPy 1.19.2,SciPy 1.5.02. 实验步骤(1)Python编程基础1)变量与数据类型2)运算符与表达式3)控制流4)函数与模块(2)NumPy库1)数组的创建与操作2)数组运算3)矩阵运算(3)SciPy库1)求解线性方程组2)插值与拟合3)数值积分(4)误差分析1)舍入误差2)截断误差3)数值稳定性三、实验结果与分析1. 实验一:Python编程基础(1)变量与数据类型通过实验,掌握了Python中变量与数据类型的定义方法,包括整数、浮点数、字符串、列表、元组、字典和集合等。
(2)运算符与表达式实验验证了Python中的算术运算、关系运算、逻辑运算等运算符,并学习了如何使用表达式进行计算。
(3)控制流实验学习了if-else、for、while等控制流语句,掌握了条件判断、循环控制等编程技巧。
(4)函数与模块实验介绍了Python中函数的定义、调用、参数传递和返回值,并学习了如何使用模块进行代码复用。
2. 实验二:NumPy库(1)数组的创建与操作通过实验,掌握了NumPy数组的基本操作,包括创建数组、索引、切片、排序等。
(2)数组运算实验验证了NumPy数组在数学运算方面的优势,包括加、减、乘、除、幂运算等。
(3)矩阵运算实验学习了NumPy中矩阵的创建、操作和运算,包括矩阵乘法、求逆、行列式等。
3. 实验三:SciPy库(1)求解线性方程组实验使用了SciPy库中的线性代数模块,通过高斯消元法、LU分解等方法求解线性方程组。
(2)插值与拟合实验使用了SciPy库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。
数值计算方法实验报告实验目的:通过实验验证不同数值计算方法在求解数学问题时的精度和效率,并分析其优缺点。
实验原理:实验内容:本实验选取了三个典型的数值计算问题,并分别采用了二分法、牛顿迭代法和梯度下降法进行求解。
具体问题和求解方法如下:1. 问题一:求解方程sin(x)=0的解。
-二分法:利用函数值的符号变化将解空间不断缩小,直到找到满足精度要求的解。
-牛顿迭代法:通过使用函数的斜率来逼近方程的解,并不断逼近真实解。
-梯度下降法:将方程转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,进而找到方程的解。
2.问题二:求解函数f(x)=x^2-3x+2的极小值点。
-二分法:通过确定函数在一个区间内的变化趋势,将极小值所在的区间不断缩小,从而找到极小值点。
-牛顿迭代法:通过使用函数的导数和二阶导数来逼近极小值点,并不断逼近真实解。
-梯度下降法:将函数转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,进而找到函数的极小值点。
3. 问题三:求解微分方程dy/dx = -0.1*y的解。
-二分法:通过离散化微分方程,将微分方程转化为一个差分方程,然后通过迭代计算不同点的函数值,从而得到函数的近似解。
-牛顿迭代法:将微分方程转化为一个积分方程,并通过迭代计算得到不同点的函数值,从而得到函数的近似解。
-梯度下降法:将微分方程转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,从而得到函数的近似解。
实验步骤:1.编写代码实现各个数值计算方法的求解过程。
2.对每个数值计算问题,设置合适的初始值和终止条件。
3.运行程序,记录求解过程中的迭代次数和每次迭代的结果。
4.比较不同数值计算方法的精度和效率,并分析其优缺点。
实验结果:经过实验测试,得到了如下结果:-问题一的二分法迭代次数为10次,求解结果为x=0;牛顿迭代法迭代次数为4次,求解结果为x=0;梯度下降法迭代次数为6次,求解结果为x=0。
-问题二的二分法迭代次数为10次,求解结果为x=1;牛顿迭代法迭代次数为3次,求解结果为x=1;梯度下降法迭代次数为4次,求解结果为x=1-问题三的二分法迭代次数为100次,求解结果为y=e^(-0.1x);牛顿迭代法迭代次数为5次,求解结果为y=e^(-0.1x);梯度下降法迭代次数为10次,求解结果为y=e^(-0.1x)。
实验报告一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2 关键代码及其解释3 调试过程六、实验总结1.遇到的问题及解决过程2.产生的错误及原因分析3.体会和收获。
七、程序源代码:八、教师评语实验报告一.试验目的:练习用数值方法求解给定的非线性方程。
二.实验内容:求解人口方程: )1(5.43e 1004.156-+=λλλe要求误差小于410-。
三.实验环境:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。
四.实验方法:牛顿法牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,2,1,0,)()(1='-=+k x f x f x x k k k k ,当数列{}k x 收敛时,其极限值x 即为方程的解。
定理:给定方程],[,0)(b a x x f ∈=1)设0)()(<b f a f ;2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''x f x f ;则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。
五.实验过程:1.编程: 用C 语言编出牛顿法的源程序。
2. 开机, 打开C 语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.六.实验总结:(1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证)()(1+>K K x f x f (称为下山条件),则有可能收敛。
把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。
(2)牛顿法要求)(x f '在x 附近不为零。
亦即x 只能是单根, 不能求重根。
可用重根加速收敛法求重根。
(3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(x f '比计算函数的近似值要麻烦的多。
数值计算方法实验报告5―温度分布的曲线拟合本报告是关于温度分布的曲线拟合的,望对大家有所帮助!!!数值计算方法实验报告标题:温度分布的曲线拟合1.实验描述:在科学技术工程和实验中,经常需要从大量的实验数据中寻找拟合曲线,最简单的是一维情形(一元函数),此时数据的形式为x和y坐标的有序对,如:(x1,y1),...,(xN,yN),这里的横坐标{x}是明确的。
数值计算方法的目的之一是求解一个将自变量与因变量联系起来的拟合函数。
求解拟合函数的方法有多种,常见的方法有:线性最小二乘拟合、多项式拟合(最小二乘抛物线拟合)、样条插值拟合(三次样条拟合)、三角多项式拟合、贝塞尔曲线拟合这五种方法。
本次实验分别利用上述五种方法对一组温度数据进行拟合,通过拟合的结果比较这五种方法的优缺点(主要考虑误差)。
2.实验内容:已知某地区一天的温度数据如下:时间,p.m***-**********午夜***-********-********-*****温度时间,a.m***-**********正午***-********-********-*****温度分别利用:线性最小二乘拟合、多项式拟合(最小二乘抛物线拟合)、样条插值拟合(三次样条拟合)、三角多项式拟合、贝塞尔曲线拟合这五种方法对这组温度数据进行拟合,通过拟合的结果比较这五种方法的优缺点。
3.实验原理及分析:本报告是关于温度分布的曲线拟合的,望对大家有所帮助!!!①线性最小二乘拟合法:设{(x,y)}有N个点,其中横坐标{x}是确定的。
最小二乘拟合曲线为:kkk=1kk=1y=Ax+B,其系数满足如下正规方程:(∑x)A+(∑xk)B=∑xkyk 2kNNNNNk=1k=1(∑xk)A+NB=∑yk k=1k=1N解得:A=N∑xk=1Nk=1Nkyk Nxy2k∑xkNxN2=∑(xNNkx)(yk y),B=y Axk∑(xk=1kx)2其中:x=∑xk=1N,y=∑yk=1N线性最小二乘法的本质是:多元函数(均方根误差函数)求极值问题。
《数值计算方法》实验报告班级数学132班学号201300144402姓名袁媛2016年 1月3日实验报告一1. 实验名称解线性方程组的直接法 2.实验题目用追赶法求解下列方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛101053-001-21-002-31-001-24321x x x x 3.实验目的熟练运用已经学过的方法计算方程组,巩固已经学到的解决方程组的方法,培养使用计算机进行科学计算和解决问题的能力,熟悉了解这样的系数矩阵,能运用追赶法进行方程组的求解。
4.基础理论设A 有如下形式的分解⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=------11......11...............1211122111122211n n n n n n n n n n t t t s r s r s r s b a c b a c b a c b A 其中,i i r s 和i t 为待定常数,则有1,...,3,2,, (3)2,,,111111-===+====-n i t s c n i s t r b r a t s c s b i i i i i i i i i 由可得如下计算公式:1111111,1,...,3,2,/,,/,---==-==-====n n n n n n i i i i i i i i i t r b s a r n i s c t t r b s a r s c t b s 即在A 满足条件的情况下,可以把{}{}i i s r ,和{}i t 完全确定出来,从而实现上面给定形式的LU 分解,且i r 等于),...3,2(n i a i =。
这样,求解三对角阵方程组Ax=f 就等价于求解两个三角形方程组y Ux f Ly ==, 从而得到公式:(1)计算{}i s 和{}i t 的递推公式 ;1, (3)2,/,,/11111---=-==-==n n n n i i i i i i i t a b s n i s c t t a b s b c t (2)求解f Ly = ni s y a f y b f y i i i i i ,...,3,2,/)(,/1111=-==-(3)求解y Ux =1,...,2,1,,1--=-==+n n i x t y x y x i i i i n n通常把计算121...-→→→n t t t 和n y y y →→→...21的过程称为追的过程,而把计算方程组的解11...x x x n n →→→-的过程称为赶的过程,这一方法称为解三角方程组的追赶法。
一、实验目的1. 熟悉数值计算的基本概念和方法;2. 掌握数值计算的基本原理和算法;3. 提高编程能力和数值计算能力;4. 通过实验,加深对数值计算方法的理解和应用。
二、实验内容1. 矩阵运算2. 线性方程组求解3. 函数求值4. 微分方程求解三、实验步骤1. 矩阵运算(1)编写程序实现矩阵的加法、减法、乘法运算;(2)编写程序实现矩阵的转置运算;(3)编写程序实现矩阵的逆运算。
2. 线性方程组求解(1)编写程序实现高斯消元法求解线性方程组;(2)编写程序实现雅可比迭代法求解线性方程组;(3)编写程序实现高斯-赛德尔迭代法求解线性方程组。
3. 函数求值(1)编写程序实现牛顿迭代法求函数的零点;(2)编写程序实现二分法求函数的零点;(3)编写程序实现割线法求函数的零点。
4. 微分方程求解(1)编写程序实现欧拉法求解一阶微分方程;(2)编写程序实现龙格-库塔法求解一阶微分方程;(3)编写程序实现龙格-库塔-法求解二阶微分方程。
四、实验结果与分析1. 矩阵运算(1)矩阵加法、减法、乘法运算结果正确;(2)矩阵转置运算结果正确;(3)矩阵逆运算结果正确。
2. 线性方程组求解(1)高斯消元法求解线性方程组,结果正确;(2)雅可比迭代法求解线性方程组,结果正确;(3)高斯-赛德尔迭代法求解线性方程组,结果正确。
3. 函数求值(1)牛顿迭代法求函数的零点,结果正确;(2)二分法求函数的零点,结果正确;(3)割线法求函数的零点,结果正确。
4. 微分方程求解(1)欧拉法求解一阶微分方程,结果正确;(2)龙格-库塔法求解一阶微分方程,结果正确;(3)龙格-库塔-法求解二阶微分方程,结果正确。
五、实验总结本次实验通过对数值计算方法的学习和实践,使我对数值计算有了更深入的了解。
以下是我对本次实验的总结:1. 矩阵运算是数值计算的基础,熟练掌握矩阵运算对于解决实际问题具有重要意义;2. 线性方程组求解是数值计算中常见的问题,高斯消元法、雅可比迭代法和高斯-赛德尔迭代法是常用的求解方法;3. 函数求值是数值计算中另一个常见问题,牛顿迭代法、二分法和割线法是常用的求解方法;4. 微分方程求解是数值计算中的难点,欧拉法、龙格-库塔法和龙格-库塔-法是常用的求解方法。
电子科技大学《数值计算方法》
实
验
报
告
输入6,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718263
输入10,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718282
输入100,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718282
从中计算结果看随n 增大迭代计算结果逐渐稳定,可认为出现此现象有两种情况一是对该输入序列a,b 用此迭代公式随序列増长会逐渐逼近一个稳定值,二是在迭代计算过程中产生大数“吃掉”小数现象且计算结果只取7为有效数字。
3. 实验结论
在计算机内做加法运算时,首先要对加数作对阶处理,加之计算机字长有限,因尽量避免出现大数吃小数现象,计算时要注意运算次序,否则会影响结果的可靠性。
报告评分:
指导教师签字:。
学院(系)名称:计算机与通信工程
附录(源程序及运行结果): 一. 四阶龙格-库塔法 #include<stdio.h> #include<math.h>
double f(double x,double y){return (x/y);} void main(){ double x0,y0,h,k1,k2,k3,k4,x1,y1; int n=0,N;
printf("请输入x 和y 的初值:"); scanf("%lf,%lf",&x0,&y0); printf("请输入步长h :"); scanf("%lf",&h);
printf("请输入n 的值:"); scanf("%d",&N); while(n!=N){ x1=x0+h; k1=f(x0,y0);
k2=f(x0+h/2,y0+h*k1/2); k3=f(x0+h/2,y0+h*k2/2); k4=f(x1,y0+h*k3);
y1=y0+h*(k1+2*k2+2*k3+k4)/6;
printf("x%d=%lf,y%d=%lf\n",n+1,x1,n+1,y1); n=n+1; x0=x1; y0=y1;
}
}运行结果:
二. 经典龙格-库塔法(两个未知函数) #include<stdio.h> #include<math.h>
double f(double x,double y,double z){return (3*y+2*z);} double g(double x,double y,double z){return (4*y+z);}
void main(){
double x0,y0,z0,h,k1,k2,k3,k4,l1,l2,l3,l4,x1,y1,z1;
int n=0,N;
printf("请输入x,y,z的初值:");
scanf("%lf,%lf,%lf",&x0,&y0,&z0);
printf("请输入步长h:");
scanf("%lf",&h);
printf("请输入n的值:");
scanf("%d",&N);
while(n!=N){
x1=x0+h;
k1=f(x0,y0,z0);
l1=g(x0,y0,z0);
k2=f(x0+h/2,y0+h*k1/2,z0+h*l1/2);
l2=g(x0+h/2,y0+h*k1/2,z0+h*l1/2);
k3=f(x0+h/2,y0+h*k2/2,z0+h*l2/2);
l3=g(x0+h/2,y0+h*k2/2,z0+h*l2/2);
k4=f(x1,y0+h*k3,z0+h*l3);
l4=g(x1,y0+h*k3,z0+h*l3);
y1=y0+h*(k1+2*k2+2*k3+k4)/6;
z1=z0+h*(l1+2*l2+2*l3+l4)/6;
printf("x%d=%lf,y%d=%lf,z%d=%lf\n",n+1,x1,n+1,y1,n+1,z1);
n=n+1; x0=x1; y0=y1; z0=z1;
}
}运行结果:。