贵州大学数值分析上机实验
数值分析上机实验报告3
实验报告三题目:函数逼近——曲线拟合目的:掌握曲线拟合基本使用方法数学原理:[P,S]=polyfit(x,y,3)其中x,y为取样值,3为得出的结果的最高次数。
P为对应次数的系数,S为误差值向量,其中x,y是等长的向量,P是一个长度为m+1的向量。
结果分析和讨论:23.观察物体的运动,得出时间t与距离s的关系如表,求运动方程。
t=[0,0.9,1.9,3.0,3.9,5.0];s=[0,10,30,50,80,110];[P,S]=polyfit(t,s,5)P =-0.5432 6.4647 -26.5609 46.1436 -13.2601 -0.0000S =R: [6x6 double]df: 0normr: 1.2579e-012所以得到方程为:-13.2601x46.1436x-26.5609x6.4647x-0.5432x2345++24.在某化学反应堆里,根据实验所得分解物的质量分数y与时间t的关系,用最小拟合求y=F(t);>> x=0:5:55;y=[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.62,4.64];>> [P,S]=polyfit(x,y,5)P =0.0000 -0.0000 0.0002 -0.0084 0.2851 0.0082S =R: [6x6 double]df: 6normr: 0.0487所以得到方程为:0082.02851.00084.00002.023++-xxx结论:在23题中计算的结果误差为4.5769,而在24中计算的结果误差为0.0487,说明对于曲线拟合来说,总会有误差,因为取样点并不是都过拟合的曲线的。
数值分析上机报告(1)
一.上机目的1. 通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;2. 通过上机计算,了解舍入误差所引起的数值不稳定性;3. 熟悉并掌握拉格朗日插值多项式、牛顿插值多项式和分段低次插值,注意其不同特点;4. 了解最小二乘法的基本原理,能通过计算机解决实际问题。
二.上机环境MATLAB 软件等。
三.上机内容1.数值算法稳定性实验;2.插值法实验:拉格朗日插值、牛顿插值以及分段低次插值;3.曲线拟合实验:最小二乘法。
四.实验内容1、数值稳定性实验对n=0,1,2,…20计算定积分dx x x y n n ⎰+=105算法1 利用递推公式151--=n n y ny n=1,2,…,20 取182322.05ln 6ln 51100≈-=+-⎰dx x y 代码:y(1)=log(6)-log(5);for i=1:20y(i+1)=1/i-5*y(i);endk=ones(7,3);for i=1:7for j=1:3k(i,j)=y(3*(i-1)+j);endenddigits(6)vpa(k)结果:[ 0.182322, 0.0883922, 0.0580389][ 0.0431387, 0.0343063, 0.0284684][ 0.0243249, 0.0212326, 0.0188369][ 0.0169265, 0.0153676, 0.0140713][ 0.0129767, 0.0120398, 0.0112295][ 0.0105192, 0.00990388, 0.00930414][ 0.00903483, 0.00745741, 0.012713]算法2 利用递推公式n n y n y 51511-=- n=20,19,.…,1 注意到105151561126110200201020=≤+≤=⎰⎰⎰dx x dx x x dx x 取008730.0)12611051(2120≈+≈y 代码: y(21)=0.008730;for i=2:21j=22-i;y(j)=1/(5*j)-1/5*y(j+1);endk=ones(7,3);for i=1:7for j=1:3k(i,j)=y(3*(i-1)+j);endenddigits(6) ;vpa(k)结果:[ 0.182322, 0.0883922, 0.0580389][ 0.0431387, 0.0343063, 0.0284684][ 0.0243249, 0.0212326, 0.0188369][ 0.0169265, 0.0153676, 0.0140713][ 0.0129766, 0.0120399, 0.0112292][ 0.0105205, 0.0098975, 0.00933601][ 0.00887552, 0.008254, 0.00873]说明:从计算结果可以看出,算法1是不稳定的,而算法2是稳定的。
数值分析第七章实验报告7
贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级:实验日期:学 号: 点名序号:26姓名: 指导教师:实验成绩:一、实验名称实验六: 常微分方程初值问题数值解法二、实验目的及要求1. 让学生掌握用Euler 法, Runge-Kutta 法求解常微分方程初值问题.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0).四、实验内容1. 取步长h=0.1,0.05,0.01, ,用Euler 法及经典4阶Runge-Kutta 法求解初值问题⎩⎨⎧=≤≤++-=1)0()10(2222'y t t t y y 要求:1) 画出准确解(准确解22t e y t +=-)的曲线,近似解折线;2) 把节点0.1和0.5上的精确解与近似解比较,观察误差变化情况.2. 用 Euler 法,隐式Euler 法和经典4阶R-K 法取不同步长解初值问题⎪⎩⎪⎨⎧=∈-=21)0(],1,0[,50'y x y y 并画出曲线观察稳定性.注:题1必须写实验报告五、算法描述及实验步骤4阶R-K 算法:功能输入 f(x),a,b,x0(x0=a),y0.输出 4阶R-K 解y.步1 m<=(b-a)/h,xn=a+n*h(n=1.2…m)步2 对n=0.1…m-1执行K1<=f(xn,yn)K2<=f(xn+0.5,y n+0.5*h*K1),K3<=f(xn+0.5,y n+0.5*h*K2).K4<f(x n+1,y n+h*K3).yn+1<=yn+(h/6)*(K1+2*K2+2*K3+K4);步3 输出y=(y1,y2,…,ym)’;结束Euler法算法功能解初值问题y’=f(x,y),y(x0)=y0;输入 f(x,y),a,b,h,x0(x0=a),y0;输出 Euler解y;步1 m<=(b-a)/h ,xn=a+n*h(n=1.2…m);步2 对n=0.1…m-1执行Yn+1<=yn+h*f(xn,yn);步3 输出y=(y1,y2,…,ym)’结束实验步骤:1.按要求在安装Windows2000或Windows XP操作系统,Matlab软件环境下编写源程序。
数值分析2024上机实验报告
数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值分析第一次上机练习实验报告
数值分析第一次上机练习实验报告一、实验目的本次实验旨在通过上机练习,加深对数值分析方法的理解,并掌握实际应用中的数值计算方法。
二、实验内容1. 数值计算的基本概念和方法在本次实验中,我们首先回顾了数值计算的基本概念和方法。
数值计算是一种通过计算机进行数值近似的方法,其包括近似解的计算、误差分析和稳定性分析等内容。
2. 方程求解的数值方法接下来,我们学习了方程求解的数值方法。
方程求解是数值分析中非常重要的一部分,其目的是找到方程的实数或复数解。
我们学习了二分法、牛顿法和割线法等常用的数值求解方法,并对它们的原理和步骤进行了理论学习。
3. 插值和拟合插值和拟合是数值分析中常用的数值逼近方法。
在本次实验中,我们学习了插值和拟合的基本原理,并介绍了常见的插值方法,如拉格朗日插值和牛顿插值。
我们还学习了最小二乘拟合方法,如线性拟合和多项式拟合方法。
4. 数值积分和数值微分数值积分和数值微分是数值分析中的两个重要内容。
在本次实验中,我们学习了数值积分和数值微分的基本原理,并介绍了常用的数值积分方法,如梯形法和辛卜生公式。
我们还学习了数值微分的数值方法,如差商法和牛顿插值法。
5. 常微分方程的数值解法常微分方程是物理和工程问题中常见的数学模型,在本次实验中,我们学习了常微分方程的数值解法,包括欧拉法和四阶龙格-库塔法。
我们学习了这些方法的步骤和原理,并通过具体的实例进行了演示。
三、实验结果及分析通过本次实验,我们深入理解了数值分析的基本原理和方法。
我们通过实际操作,掌握了方程求解、插值和拟合、数值积分和数值微分以及常微分方程的数值解法等数值计算方法。
实验结果表明,在使用数值计算方法时,我们要注意误差的控制和结果的稳定性。
根据实验结果,我们可以对计算结果进行误差分析,并选择适当的数值方法和参数来提高计算的精度和稳定性。
此外,在实际应用中,我们还需要根据具体问题的特点和条件选择合适的数值方法和算法。
四、实验总结通过本次实验,我们对数值分析的基本原理和方法有了更加深入的了解。
数值分析上机实验报告
数值分析上机实验报告摘要:本报告是对数值分析课程上机实验的总结和分析,涵盖了多种算法和数据处理方法,通过对实验结果的分析,探究了数值计算的一般过程和计算的稳定性。
1. 引言数值计算是数学的一个重要分支,广泛应用于物理、金融、工程等领域。
本次实验是对数值分析课程知识的实际应用,通过上机实现算法,探究数值计算的可靠性和误差分析。
2. 实验方法本次实验中,我们实现了多种算法,包括:(1)牛顿迭代法求方程的根;(2)高斯消元法求线性方程组的解;(3)最小二乘法拟合数据点;(4)拉格朗日插值法估计函数值;(5)梯形公式和辛普森公式求积分近似值。
对于每个算法,我们都进行了多组数值和不同参数的实验,并记录了相关数据和误差。
在实验过程中,我们着重考虑了算法的可靠性和计算的稳定性。
3. 实验结果与分析在实验中,我们得到了大量的实验数据和误差分析,通过对数据的展示和分析,我们得到了以下结论:(1)牛顿迭代法求解非线性方程的根能够对算法的初始值和迭代次数进行适当的调整,从而达到更高的稳定性和可靠性。
(2)高斯消元法求解线性方程组的解需要注意到矩阵的奇异性和精度的影响,从而保证计算的准确性。
(3)最小二乘法拟合数据点需要考虑到拟合的函数形式和数据的误差范围,采取适当的数据预处理和拟合函数的选择能够提高计算的准确性。
(4)拉格朗日插值法估计函数值需要考虑到插值点的选择和插值函数的阶数,防止出现龙格现象和插值误差过大的情况。
(5)梯形公式和辛普森公式求积分近似值需要考虑到采样密度和拟合函数的选择,从而保证计算的稳定性和收敛速度。
4. 结论通过本次实验的分析和总结,我们得到了深入的认识和理解数值计算的一般过程和算法的稳定性和可靠性,对于以后的数值计算应用也提供了一定的指导和参考。
数值分析上机实验报告
数值分析上机实验理学院11级统计01班41108030125鲁庆实验报告一一.实验名称误差与误差估计二.实验目的掌握数值运算的误差估计方法三.数学原理 1.绝对误差(*)e x设某一量的准确值为x ,近似值为x*,则x*与x 之差叫做近似值x*的绝对误差(简称误差),记为*(*)*e e x x x ==- 2.绝对误差限适当小的正数,使|(*)||*|*e x x x ε=-≤则称*ε为近似值 x * 的绝对误差限。
(有时用*x x ε*=±表示近似值x *的精度或准确值的所在范围。
3.相对误差(*)r e x绝对误差与准确值之比*(*)*(*),0r r e x x xe e x x x x-===≠称为x *的相对 误差。
4.相对误差限(*)r x ε若指定一个适当小的正数 (*)r x ε,使|(*)||(*)|(*)||r r e x e x x x ε=≤则称(*)r x ε为近似值 x *的相对误差限。
5.有效数字若近似值x*的绝对误差限是某一位的半个单位,该位到x*的第一位非零数字一共有n 位,则称近似值x*有n 位有效数字,或说x*精确到该位。
6.绝对误差的运算:)()()(2121x x x x εεε+=± )()()(122121x x x x x x εεε+≈22122121+=x x x x x x x )()()(εεε (f(x))()(x)f x εε'≈四.实验内容1. 计算I n=e 1-⎰10nxe x 2dx (n=0,1,...)并估计误差。
解: >> I0 = exp(-1)*quad('(x.^0).*exp(x.^2)',0,1,10^(-10));>> vpa(I0,10) ans =.5380795069>> I1= exp(-1)*quad('(x.^1).*exp(x.^2)',0,1,10^(-10)); >> vpa(I1,10) ans =.3160602794>> I2 = exp(-1)*quad('(x.^2).*exp(x.^2)',0,1,10^(-10)); >> vpa(I2,10) ans =.2309602465>> I3 = exp(-1)*quad('(x.^3).*exp(x.^2)',0,1,10^(-10)); >> vpa(I3,10) ans =.1839397206>> I4 = exp(-1)*quad('(x.^4).*exp(x.^2)',0,1,10^(-10)); >> vpa(I4,10) ans =.1535596302>> I5 = exp(-1)*quad('(x.^5).*exp(x.^2)',0,1,10^(-10)); >> vpa(I5,10) ans =.1321205588>> I6 = exp(-1)*quad('(x.^6).*exp(x.^2)',0,1,10^(-10)); >> vpa(I6,10) ans =.1161009245>> I7 = exp(-1)*quad('(x.^7).*exp(x.^2)',0,1,10^(-10)); >> vpa(I7,10) ans =.1036383235>> I8 = exp(-1)*quad('(x.^8).*exp(x.^2)',0,1,10^(-10)); >> vpa(I8,10) ans =.9364676413e-1>> I9 = exp(-1)*quad('(x.^9).*exp(x.^2)',0,1,10^(-10)); >> vpa(I9,10) ans =.8544670595e-1 2.计算x255的值。
数值分析上机实践报告
数值分析上机实践报告一、实验目的本次实验主要目的是通过上机操作,加深对数值分析算法的理解,并熟悉使用Matlab进行数值计算的基本方法。
在具体实验中,我们将实现三种常见的数值分析算法:二分法、牛顿法和追赶法,分别应用于解决非线性方程、方程组和线性方程组的求解问题。
二、实验原理与方法1.二分法二分法是一种常见的求解非线性方程的数值方法。
根据函数在给定区间端点处的函数值的符号,不断缩小区间的长度,直到满足精度要求。
2.牛顿法牛顿法是求解方程的一种迭代方法,通过构造方程的泰勒展开式进行近似求解。
根据泰勒展式可以得到迭代公式,利用迭代公式不断逼近方程的解。
3.追赶法追赶法是用于求解三对角线性方程组的一种直接求解方法。
通过构造追赶矩阵,采用较为简便的向前追赶和向后追赶的方法进行计算。
本次实验中,我们选择了一组非线性方程、方程组和线性方程组进行求解。
具体的实验步骤如下:1.调用二分法函数,通过输入给定区间的上下界、截止误差和最大迭代次数,得到非线性方程的数值解。
2.调用牛顿法函数,通过输入初始迭代点、截止误差和最大迭代次数,得到方程组的数值解。
3.调用追赶法函数,通过输入追赶矩阵的三个向量与结果向量,得到线性方程组的数值解。
三、实验结果与分析在进行实验过程中,我们分别给定了不同的参数,通过调用相应的函数得到了实验结果。
下面是实验结果的汇总及分析。
1.非线性方程的数值解我们通过使用二分法对非线性方程进行求解,给定了区间的上下界、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程的数值解。
通过与解析解进行比较,可以发现二分法得到的数值解与解析解的误差在可接受范围内,说明二分法是有效的。
2.方程组的数值解我们通过使用牛顿法对方程组进行求解,给定了初始迭代点、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程组的数值解。
与解析解进行比较,同样可以发现牛顿法得到的数值解与解析解的误差在可接受范围内,说明牛顿法是有效的。
数值分析上机实验报告
数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。
实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。
在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。
一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。
我们将选择几个常见的函数进行迭代求根的实验。
(1)二分法二分法是一种简单而有效的迭代求根法。
通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。
(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。
通过不断迭代更新逼近值,可以较快地求得零点。
实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。
但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。
二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。
本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。
(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。
该多项式经过离散数据点,并且是唯一的。
该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。
(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。
与拉格朗日插值相比,牛顿插值的计算过程更加高效。
但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。
实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。
插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。
三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。
本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。
(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。
数值分析上机实习报告
数值分析上机实习报告随着现代科学技术的迅猛发展,计算机科学的应用日益广泛,数值分析作为计算机科学中重要的分支之一,其在工程、物理、生物学等领域的应用也越来越受到重视。
本学期,我们在数值分析课程的学习中,进行了多次上机实习,通过实习,我们对数值分析的基本方法和算法有了更深入的理解和掌握。
在实习过程中,我们使用了MATLAB软件作为主要的工具,MATLAB是一种功能强大的数学软件,它提供了丰富的数值计算函数和图形显示功能,使我们能够更加方便地进行数值计算和分析。
第一次实习是线性插值和函数逼近。
我们学习了利用已知数据点构造插值函数的方法,并通过MATLAB软件实现了线性插值和拉格朗日插值。
通过实习,我们了解了插值的基本原理,掌握了插值的计算方法,并能够利用MATLAB软件进行插值计算。
第二次实习是解线性方程组。
我们学习了高斯消元法、列主元高斯消元法和克莱姆法则等解线性方程组的方法,并通过MATLAB软件实现了这些算法。
在实习过程中,我们通过实际例子了解了这些算法的应用,掌握了它们的计算步骤,并能够利用MATLAB软件准确地求解线性方程组。
第三次实习是求解非线性方程和方程组。
我们学习了二分法、牛顿法、弦截法和迭代法等求解非线性方程的方法,以及雅可比法和高斯-赛德尔法等求解非线性方程组的方法。
通过实习,我们了解了非线性方程和方程组的求解方法,掌握了它们的计算步骤,并能够利用MATLAB软件求解实际问题。
通过这次上机实习,我们不仅深入学习了数值分析的基本方法和算法,而且锻炼了利用MATLAB软件进行数值计算和分析的能力。
同时,我们也认识到了数值分析在实际问题中的应用价值,增强了解决实际问题的能力。
总之,这次上机实习使我们受益匪浅,对我们学习数值分析课程起到了很好的辅助作用。
数值分析上机实验报告
数值分析上机实验报告实验报告插值法与数值积分实验(数值计算方法,3学时)一实验目的1.掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。
2.掌握复化的梯形公式、辛扑生公式、牛顿-柯特斯公式计算积分。
3. 会用龙贝格公式和高斯公式计算积分。
二实验内容用拉格朗日插值公式计算01.54.1==y x 以及所对应的近似值。
用牛顿插值公式求)102(y 的近似值。
三实验步骤(算法)与结果1拉格朗日插值法:(C 语言版)#include "Stdio.h" #include "Conio.h"int main(void) {float X[20],Y[20],x; int n;void input(float *,float *,float *,int *); float F(float *,float *,float,int); input(X,Y,&x,&n);printf("F(%f)=%f",x,F(X,Y,x,n));getch(); return 0; }void input(float *X,float *Y,float *x,int *n) {int i;printf("Please input the number of the data:");scanf("%d",n);printf("\nPlease input the locate of each num:\n");for(i=0;i<*n;i++){scanf("%f,%f",X+i,Y+i);}printf("\nPlease input the chazhi:"); scanf("%f",x);}float F(float *X,float *Y,float x,int n){int i,j;float Lx,Fx=0;for(i=0;i<n;i++)< p="">{Lx=1;for(j=0;j<n;j++)< p="">{if(j!=i) Lx=Lx*((x-*(X+j))/(*(X+i)-*(X+j))); } Fx=Fx+Lx*(*(Y+i));}return Fx;}得出结果如图:所以Y(1.4)=3.7295252#include#define N 10double X[N], Y[N], A[N][N];int n;double Newton(double x);double f(double x);void main() {printf("请输入已知x与对应y=f(x)的个数: n = "); scanf("%d", &n);getchar();if(n>N||n<=0) {printf("由于该维数过于犀利, 导致程序退出!"); return;}printf("\n请输入X[%d]: ", n);for (int i=0; i<="" p="">scanf("%lf", &X[i]);getchar();printf("\n请输入Y[%d]: ", n);for (i=0; i<="" p="">scanf("%lf", &Y[i]);getchar();double x;printf("\n请输入所求结点坐标x = ");scanf("%lf", &x);getchar();printf("\nf(%.4lf)≈%lf\n\n", x, Newton(x));}double Newton(double x) {int i, j;// 求均差for (i =0; i<="" p="">A[i][0] = Y[i];for (i=1; i<="" p="">for (j =1; j<=i; j++)A[i][j] = (A[i][j-1] - A[i-1][j-1]) / (X[i] - X[i-j]); // 求结点double result = A[0][0];for (i=1; i<="">double tmp = 1.0;for (int j=0; j<="" p="">tmp *= (x - X[j]);result += tmp * A[i][i];}return result;}四实验收获与教师评语</n;j++)<></n;i++)<>。
《数值分析》上机实验报告
数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。
当前后两个的差<=ε时,就认为求出了近似的根。
本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C语言程序原代码:#include<stdio.h>#include<math.h>main(){double x2,f,f1;double x1=1.9; //取初值为1.9do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14;f1=7*pow(x2,6)-4*28*pow(x2,3);x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB上机程序function y=Newton(f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析实验
数值分析实验3(总5页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 信本班 实验日期: 2013 年 9 月 3日学 号: 姓名: 孙泽香 指导教师: 实验成绩:一、实验名称实验一:递推法的稳定性,秦九韶算法二、实验目的及要求1. 熟悉数值稳定的概念, 通过上机计算,了解舍入误差所引起的数值不稳定性.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、(或。
四、实验内容1.教材例中,取16位数字计算,并分析、比较计算结果.2.设100999832()101100994321f x x x x x x x =+++++++,用秦九韶算法编程计算()f x 在1,2,3,4x =上的值.五、算法描述及实验步骤1. 设(1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,,14)n n I I n n -=-+=, 计算从1I 到14I 的近似值;(2)从15I 较粗糙的估计值出发,用递推公式:111(15,14,,3,2)55n n I I n n -=-+=计算从1I 到14I 的近似 .2. 秦九韶算法给定n 次多项式Pn (x )=a(n)x^n+a(n-1)x^(n-1)+…+a(1)x+a(0).要计算Pn(x)在x 处的值。
今考虑n 次多项式Pn (x ),用V(k)表示第k 层的值(从里面数起),依次计算 V (1)=a(n)x+a(n-1) V(2)=V(1)x+a(n-2) … V(n)=V(n-1)x+a(0). 显然V (n )=Pn (x ).记a(n)=V(0),上述计算过程可写成:V(0)=a(n)V(k)=V(k-1)*x+a(n-k),(k=1,2,…,n).六、调试过程及实验结果算法一:>> format long e>> syms x;>> fun=inline('1./(x+5)');>> I(1)=quad(fun,0,1);>> for n=1:14I(n+1)=1/n-5*I(n);end>> II =Columns 1 through 3Columns 4 through 6Columns 7 through 9Columns 10 through 12Columns 13 through 15算法二:>> format long e>> syms x;>> fun=inline('x.^14./(x+5)');>> I(15)=quad(fun,0,1);>> for n=14:-1:1I(n)=1/(5*n)-I(n+1)/5;end>> II =Columns 1 through 3Columns 4 through 6Columns 7 through 9Columns 10 through 12Columns 13 through 15设f(x)=101x^100+100x^99+…+3x^2+2x+1,用秦九韶算法编程计算f(x)在x=1,2,3,4上的值。
数值分析上机实验报告
一、实验目的通过本次上机实验,掌握数值分析中常用的算法,如二分法、牛顿法、不动点迭代法、弦截法等,并能够运用这些算法解决实际问题。
同时,提高编程能力,加深对数值分析理论知识的理解。
二、实验环境1. 操作系统:Windows 102. 编程语言:MATLAB3. 实验工具:MATLAB数值分析工具箱三、实验内容1. 二分法求方程根二分法是一种常用的求方程根的方法,适用于连续函数。
其基本思想是:从区间[a, b]中选取中点c,判断f(c)的符号,若f(c)与f(a)同号,则新的区间为[a, c],否则为[c, b]。
重复此过程,直至满足精度要求。
2. 牛顿法求方程根牛顿法是一种迭代法,适用于可导函数。
其基本思想是:利用函数在某点的导数值,求出函数在该点的切线方程,切线与x轴的交点即为方程的近似根。
3. 不动点迭代法求方程根不动点迭代法是一种迭代法,适用于具有不动点的函数。
其基本思想是:从初始值x0开始,不断迭代函数g(x)的值,直至满足精度要求。
4. 弦截法求方程根弦截法是一种线性近似方法,适用于可导函数。
其基本思想是:利用两点间的直线近似代替曲线,求出直线与x轴的交点作为方程的近似根。
四、实验步骤1. 二分法求方程根(1)编写二分法函数:function [root, error] = bisection(a, b, tol)(2)输入初始区间[a, b]和精度要求tol(3)调用函数计算根:[root, error] = bisection(a, b, tol)2. 牛顿法求方程根(1)编写牛顿法函数:function [root, error] = newton(f, df, x0, tol)(2)输入函数f、导数df、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = newton(f, df, x0, tol)3. 不动点迭代法求方程根(1)编写不动点迭代法函数:function [root, error] = fixed_point(g, x0, tol)(2)输入函数g、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = fixed_point(g, x0, tol)4. 弦截法求方程根(1)编写弦截法函数:function [root, error] = secant(f, x0, x1, tol)(2)输入函数f、初始值x0和x1,以及精度要求tol(3)调用函数计算根:[root, error] = secant(f, x0, x1, tol)五、实验结果与分析1. 二分法求方程根以方程f(x) = x^2 - 2 = 0为例,输入初始区间[a, b]为[1, 3],精度要求tol 为1e-6。
贵大研究生数值分析上机
20 年月日实验标准题已知如下数据:且端点约束条件为f’(-1)=5,f’(3.50)=29.16,用三次样条插值的三弯矩法求f (-0.02)和f (2.56)。
一、理论依据:三次样条函数点a=X 0<X 1<X 2<...<X n-1<X n =b 将区间[a,b]分成n 个小区间,若函数S(x)满足:(1)在每个子区间[x i ,x i+1](i=0,1,2,3,n-1)上S(x)是三次多项式 (2) S(x)∈C 2[a,b]则称S(x)是区间[a,b]上的三次样条函数。
求f(x)在[a,b]上的三次样条函数,可设S(x)=a i x 3+b i x 2+c i x+d i ,x ∈[x i ,X i+1](i=0,1,2,...n-1)其中,a i ,b i ,C i ,d;为待定常数。
二、操作原理:依据给定的x 、f (x )数据点计算下面各项的值:()()[]()11111i 111i ,,6,,6)1,,2,1(1+--+++++=-+=-⋅⋅⋅=+=-=+=i i i i i i i ii ii i i i ii ix x x f x x f x x f h h d n i h h h h h h μλμ()()⎥⎦⎤⎢⎣⎡-'=⎥⎦⎤⎢⎣⎡'-=-n n n nx x f f h d f x x f h d ,6,61n 01010⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡----n n n d d d M M M M 1n 101n 1011n 11d 212212λμλμ三弯矩方程组可以统一写成AM=d 的形式,系数矩阵A 为三对角矩阵,可以使用追赶法求解M 。
将所求的M 带入下面的式子计算出三次样条插值函数:121111121131131i )6()6(6)(6)()(+++++++++++--+--+-+-=i i i i j i i i i i i i i i i h x x h M f h x x h M f h x x M h x x M x S 三、实验代码: 主函数:b=[-1. -0.54 0.13 1.12 1.89 2.06 2.54 2.82 3.5;-2.46 -5.26 -1.87 0.05 1.65 2.69 4.56 7.89 10.31]; fa=5;fb=29.16; c=[-0.02;2.54]; [sx] = scyt(b,fa,fb,c) 调用函数:LU 求解三对角方程: function [z]=lux(a,b)% lux 追赶法求解三对角函数% a 系数矩阵 b 列向量,z 为求解结果 [l,u]=lu(a); [n,~]=size(b); z=zeros(n,1);z(1)=b(1); for i=2:nz(i)=b(i)-l(i,i -1)*z(i -1); endz(n)=z(n)/u(n,n);for j=(n -1):-1:1 %计算x 值 z(j)=(z(j)-u(j,j+1)*z(j+1))/u(j,j); end end三次样条函数插值函数: function [sx] = scyt(b,fa,fb,c)% scyt三次样条函数插值% b已知数据2*1 fa为下端约束条件fb为上端约束条件c为需要计算的列% sx为计算出的某点插值函数值b=b';[f,y]=size(b);for i=2:f-1b(i,y+1)=b(i,1)-b(i-1,1); %h1b(i+1,y+1)=b(i+1,1)-b(i,1); %h2b(i,y+2)=b(i,y+1)/(b(i,y+1)+b(i+1,y+1)); %计算出μb(i,y+3)=6*((b(i+1,2)-b(i,2))/b(i+1,y+1)-(b(i,2)-b(i-1,2))/b(i,y+1))/(b(i,y+1)+b(i+1,y+1)); %计算出dend[f,y]=size(b);b(1,y)=6/b(2,3)*((b(2,2)-b(1,2))/b(2,3)-fa); %补齐d0,dnb(f,y)=6/b(f,3)*(fb-(b(f,2)-b(f-1,2))/b(f,3));a=2*eye(f);a(1,2)=1;a(f,f-1)=1;s=1; %系数矩阵建立afor j=2:f-1a(j,s)=b(j,4);a(j,s+2)=1-b(j,4);s=s+1;endd=b(:,y); %非齐次项常数项dm=lux(a,d); %求解待定常数m弯矩值[t,~]=size(c);st=0;for g=1:t %判断计算数字所用方程式并计算for h=1:fif c(g,1)>b(h,1)st=st+1;endendif st==fst=st-1;endif st==0st=1;endk=st+1;x=c(g,1);st=0;x1=b(k-1,1);x2=b(k,1);h=b(k,3);m1=m(k-1,1);m2=m(k,1);f1=b(k-1,2);f2=b(k,2);sx(g,1)=(m1*(x2-x)^3+m2*(x-x1)^3)/(6*h)+(f1-m1*h^2/6)*(x2-x)/h+(f2-m2*h^2/6)*( x-x1)/h;endend四、求解结果:sx =[-3.1058;4.7834]所以求f(-0.02)=-3.1058、f(2.56)=4.7834用Romberg 算法求以下积分,允许误差eps=0.00001,()dx x x x x 24.131sin 753+⎰。
数值分析上机实验报告
数值分析上机实验报告数值分析上机实验报告一、引言数值分析是一门研究利用计算机进行数值计算的学科。
通过数值分析,我们可以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积分等。
本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。
二、实验目的本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析理论的理解,并通过实际应用提高编程能力。
三、实验内容1. 数值求解方程首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。
通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。
2. 数值插值和逼近接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。
通过编写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插值曲线和逼近曲线。
3. 数值积分然后,我们使用梯形法和辛普森法进行定积分的数值计算。
通过编写程序,输入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。
四、实验步骤1. 数值求解方程(1)使用二分法求解非线性方程的根。
根据二分法的原理,编写程序实现二分法求解方程的根。
(2)使用牛顿迭代法求解非线性方程的根。
根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。
2. 数值插值和逼近(1)使用拉格朗日插值法进行数据的插值。
根据拉格朗日插值法的原理,编写程序实现数据的插值。
(2)使用最小二乘法进行数据的逼近。
根据最小二乘法的原理,编写程序实现数据的逼近。
3. 数值积分(1)使用梯形法进行定积分的数值计算。
根据梯形法的原理,编写程序实现定积分的数值计算。
(2)使用辛普森法进行定积分的数值计算。
根据辛普森法的原理,编写程序实现定积分的数值计算。
五、实验结果与分析1. 数值求解方程通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。
结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。
数值分析上机报告
数力系级《数值分析》实验报告姓名学号:专业:学院:成绩:2010年 6 月25 日目录数力系级 (1)1.第二章上机练习 (4)实验一 (4)迭代公式(简单原理) (4)程序及实验结果 (6)结果分析 (11)实验二 (11)迭代公式(简单原理) (11)程序及实验结果 (12)结果分析 (14)实验三 (14)迭代公式(简单原理) (14)程序及实验结果 (14)结果分析 (15)2.第三章上机练习 (15)实验一 (15)迭代公式(简单原理) (16)程序及实验结果 (16)结果分析 (18)实验二 (18)迭代公式(简单原理) (18)程序及实验结果 (19)结果分析 (23)3.第四章上机练习 (23)实验一 (23)迭代公式(简单原理) (23)程序及实验结果 (24)结果分析 (26)实验二 (27)迭代公式(简单原理) (27)程序及实验结果 (28)结果分析 (29)实验三 (29)迭代公式(简单原理) (30)程序及实验结果 (30)结果分析 (31)4.第五章上机练习 (31)实验一 (31)迭代公式(简单原理) (31)程序及实验结果 (32)结果分析 (34)实验二 (34)迭代公式(简单原理) (35)程序及实验结果 (36)结果分析 (38)实验三(选作) (39)迭代公式(简单原理) (39)程序及实验结果 (40)结果分析 (41)5.第七章上机练习 (42)实验一 (42)迭代公式(简单原理) (42)程序及实验结果 (44)结果分析 (49)1.第二章上机练习实验一1、分别用不动点迭代与Newton 法求解方程x-x 10+2=0的正根与负根。
2、use the following method to find a solution in [,1] accurate to within 410- for0120200550600234=--+-x x x xa. Bisection method ;b. Newton method ; method ; d. method of False Position ; üller’s method 迭代公式(简单原理)MethodThe method calls for a repeated halving of subintervals of [a, b] and, at each step, locating the half containing the root of equation.Suppose f(x) is a continuous function defined on the interval [a, b], with f(a) and f(b) of opposite sign. set al = a and b1 = b, and let p1 be the midpoint of [a, b]; That is p1 =(a+b)/2, If f(p1) = 0, then set p = p1, p1是f(x)=0的实根p. If f(a1)f(p1)<0, then p ∈ (a1, p1), set a2=a1,b2=p1; otherwise p ∈ (p1,b1), set a2=p1,b2=b1. We then repeat the process to the interval [a2, b2]. The length of interval [ a k , b k ] is bk-ak=12--k a b IterationThe basic idea:Step1. Constructing the fixed-point equation: x=g (x ) ,let f (x )=0⇔ x=g (x ); g (x ) is called Iteration functionStep2. Setting up iteration scheme :p k+1= g (p k) (1)We choose an initial approximation p0 and generate the sequence ∞=o k k p }{ by (1), for each k ≥ 1.3. Newton methodSuppose that f ∈ 2C [a, b] ,let pk ∈ [a, b] be an approximation to root of the equation f(x)= the firstTaylor polynomial for f(x) about pk to approximate f(x):))((')()(k k k p x p f p f x f -+≈ We have 0)(=x f ⇔ ))((')(k k k p x p f p f -+0≈, Let f ’(pk ) ≠0 , Solving for pk+1 gives)(')(1k k k k p f p f p p -=+, which starts with an initial approximation P0 and generates the sequence ∞=o k k p }{ 4. Secant method如所求问题不便求导,用过点xk 的割线的斜率来代替切线的f ’( xk ), 即11)()('----=k k k k k x x x x f x f , Substituting it into Newton Method, we have )()()()(111--+---=k k k k k k k x x x f x f x f x x , This technique is called the Secant method .5. method of False Position (1) 提供两个初始值:p0, p1,满足f(p0) ·f(p1)<0 ;(2)利用割线法求出p2,; (3) 检查f(p2) ·f(p1),若f(p2) ·f(p1)<0 ,过点(p1,f(p1)) (p2,f(p2))做割线,求出p3; 否则若f(p2) ·f(p1) >0,过点(p0,f(p0))与(p2,f(p2))做割线,求出p3; 依此类推下去…试位法保证方程f(x)=0的根p ,总在相邻的迭代之中,即p ∈(pk,pk+1).6. M üller’s method程序及实验结果Newton methodfunction res=fnewton(func,dfunc,x,tol) x0=x;d=feval(func,x0)/feval(dfunc,x0);i=0;while abs(d)>toli=i+1;x1=x0-d;x0=x1;d=feval(func,x0)/feval(dfunc,x0); endres=[x0,i];function fx1=func(x)fx1=x-10^x+2;function fx2=dfunc(x)fx2=1-10^x*(log(10));实验结果Iterationfunction res=fixedpoint(func1,x,tol)x0=x;d=feval(func1,x0);x1=d;i=0;while abs(x1-x0)>tolx0=x1;i=i+1;d=feval(func1,x1); x1=d;endres=[x1,i];function fx1=func1(x) fx1=log10(x+2);实验结果将func1做更改function fx=func2(x) fx=10^(x)-2;实验结果:Bisection methodfunction res=bisection(func,xa,xb,tol)n=0;xc=0;fa=0;fc=0;while (xb-xa)>toln=n+1;fa=feval(func,xa);xc=(xa+xb)/2;fc=feval(func,xc);if fc*fa<0xb=xc;else xa=xc;endendres=[ n xa xb xc fc ];function fx1=func(x)fx1=600*(x^4)-550*(x^3)+200*(x^2)-20*x-1;实验结果. Newton methodfunction res=fnewton(func,dfunc,x,tol)x0=x;d=feval(func,x0)/feval(dfunc,x0);i=0;while abs(d)>toli=i+1;x1=x0-d;x0=x1;d=feval(func,x0)/feval(dfunc,x0);endres=[x0,i];function fx1=func(x)fx1=600*(x^4)-550*(x^3)+200*(x^2)-20*x-1;function fx2=dfunc(x)fx2=1-10^x*(log(10));实验结果methodfunction res=secant(func,x,y,tol)x0=x;x1=y;d=[feval(func,x1)]*(x1-x0)/(feval(func,x1)-feval(func,x0)); i=0;while abs(d)>toli=i+1;d=feval(func,x1)*(x1-x0)/(feval(func,x1)-feval(func,x0));x0=x1;x1=x1-d;endres=[x0,i];function fx1=func(x)fx1=600*(x^4)-550*(x^3)+200*(x^2)-20*x-1;实验结果method of False Positionfunction res=falseposition(func,x,y,tol)x0=x;x1=y;d=[feval(func,x1)]*(x1-x0)/(feval(func,x1)-feval(func,x0)); i=0;f=0;x2=0;while abs(d)>toli=i+1;f=feval(func,x1);d=feval(func,x1)*(x1-x0)/(feval(func,x1)-feval(func,x0)); x2=x1-d;if x2*f<0x0=x1;x1=x2;else x1=x2;endendres=[x0,i];function fx1=func(x)fx1=600*(x^4)-550*(x^3)+200*(x^2)-20*x-1;实验结果üller’s methodfunction res=muller(func, x, y, z, tol)%To find the approximation root of a polynomial s %by muller methodx0=x;x1=y;x2=z;h1=x1-x0;h2=x2-x1;m1=(feval(func,x1)-feval(func,x0))/h1;m2=(feval(func,x2)-feval(func,x1))/h2;d=(m2-m1)/(h2+h1);i=0;h=100;b=0;e=0;p=0;q=0;while abs(h)>toli=i+1;b=m2+h2*d;p=(b^2-4*d*feval(func,x2))^;if abs(b-p)<abs(b+p)e=b+p;else e=b-p;endh=(-2)*feval(func,x2)/e;q=x2+h;x0=x1;x1=x2;x2=q;h1=x1-x0;h2=x2-x1;m1=(feval(func,x1)-feval(func,x0))/h1;m2=(feval(func,x2)-feval(func,x1))/h2;d=(m2-m1)/(h2+h1);endres=[q,i];function fx1=func(x)fx1=600*(x^4)-550*(x^3)+200*(x^2)-20*x-1;实验结果结果分析1.经过实验结果比较我们可以看到,Newton 法只需选取不同的初值,便可求出他全部的解,即Newton 法对于他全部的解都是收敛的。
数值分析上机实验报告(插值)
数值分析第一次上机练习实验报告——Lagrange 插值与三次样条插值一、 问题的描述设()2119f x x =+, []1,1x ∈-,取15iix =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,()S x .二、 方法描述——Lagrange 插值与三次样条插值我们取15i ix =-+,0,1,2,...,10i =,通过在i x 点的函数值()2119i i f x x =+来对原函数进行插值,我们记插值函数为()g x ,要求它满足如下条件:()()21,0,1,2,...,1019i i ig x f x i x ===+ (1) 我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数()2119f x x=+进行插值,看两种方法的插值结果,并进行结果的比较。
10次的Lagrange 插值多项式为:()()10100i i i L x y l x ==∑ (2)其中:()21,0,1,2,...,1019i i i y f x i x ===+以及()()()()()()()()()011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----==----我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。
理论上我们根据区间[]1,1-上给出的节点做出的插值多项式()n L x 近似于()f x ,而多项式()n L x 的次数n 越高逼近()f x 的精度就越好。
但实际上并非如此,而是对任意的插值节点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析上机实验报告课程名称:数值分析上机实验学院:机械工程学院专业:机械制造姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师2012年12月30日一.已知A 与b12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823-3.125432 -1.012345 2.1897361.563849-0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.1135842.189736 2.031454 4.10101119.8979180.431637-3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.10345814.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -25.173417 0.84671695 1.784317 -86.612343 1.1101230 4.719345 -5.6784392]TB ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。
(3)用列主元素消去法求解Bx=b 。
解:(3)、用列主元素消去法求解Bx=b(一)、理论依据:其基本思想是选取绝对值尽量大的元素作为主元素,进行行与列的交换,再进行回代,求出方程的解。
将方阵A 和向量b 写成C=(A b )。
将C 的第1列中第1行的元素与其下面的此列的元素逐一进行比较,找到最大的元素1j c ,将第j 行的元素与第1行的元素进行交换,然后通过行变换,将第1列中第2到第n 个元素都消成0。
将变换后的矩阵(1)C 的第二列中第二行的元素与其下面的此列的元素逐一进行比较,找到最大的元素(1)2k c ,将第k 行的元素与第2行的元素进行交换,然后通过行变换,将第2列中第3到第n 个元素都消成0。
以此方法将矩阵的左下部分全都消成0。
(二)、计算程序: #include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={{12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743},{2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124},{-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.010103}, {1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585}, {-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784317}, {0.718719,1.563849,1.836742,-3.741856,0.431637,9.789365,-0.103458,-1.103456,0.238417}, {1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.713846,3.123789,-2.213474}, {3.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782},{-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001}};int sign(double x);double k,t,s,w,e,c,z;int i,j,n,r;doubleb[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392};for(r=0;r<=6;r++) /*Household 变换*/{e=0.0;for(i=r+1;i<=8;i++)e=e+a[i][r]*a[i][r];s=sqrt(e);t=s*s+fabs(a[r+1][r])*s;for(i=0;i<=r;i++) u[i]=0;c=a[r+1][r]; /*求u[i]的值*/u[r+1]=a[r+1][r]+s*sign(c);for(i=r+2;i<=8;i++)u[i]=a[i][r];for(i=0;i<=8;i++){y[i]=0;for(j=0;j<=8;j++)y[i]+=a[i][j]*u[j]/t;} /*求出y向量*/ k=0;for(i=0;i<9;++i)k+=0.5*(u[i]*y[i])/t;for(i=0;i<=8;i++)q[i]=y[i]-k*u[i];for(i=0;i<=8;i++)for(j=0;j<=8;j++)a[i][j]=a[i][j]-(q[j]*u[i]+u[j]*q[i]);} /*求结果*/printf("Household变换:\n");for(i=0;i<9;++i)for(j=0;j<9;++j) /*打印转化后的矩阵*/ {if (j%9==0)printf("\n");printf("%-9.5f",a[i][j]);}printf("\n");printf("超松弛变量法得解:\n");w=1.4; /*超松弛法*/for(i=0;i<9;i++)x1[i]=0;for(i=0;i<9;i++)for(j=0;j<9;j++){if(i==j)b1[i][j]=0;else b1[i][j]=-a[i][j]/a[i][i];} /*求出矩阵b1[9][9]和b1[i][9]的值*/ for(i=0;i<9;i++)b1[i][9]=b[i]/a[i][i];for(n=0;n<9;n++)for(i=0;i<9;i++){z=0;for(j=0;j<9;j++)z=z+b1[i][j]*x1[j]; /*执行本算法*/z=z+b1[i][9];x1[i]=x1[i]*(1-w)+w*z;}for(i=0;i<9;i++){if (i==5)printf("\n");printf("x%d=%-10.6f",i,x1[i]);}printf("\n");printf("列主元消去法得解:\n");u[0]=a[0][0]; /*以下是消去法*/y[0]=b[0];for(i=1;i<9;i++){q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];}x[8]=y[8]/u[8]; /*执行本算法*/for(i=7;i>=0;i--)x[i]=(y[i]-a[i][i+1]*x[i+1])/u[i]; /*求出x的值*/ for(i=0;i<9;i++){if (i==5)printf("\n");printf(" x%d=%-10.6f",i,x[i]);}printf("\n");}int sign(double x){int z;z=(x>=(1e-6)?1:-1);return(z);}(三)、计算结果打印:(四)、问题讨论:a .由于选主元,使|lij|最小,这样去乘方程的每一系数时,系数的舍入误差不至扩大,并防止溢出与停机。
b . 由于选主元,回代时作除数主元aii(i)的绝对值也是最大,这样扩大的误差也是最小.c . 若detA ≠0,则选主元后的主元aii(i) ≠0,这是因为若aii(i)=0则必有aji(i)=0 (j>i)这样按行列式的Laplace 展开式就有detA=0而矛盾,因此用主元消去法中进行下去,不止中断停机.同时也由于选主元, aii(i)接近零的概率减少.运行结果基本与准确值无异,因为这种算法的无误差的算法。
三.试用三次样条插值求()4.563f 及(4.563)f '的近似值。
(一)方法由s(x i )=y i ,I=1,2,…N s’(x 0)=y 0’,s ’(x N )=y N ’可得S(x i )= ∑+-=11N j c j Ω3(x i -x j /h)=y iS ’(x 0)=1/h ∑+-=11N j c j Ω3’(x 0-x j /h)=y ’0S ’(x N )=1/h ∑+-=11N j c j Ω3’(x N -x j /h)=y ’N其中j c 必须的方程 :⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛---2.081551.1318338.1347667.12675460.11750557.106566268.93177664.85916738.6158839.4021011411411411411411411411411411411011098765432101c c c c c c c c c c c cq[0]=0 , u[0]=0 ,1,,2,1]),[][][(][][-⋅⋅⋅=⋅+-=n i i q i a i b i c i qn i i q i a i b i u i a i d i u ,,2,1]),1[][][(])[][][(}[⋅⋅⋅=-⋅+⋅-= x[9]=u[9]1,,2,1],[]1[][][⋅⋅⋅--=++⋅=n n i i u i x i q i x []333333)2()1(46)1(4)2(61)(+++++-+--++-+=Ωx x x x x x s ' (x)= ∑∑-=-=--Ω--+Ω10121012)21()21(j j j j j x c j x c(二)原程序及运行结果:#include<stdio.h> #include<math.h> #define N 9 void main() {double x[N+1]={1,2,3,4,5,6,7,8,9,10},y[N+1]={0,0.69314718,1.0986123,1.3862944,1.6094378,1.7917595,1.9459101,2.079445,2.1 972246,2.3025851},h[N+1],d[N+1],a[N+1],c[N+1],b[N+1]={2,2,2,2,2,2,2,2,2,2},s[N+1],t[N+1],l[N+1],M[N+1], f,f1;int i;for(i=1;i<=N;i++) /*使用对任意分化的三弯矩插值法*/h[i-1]=x[i]-x[i-1];d[0]=6/h[0]*((y[1]-y[0])/h[0]-1);d[N]=6/h[N-1]*(0.1-(y[N]-y[N-1])/h[N-1]);for(i=1;i<=N-1;i++){d[i]=6/(h[i-1]+h[i])*((y[i+1]-y[i])/h[i]-(y[i]-y[i-1])/h[i-1]);a[i]=h[i-1]/(h[i-1]+h[i]);c[i]=1-a[i];}c[0]=1;a[N]=1;s[0]=b[0];t[0]=d[0]; /*用追赶法求解三对角方程组*/for(i=0;i<=N-1;i++){l[i+1]=a[i+1]/s[i];s[i+1]=b[i+1]-l[i+1]*c[i];t[i+1]=d[i+1]-l[i+1]*t[i];}M[N]=t[N]/s[N];for(i=N-1;i>=0;i--)M[i]=(t[i]-c[i]*M[i+1])/s[i];f=M[3]*pow((x[4]-4.563),3)/6/h[3] /*求算4.563这点的函数值*/+M[4]*pow((4.563-x[3]),3)/6/h[3]+(y[3]-M[3]*h[3]*h[3]/6)*(x[4]-4.563)/h[3]+(y[4]-M[4]*h[3]*h[3]/6)*(4.563-x[3])/h[3];f1=-3*M[3]*pow((x[4]-4.563),2)/6/h[3] /*求算4.563这点的一阶导数值*/+3*M[4]*pow((4.563-x[3]),2)/6/h[3] -(y[3]-M[3]*h[3]*h[3]/6)/h[3] +(y[4]-M[4]*h[3]*h[3]/6)/h[3];printf("f(4.563)=%lf f'(4.563)=%lf\n",f,f1);}(三) 输出结果:(四) 问题讨论:其基本思想是对均匀分划的插值函数的构造,三次样条函数空间中不取1,x,,x 2,x 3,(x-x j )+3为基函数,而取B 样条函数Ω3(x-x j /h)为基函数.由于三次样条函数空间是N+3维的,故我们把分点扩大到X -1,X N+1,则任意三次样条函数可用Ω3(x-x j /h)线性组合来表示 S(x)= ∑+-=11N j c j Ω3(x-x j /h) 这样对不同插值问题,若能确定c j 由解的唯一性就能求得解S(x).同时样条插值效果比Lagrange 插值好,近似误差较小.没有Runge 现象。