matlab(迭代法_牛顿插值)

合集下载

MATLAB数值实验一(数据的插值运算及其应用完整版)

MATLAB数值实验一(数据的插值运算及其应用完整版)

佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 10 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。

二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、用MATLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+=},4()L x 、4()P x 和()S x 。

5、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。

6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。

(1)用这9个点作8次多项式插值8()L x 。

(2)用三次样条(第一边界条件)程序求()S x 。

7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+=,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。

四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f方程文件,后面有一题也有用到。

MAAB牛顿插值法例题与程序

MAAB牛顿插值法例题与程序

题目一:多项式插值某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。

二、数学原理假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式:)())(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -⋯⋯-+⋯⋯+-++=αααα(1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =)((i=0,1,2……n )确定。

根据均差的定义,把x 看成[a,b]上的一点,可得f(x)=f (0x )+f[10x x ,](0x -x ) f[x,0x ]=f[10x x ,]+f[x,10x x ,](1x -x )……f[x,0x ,…x 1-n ]=f[x,0x ,…x n ]+f[x,0x ,…x n ](x-x n )综合以上式子,把后一式代入前一式,可得到:f(x)=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+…+f[x,0x ,…x n ](0x -x )…(x-x 1-n )+f[x,0x ,…x n ,x ])(x 1n +ω=N n (x )+)(x n R 其中N n (x )=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+ …+f[x,0x ,…x n ](0x -x )…(x-x 1-n )(2))(x n R =f(x)-N n (x )=f[x,0x ,…x n ,x ])(x 1n +ω(3) )(x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。

(最新整理)matlab实现插值法和曲线拟合

(最新整理)matlab实现插值法和曲线拟合

matlab实现插值法和曲线拟合编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(matlab实现插值法和曲线拟合)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为matlab实现插值法和曲线拟合的全部内容。

插值法和曲线拟合电子科技大学摘要:理解拉格朗日多项式插值、分段线性插值、牛顿前插,曲线拟合,用matlab编程求解函数,用插值法和分段线性插值求解同一函数,比较插值余项;用牛顿前插公式计算函数,计算函数值;对于曲线拟合,用不同曲线拟合数据。

关键字:拉格朗日插值多项式;分段线性插值;牛顿前插;曲线拟合引言:在数学物理方程中,当给定数据是不同散点时,无法确定函数表达式,求解函数就需要很大的计算量,我们有多种方法对给定的表格函数进行求解,我们这里,利用插值法和曲线拟合对函数进行求解,进一步了解函数性质,两种方法各有利弊,适合我们进行不同的散点函数求解。

正文:一、插值法和分段线性插值1拉格朗日多项式原理对某个多项式函数,已知有给定的k + 1个取值点:其中对应着自变量的位置,而对应着函数在这个位置的取值。

假设任意两个不同的x j都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:[3]拉格朗日基本多项式的特点是在上取值为1,在其它的点上取值为0。

2分段线性插值原理给定区间[a,b], 将其分割成a=x 0 <x 1 <…<x n =b , 已知函数y= f (x ) 在这些插值结点的函数值为y k =f (x k )(k=0,1,…,n)求一个分段函数I h (x), 使其满足:(1) I h (x k )=y k ,(k=0,1,…,n) ;(2) 在每个区间[x k ,x k+1 ] 上,I h (x )是个一次函数.易知,I h (x)是个折线函数, 在每个区间[x k ,x k+1 ]上,(k=0,1,…,n )k 1k k1k 1k k 1k k k ,1)()()(x x x x x f x x x x x f x L --+--=++++,于是, I h (x)在[a,b]上是连续的,但其一阶导数是不连续的。

牛顿-柯特斯公式matlab

牛顿-柯特斯公式matlab

牛顿-柯特斯公式matlab首先,让我们来了解一下数值积分的基本概念。

数值积分是通过求取一个函数在给定区间上的近似面积来计算函数的定积分。

一种常见的数值积分方法是使用插值多项式来近似函数,并在给定区间上对该多项式进行积分。

牛顿插值多项式是由一组不同的x值和对应的函数值构成的。

该多项式通过这些点来逼近函数,并可以用于在任意点上计算函数的近似值。

牛顿插值多项式的形式如下:P(x)=f[x₀]+f[x₀,x₁](x-x₀)+f[x₀,x₁,x₂](x-x₀)(x-x₁)+...其中,f[x₀]表示函数在x₀上的值,f[x₀,x₁]表示函数在x₀和x₁上的差商。

柯特斯系数用于计算牛顿插值多项式在给定区间上的积分。

公式如下:C₀=1C₁=h/2C₂=h²/6C₃=h³/12C₄=h⁴/20其中,h表示区间的宽度。

在MATLAB中,可以使用以下代码来实现牛顿-柯特斯公式:function result = newton_cotes(f, a, b, n)h=(b-a)/n;x=a:h:b;fx = f(x);coefficient = zeros(n+1, 1);coefficient(1) = 1;for i = 2:n+1coefficient(i) = coefficient(i-1) * (h^(i-1)) / factorial(i-1);endresult = sum(fx .* coefficient);end```在上面的代码中,`f`表示要积分的函数,`a`和`b`表示积分区间的起始点和结束点,`n`表示节点的数量。

首先,我们计算出节点的横坐标和对应的函数值。

然后,根据柯特斯系数的公式计算系数。

最后,将函数值与系数相乘,并求和,从而得到近似的积分值。

例如,我们要计算函数f(x) = sin(x)在区间[0, π/2]上的积分值,可以使用以下代码:a=0;b = pi/2;n=4;result = newton_cotes(f, a, b, n);disp(result);```运行该代码,将输出函数f(x)在区间[0,π/2]上的近似积分值。

MATLAB实习报告-1

MATLAB实习报告-1

--实习报告班级:******姓名:**学号:***********指导老师:***日期:2011/11/24目录一.MATLAB简介 (3)二.上机实习题目 (3)1. 第2章第1题 (3)2. 第3章第2题 (3)3. 第5章第2题 (3)4. 第4章第1题 (4)三.题目实现过程 (4)1. 牛顿插值以及三次样条插值(第一个实验题) (4)a.牛顿插值 (4)b.三次样条插值 (4)c.牛顿插值截图 (5)d.三次样条插值截图 (6)2. 3次,4次多项式的曲线拟合 (7)a.先输入表格中对应的数据, (7)次拟合 (7)c. 3次拟合截图 (8)d. 4次拟合 (9)e. 4次拟合截图 (9)3. 高斯消去法解线性方程组 (10)a. 高斯消去法源代码 (10)b. 第一个小题 (11)c. 第二个小题 (12)4. 雅克比迭代法与SOR方法 (13)a. 雅克比迭代法的计算公式 (13)b. 超松弛迭代法的计算公式 (13)c.得到希尔矩阵 (13)d.得到b矩阵 (13)e.雅克比迭代法实现的函数 (13)迭代法实现的函数 (14)g.对于雅克比迭代法,通过执行以下代码 (15)h. 对于SOR迭代法,执行相对应代码 (15)四.心得与感想 (18)一.M ATLAB简介MATLAB是一个软件,用来进行科学计算。

在实际生活或者在科学研究中,大量的计算有时候是不可避免的,在这个时候,我们可以选择很多种方式来解决我们的问题。

但是选择一个好的软件对于我们来说有时候却是非常困难的,尤其是现在各种软件层出不穷,当然里面有好的,可是有大多数的软件却是鱼目混珠,在里面滥竽充数。

如果我们不避开这些,那么我们可能面临的是用很大的工作量来完成一个极其简单的问题,或者说在付出了时间与精力之后却完不成问题。

所以必须选择一个好的计算软件来解决问题。

MATLAB 就是这样一个软件,在你能够熟悉并且流畅运用它之后,那它将是一把能够解决很多问题的钥匙。

matlab(迭代法_牛顿插值)

matlab(迭代法_牛顿插值)

实验报告内容:一:不动点迭代法解方程二:牛顿插值法的MA TLAB实现完成日期:2012年6月21日星期四数学实验报告一日期:2012-6-21hold on>> fplot(g,[-2,2])>> fplot(f,[-2,2])>> hold off>> grid输出结果如下所示:所以,确定初值为x0=1二:不断迭代算法:第一步:将f(x0)赋值给x1第二步:确定x1-x0的绝对值大小,若小于给定的误差值,则将x1当做方程的解,否则回到第一步编写计算机程序:clearf=inline('0.5*sin(x)+0.4');x0=1;x1=f(x0);k=1;while abs(x1-x0)>=1.0e-6x0=x1;x1=f(x0);k=k+1;fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1)end显示结果如下:k=2,x0=0.820735492,x1=0.765823700k=3,x0=0.765823700,x1=0.746565483k=4,x0=0.746565483,x1=0.739560873k=5,x0=0.739560873,x1=0.736981783k=6,x0=0.736981783,x1=0.736027993k=7,x0=0.736027993,x1=0.735674699k=8,x0=0.735674699,x1=0.735543758k=9,x0=0.735543758,x1=0.735495216k=10,x0=0.735495216,x1=0.735477220k=11,x0=0.735477220,x1=0.735470548k=12,x0=0.735470548,x1=0.735468074k=13,x0=0.735468074,x1=0.735467157>>。

牛顿插值法matlab程序例题

牛顿插值法matlab程序例题

牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。

这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。

牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。

在Matlab中,实现牛顿插值法并不困难,我们可以利用已有的函数和工具来简化计算过程。

下面,我们将通过一个具体的例题来讲解如何使用Matlab编写牛顿插值法的程序,并分析其结果。

我们需要明确牛顿插值法的数学原理。

给定n个互不相同的节点\(x_0, x_1, ... , x_n\),以及在这些节点上的函数值\(f(x_0), f(x_1), ... , f(x_n)\),我们希望构造一个n次插值多项式p(x),满足p(x_i) = f(x_i),i=0,1,...,n。

牛顿插值多项式的一般形式为:\[p(x) = a_0 + a_1(x - x_0) + a_2(x - x_0)(x - x_1) + ... + a_n(x -x_0)(x - x_1)...(x - x_{n-1})\]其中,\[a_i\]表示插值多项式的系数。

通过牛顿插值法的迭代过程,可以逐步求解出这些系数,进而得到插值多项式的表达式。

接下来,我们将以一个具体的例题来演示如何在Matlab中实现牛顿插值法。

假设我们有如下的数据点和函数值:\(x = [1, 2, 3, 4]\)\(f(x) = [1, 4, 9, 16]\)我们希望利用这些数据点来构造一个插值多项式,并在给定的区间上进行插值计算。

在Matlab中,可以通过interp1函数来进行插值计算,该函数支持多种插值方法,包括牛顿插值法。

下面是一个简单的Matlab程序示例:```matlabx = [1, 2, 3, 4];y = [1, 4, 9, 16];xi = 2.5;yi = interp1(x, y, xi, 'spline');disp(['在x=',num2str(xi),'处的插值结果为:',num2str(yi)]);```在这段代码中,我们首先定义了给定的数据点x和对应的函数值y,然后利用interp1函数对x=2.5处的插值结果进行计算。

matlab牛顿迭代法算重根

matlab牛顿迭代法算重根

一、简介Matlab是一种十分常用的科学计算软件,其功能强大,可以进行各种数值计算、数据分析和可视化操作。

而牛顿迭代法是一种用于求解方程的数值算法,可以有效地计算出函数的根。

本文将重点介绍如何使用Matlab进行牛顿迭代法来计算重根。

二、牛顿迭代法原理1. 牛顿迭代法是一种迭代逼近的方法,通过不断迭代得到更接近函数零点的近似值。

其公式如下:X_{n+1} = X_n - \frac{f(X_n)}{f'(X_n)}其中,X_{n+1}为下一次迭代的近似值,X_n为当前的近似值,f(X)为函数值,f'(X)为函数的导数值。

2. 牛顿迭代法的优点是收敛速度快,而缺点是对初始值的选择敏感,可能会产生不收敛的情况。

三、在Matlab中使用牛顿迭代法1. 在Matlab中,可以使用内置的函数`fzero`来进行牛顿迭代法的计算。

其语法如下:x = fzero(fun,x0)其中,fun为要求解的函数句柄,x0为起始点的初始值,x为函数的根。

2. 需要注意的是,在使用`fzero`函数时,需要提供函数的句柄,即在Matlab中定义要求解的函数,并使用`(x)`符号来表示函数的自变量。

另外,还需要提供初始值x0,可以根据具体问题来选择较为合适的初始值。

3. 以下是一个简单的使用牛顿迭代法求解函数根的示例代码:```matlabf = (x) x^3 - 2*x - 5;x0 = 2;x = fzero(f, x0);disp(x);```四、示例接下来,我们将通过一个具体的示例来演示如何使用Matlab的牛顿迭代法来计算重根。

1. 问题描述假设有如下方程:f(x) = x^3 - 2x^2 + 3x - 6我们希望使用牛顿迭代法来计算函数f(x)的重根。

2. 解决过程在Matlab中定义函数f(x):```matlabf = (x) x^3 - 2*x^2 + 3*x - 6;```选择初始值x0,并利用`fzero`函数进行牛顿迭代法的计算:```matlabx0 = 2;x = fzero(f, x0);disp(x);```3. 结果分析经过计算,可以得到函数f(x)的一个重根为x=2.这样,我们就成功地使用Matlab的牛顿迭代法来计算重根。

matlab牛顿迭代法求多项式方程的根

matlab牛顿迭代法求多项式方程的根

matlab牛顿迭代法求多项式方程的根【主题】matlab牛顿迭代法求多项式方程的根1. 引言在数学和工程领域中,求解多项式方程的根是一项常见且重要的任务。

牛顿迭代法是一种有效的数值方法,可以用来逼近多项式方程的根。

本文将详细介绍如何利用matlab实现牛顿迭代法,以及该方法的应用和局限性。

2. 牛顿迭代法简介牛顿迭代法是一种基于导数的数值逼近方法,用于求解方程 f(x)=0 的根。

该方法的基本思想是从一个初始近似值开始,通过逐步改进来逼近方程的根。

牛顿迭代法的迭代公式为:\[x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}\]其中,\(x_n\)是第n次迭代的近似根,f(x)是方程,\(f'(x)\)是f关于x的导数。

3. 在matlab中实现牛顿迭代法在matlab中,我们可以利用函数和循环结构来实现牛顿迭代法。

需要定义方程f(x)以及其导数f'(x)的函数表达式。

选择一个初始值作为近似根,通过迭代公式不断改进,直到满足预设的精度要求。

4. 应用实例我们将以一个具体的多项式方程为例,来演示如何利用matlab的牛顿迭代法来求解其根。

假设我们要求解方程\(x^2-2=0\)的根。

我们可以定义方程及其导数的matlab函数表达式,然后选择一个适当的初始值,进行迭代计算,最终得到方程的根。

5. 算法优化与局限性虽然牛顿迭代法在求解多项式方程的根上表现出色,但也存在一些局限性。

需要提前知道方程的导数表达式;初始值的选取可能影响迭代结果的精度等。

在实际应用中,需要根据具体情况灵活选择迭代算法,甚至进行一些优化来提高求解效率。

6. 结语通过matlab实现牛顿迭代法求解多项式方程的根,不仅可以帮助我们深入理解数值计算方法,也可以应用到实际工程问题中。

对于复杂的多项式方程,利用数值方法求解是一种有效的途径。

当然,在应用过程中需要注意算法的优化和局限性,以确保求解的准确性和稳定性。

matlab实现牛顿差分及等距节点插值公式

matlab实现牛顿差分及等距节点插值公式

题目:探究matlab中牛顿差分及等距节点插值公式的实现在计算数学问题时,插值是一种常见的数值分析方法,它常常用于估计在已知数据点之间的数值。

而牛顿差分及等距节点插值公式,则是其中的一种重要方法。

本文将从简单到复杂,由浅入深地探讨matlab 中牛顿差分及等距节点插值公式的实现方法,以便读者更深入地理解这一主题。

1. 牛顿插值方法牛顿插值是一种使用多项式进行插值的数值方法,利用了拉格朗日插值多项式的一般形式,其在实际应用中具有良好的稳定性和精确度。

在matlab中,我们可以通过编写函数来实现牛顿插值方法,并根据所给定的数据点计算出插值多项式。

2. 差分及等距节点插值公式差分及等距节点插值公式是牛顿插值的一种具体形式,它通过相邻节点的差分来递推计算插值多项式的系数,从而实现对给定数据点的插值。

在matlab中,我们可以编写代码来实现这一方法,通过对数据点的差分计算来得到插值多项式的系数,并最终得到插值结果。

3. matlab中的实现步骤在matlab中,实现牛顿差分及等距节点插值公式主要包括以下几个步骤:3.1 准备数据点:首先需要准备好给定的数据点,这些数据点将作为插值的依据。

3.2 计算差商:利用给定的数据点,我们可以计算出插值多项式的系数,即差商。

这一步骤可以通过递推计算来实现。

3.3 构建插值多项式:根据得到的插值多项式的系数,我们可以构建出完整的插值多项式。

3.4 计算插值结果:我们可以利用构建好的插值多项式来计算任意点的插值结果。

4. 个人观点和理解在我看来,牛顿差分及等距节点插值公式是一种非常实用和有效的插值方法,在实际工程和科学计算中都有着广泛的应用。

在matlab中,通过编写相应的代码,我们可以很方便地实现这一方法,并得到高质量的插值结果。

掌握牛顿插值及其在matlab中的实现方法对我们来说是非常重要的。

总结回顾本文从简到繁,由浅入深地探讨了matlab中牛顿差分及等距节点插值公式的实现方法。

牛顿插值MATLAB算法

牛顿插值MATLAB算法

牛顿插值MATLAB算法牛顿插值算法是一种用于数据插值的数值方法,由英国数学家艾萨克·牛顿在17世纪提出。

该算法的目标是通过已知数据点来构建一个多项式,进而估计在未知数据点之间的数值。

MATLAB是一种功能强大的数值计算和科学编程软件,能够方便地实现牛顿插值算法。

牛顿插值算法的基本思想是通过多项式的差商来逐步逼近插值函数。

算法的核心是牛顿插值多项式的递推公式,即:p(x) = f[x0] + (x - x0)f[x0, x1] + (x - x0)(x - x1)f[x0, x1, x2] + ... + (x - x0)(x - x1)...(x - xn-1)f[x0, x1, ..., xn]其中f[x0]表示已知数据点的函数值,f[x0,x1]表示差商,f[x0,x1,x2]表示二阶差商,以此类推。

递推公式可以通过递归或迭代的方法计算。

在MATLAB中,可以使用以下代码实现牛顿插值算法:```matlabfunction p = newton_interpolation(x, y, xx)n = length(x); % 数据点的个数F = zeros(n); % 差商表格F(:,1)=y;%第一列为已知函数值%计算差商表格for j = 2:nfor i = j:nF(i,j)=(F(i,j-1)-F(i-1,j-1))/(x(i)-x(i-j+1));endend%计算牛顿插值多项式p=F(1,1);for j = 2:nterm = 1;for i = 1:j-1term = term * (xx - x(i));endp = p + F(j, j) * term;endend```在使用该函数时,需要提供已知数据点的横坐标x和纵坐标y,以及待估计的插值点的横坐标xx。

函数将返回插值点的估计值p。

以下是利用该函数进行插值的示例:```matlabx=[1,2,4,7];%已知数据点的横坐标y=[0,-1,2,3];%已知数据点的纵坐标xx = 3; % 待估计的插值点的横坐标p = newton_interpolation(x, y, xx);disp(p);```运行上述代码,将会输出插值点(3,?)的估计值。

Matlab 7使用

Matlab 7使用
Matlab7.0 使用手册(数值计算) 代号 模块 层次 9-06A 计算机辅助设计 基础型
Matlab 7.0 使用说明
) (数值计算部分 (数值计算部分)
华中科技大学国家机械基础课程教学基地 2009 年 10 月
I
Matla.................................................................................................................................... 1 §1.Matlab 的使用.....................................................................................................................................1 1-1.直接输入命令........................................................................................................................... 1 1-2.用 M 文件开发程序.................................................................................................................. 1 §2.M 文件程序的主要语句和主要函数............................................................................................. 2 2-1.Matla

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告数值分析 Matlab 实验报告一、实验目的数值分析是研究各种数学问题数值解法的学科,Matlab 则是一款功能强大的科学计算软件。

本次实验旨在通过使用 Matlab 解决一系列数值分析问题,加深对数值分析方法的理解和应用能力,掌握数值计算中的误差分析、数值逼近、数值积分与数值微分等基本概念和方法,并培养运用计算机解决实际数学问题的能力。

二、实验内容(一)误差分析在数值计算中,误差是不可避免的。

通过对给定函数进行计算,分析截断误差和舍入误差的影响。

例如,计算函数$f(x) =\sin(x)$在$x = 05$ 附近的值,比较不同精度下的结果差异。

(二)数值逼近1、多项式插值使用拉格朗日插值法和牛顿插值法对给定的数据点进行插值,得到拟合多项式,并分析其误差。

2、曲线拟合采用最小二乘法对给定的数据进行线性和非线性曲线拟合,如多项式曲线拟合和指数曲线拟合。

(三)数值积分1、牛顿柯特斯公式实现梯形公式、辛普森公式和柯特斯公式,计算给定函数在特定区间上的积分值,并分析误差。

2、高斯求积公式使用高斯勒让德求积公式计算积分,比较其精度与牛顿柯特斯公式的差异。

(四)数值微分利用差商公式计算函数的数值导数,分析步长对结果的影响,探讨如何选择合适的步长以提高精度。

三、实验步骤(一)误差分析1、定义函数`compute_sin_error` 来计算不同精度下的正弦函数值和误差。

```matlabfunction value, error = compute_sin_error(x, precision)true_value = sin(x);computed_value = vpa(sin(x), precision);error = abs(true_value computed_value);end```2、在主程序中调用该函数,分别设置不同的精度进行计算和分析。

(二)数值逼近1、拉格朗日插值法```matlabfunction L = lagrange_interpolation(x, y, xi)n = length(x);L = 0;for i = 1:nli = 1;for j = 1:nif j ~= ili = li (xi x(j))/(x(i) x(j));endendL = L + y(i) li;endend```2、牛顿插值法```matlabfunction N = newton_interpolation(x, y, xi)n = length(x);%计算差商表D = zeros(n, n);D(:, 1) = y';for j = 2:nfor i = j:nD(i, j) =(D(i, j 1) D(i 1, j 1))/(x(i) x(i j + 1));endend%计算插值结果N = D(1, 1);term = 1;for i = 2:nterm = term (xi x(i 1));N = N + D(i, i) term;endend```3、曲线拟合```matlab%线性最小二乘拟合p = polyfit(x, y, 1);y_fit_linear = polyval(p, x);%多项式曲线拟合p = polyfit(x, y, n);% n 为多项式的次数y_fit_poly = polyval(p, x);%指数曲线拟合p = fit(x, y, 'exp1');y_fit_exp = p(x);```(三)数值积分1、梯形公式```matlabfunction T = trapezoidal_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);T = h ((y(1) + y(end))/ 2 + sum(y(2:end 1)));end```2、辛普森公式```matlabfunction S = simpson_rule(f, a, b, n)if mod(n, 2) ~= 0error('n 必须为偶数');endh =(b a) / n;x = a:h:b;y = f(x);S = h / 3 (y(1) + 4 sum(y(2:2:end 1))+ 2 sum(y(3:2:end 2))+ y(end));end```3、柯特斯公式```matlabfunction C = cotes_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);w = 7, 32, 12, 32, 7 / 90;C = h sum(w y);end```4、高斯勒让德求积公式```matlabfunction G = gauss_legendre_integration(f, a, b)x, w = gauss_legendre(5);%选择适当的节点数t =(b a) / 2 x +(a + b) / 2;G =(b a) / 2 sum(w f(t));end```(四)数值微分```matlabfunction dydx = numerical_derivative(f, x, h)dydx =(f(x + h) f(x h))/(2 h);end```四、实验结果与分析(一)误差分析通过不同精度的计算,发现随着精度的提高,误差逐渐减小,但计算时间也相应增加。

matlab牛顿迭代法

matlab牛顿迭代法

matlab牛顿迭代法经过几千年的发展,牛顿迭代法一直是近代数学和计算机应用领域最受欢迎的数值解决方案。

其在Matlab工程中的应用可以极大程度地解决复杂的优化问题,并显著提升了解决高精度问题的效率。

本文旨在介绍Matlab中牛顿迭代法的基本原理、准备工作和实现过程,以期提高Matlab用户应用牛顿迭代法的能力,使其获得更好的结果。

一、牛顿迭代法基本原理牛顿迭代法是一种基于牛顿插值法的法,它利用逼近函数和迭代法来求解非线性方程组。

当用牛顿插值法求解一个函数时,先利用已知函数值和其导数值,给出一次和二次期望值,从而可以算出下一个函数值,从而迭代求解。

牛顿迭代法最重要的特点在于它对非线性方程组具有极大的精度,它重复操作过程可以较快地收敛,它的实现简单确定性,它易于并行计算,它能够收敛到方程组的精确解。

二、准备工作在开始使用Matlab使用牛顿迭代法之前,需要先准备一定的准备工作,使其具备有效的解决方案。

1.先,必须准备一个非线性方程组,这个方程组用牛顿迭代法来求解,根据实际情况,可以采用一阶、二阶或:方程组。

2.果求解一个函数时,还需要准备函数和其一阶、二阶导数,将其编写成具有一定结构的Matlab函数。

3.据实际情况,必须设定预先条件,是非线性方程组可以进行求解,比如设定精度要求、步长条件,并计算初始迭代点。

三、Matlab中牛顿迭代法的实现在Matlab中,只需要一行代码就可以实现牛顿迭代法,其在Matlab中可以简代码如下:[Xn, fval, info] = fsolve(fun, x0);其中,fun表示需要求解的函数,x0表示初始化迭代点。

此外,fsolve可以接受一些可选参数,包括精度要求以及步长条件等。

四、实际案例通过实际案例可以更好的理解上文讲解的内容,以下实例将应用于牛顿迭代法求解下面这个一元非线性方程组:f(x) = x^3*e^x-2 = 0求解的源程序如下:function f = fun(x)f = x.^3.*exp(x) - 2;endx0 = 0;[x, fval, info] = fsolve(@fun,x0);计算结果如下:x = 0.8245fval = -1.9625e-14info = 1从结果可以看出,牛顿迭代法给出的结果与精确解非常接近,说明使用牛顿迭代法求解此问题是可行的。

多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值[MATLAB]

多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值[MATLAB]

多项式函数插值:全域多项式插值(⼀)单项式基插值、拉格朗⽇插值、⽜顿插值[MATLAB] 全域多项式插值指的是在整个插值区域内形成⼀个多项式函数作为插值函数。

关于多项式插值的基本知识,见。

在单项式基插值和⽜顿插值形成的表达式中,求该表达式在某⼀点处的值使⽤的Horner嵌套算法啊,见""。

1. 单项式(Monomial)基插值1)插值函数基 单项式基插值采⽤的函数基是最简单的单项式:\phi_j(t)=t^{j-1}, j=1,2,...n;\quad f(t)=p_{n-1}(t)=x_1+x_2t+x_3t^2+...x_nt^{n-1}=\sum\limits_{j=1}^nx_jt^{j-1} 所要求解的系数即为单项式系数x_1,x_2,...x_n,在这⾥仍然采⽤1,2,...n的下标记号⽽不采⽤和单项式指数对应的0,1,2,...,n-1的下标仅仅是出于和前后讨论⼀致的需要。

2)叠加系数 单项式基插值采⽤单项式函数基,若有m个离散数据点需要插值,设使⽤n项单项式基底:x_1+t_1x_2+t_1^2x_3+...+t_1^{n-1}x_n=y_1\\ x_1+t_2x_2+t_2^2x_3+...+t_2^{n-1}x_n=y_2\\ ...... ...... ...... ...... ...... ......\\ x_1+t_mx_2+t_m^2x_3+...+t_m^{n-1}x_n=y_m 系数矩阵为⼀m\times n的矩阵(m\leq n),范德蒙(Vandermonde)矩阵:\begin{bmatrix}1&t_1&t_1^2&...&t_1^{n-1}\\1&t_2&t_2^2&...&t_2^{n-1}\\...&...&...&...&...\\1&t_n&t_n^2&...&t_n^{n-1}\end{bmatrix}\begin{bmatrix}x_1\\x_2\\...\\x_n\end{bmatrix}=\begin{bmatrix}y_1\\y_2\\...\\y_n\end{bmatrix} 根据计算基本理论中的讨论,多项式插值的函数基⼀定线性⽆关,且只要离散数据点两两不同,所构成的矩阵⾏也⼀定线性⽆关,这保证了矩阵⼀定⾏满秩。

数值分析matlab方法插值法

数值分析matlab方法插值法
(n 1)!
其中,
n
【注】
x [a, b] w(x) (x x j ) j 0
(1)误差估计
Rn (x)
M n1 (n 1)!
w( x)
M n1
max
x( a ,b )
f
(n1) (x)
(2)余项与 x、M n1 节点的位置、个数 n 有关
(3)当 f (x)是 n 的多项式时Ln (x) f (x) n
M2 2!
(x
x0 )(x
x1 )
其中,
M2
max
x( x0 , x1 )
f
(x)
x
[
6
,
4
]
,所以
R1
(
5
24
)
sin
2!
4 (5
24
)( 5
6 24
)
4
0.0061
2)
抛物插值误差估计.因为
R2 (x)
M3 3!
(x
x0 )(x
x1)(x
x2 )
其中,
M3
max
x( x0 ,x2 )
f (x)
yiynewtonbackwardxyxicos035yi09394数值分析插值法55埃尔米特插值2n12n2数值分析插值法551埃尔米特插值多项式的存在唯一性2n1数值分析插值法数值分析插值法552埃尔米特插值余项553三次埃尔米特插值多项式maxsinxsin1数值分析插值法56561高次插值的病态性质0908原函数150706050405分段线性插值0302543214321055数值分析插值法562分段低次插值方法563分段低次插值余项090807060504030201090807060504030201543214321数值分析插值法57三次样条插值571三次样条插值572三弯矩法数值分析插值法573三次样条插值的误差估计与收敛性58插值运算的matlab函数581一维插值函数interp1yiinterp1xyximethod?linear?yiinterp1xyxilinear?1200135019

MATLAB程序设计插值实验题目

MATLAB程序设计插值实验题目

1、当2,1,1-=x 时,4,3,0)(-=x f ,求x =0时的值。

2、给出x x f ln )(=的数值表用线性插值及二次插值计算54.0ln 的近似值。

3、4()31f x x x =++,已知x =0,1,2处的值,计算x =0.11的近似值。

4.求i =3和5时的值。

5. 给定数据表,采用牛顿插值方法求i =3和5时的值。

6. 已知函数y =在4, 6.25,9x x x ===的近似值。

7. 已知函数y =在4,9,16x x x ===的近似值。

8. 已知函数y =在0,1,4,9x x x x ==== 9. 给定数据表:构造出函数()f x 的差商表,并计算x =0.5时的值.10. 已知函数y =在8,27,64x x x ===的近似值。

11. 已知函数sin()y x =在0,/4,/2x x x ππ===处的函数值,试通过一个二次插值函数求sin(/5)π的近似值。

12. 已知函数cos()y x =在0,/4,/2x x x ππ===处的函数值,试通过一个二次插值函数求cos(/5)π的近似值。

13. 已知函数tan()y x =在0,/4,/3x x x ππ===处的函数值,试通过一个二次插值函数求tan(/5)π的近似值。

14. 已知函数4y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.111x =的近似值。

15. 已知函数sin()y x =在0,/4,/2x x x ππ===处函数值,通过一个二次插值函数求1sin(2/5)π-的近似值。

16. 已知函数cos()y x =在0,/4,/2x x x ππ===处函数值,通过一个二次插值函数求1+cos(/5)π的近似值。

17. 已知函数5y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.121x =的近似值。

18. 已知函数41/y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.211x =的近似值。

matlab插值原理

matlab插值原理

matlab插值原理Matlab插值原理插值是一种数学方法,用于通过已知数据点的值来估计在这些数据点之间的未知数据点的值。

Matlab是一种强大的计算软件,可以用于数值计算和数据分析。

在Matlab中,插值方法可以通过使用interp1函数来实现。

插值方法可以分为两类:多项式插值和非多项式插值。

多项式插值使用多项式函数来逼近数据点,而非多项式插值使用其他函数形式来逼近数据点。

最常用的多项式插值方法是拉格朗日插值和牛顿插值。

拉格朗日插值使用一个多项式函数来逼近数据点,该多项式函数通过数据点和对应的函数值来确定。

牛顿插值使用一个差商表来确定多项式函数的系数,差商表由数据点和对应的函数值计算得到。

非多项式插值方法包括样条插值和分段线性插值。

样条插值使用分段低次多项式来逼近数据点,这些多项式在相邻的数据点之间衔接。

分段线性插值使用线性函数来逼近相邻数据点之间的数据。

在Matlab中,interp1函数可以使用上述插值方法进行数据插值。

该函数具有以下语法:Y = interp1(X, V, XI, METHOD)其中,X是已知数据点的横坐标,V是已知数据点的纵坐标,XI是要插值的点的横坐标,METHOD是插值方法。

使用interp1函数进行插值时,需要注意以下几点:1. 数据点的横坐标必须是单调递增的,即X(1) < X(2) < ... < X(n)。

2. 如果要插值的点的横坐标在已知数据点的横坐标范围之外,interp1函数将返回NaN。

3. 如果要插值的点的横坐标在已知数据点的横坐标范围之内,但在两个已知数据点的横坐标之间,interp1函数将使用插值方法来确定插值点的纵坐标。

除了interp1函数,Matlab还提供了其他插值函数,如interp2、interp3和interpn。

这些函数可以用于二维和三维数据的插值。

插值在数值计算和数据分析中起着重要的作用。

通过插值,我们可以根据已知数据点的值来估计在这些数据点之间的未知数据点的值。

插值法

插值法

插值法一.实验目的•熟悉Matlab 编程; • 学习插值方法及程序设计算法二.实验内容1. 已知函数在下列各点的值为试用4次Newton 插值多项式4()P x 及分段线性插值函数()h I x 对数据进行插值.用图给出{}(,),0.20.08,0,1,,10i i i x y x i i =+=,4()P x 及()h I x .2. 在区间[1,1]-上分别取10n =、20用两组等距节点对龙格函数21()125f x x =+作多项式插值及分段线性插值,对每个n 值,分别画出插值函数及()f x 的图像.3. 下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图.(1)用这9个点作8次Lagrange 插值8()L x .(2)用分段线性插值程序求()h I x .从得到结果看在[0,64]上,哪个插值更精确;在区间[0,1]上,两种插值哪个更精确?三.实验内容1.(1)牛顿插值程序function y0=new(x,y,x0)n=length(x);m=length(y);if n~=merror('the lengths of x and y must be equal.');end%计算均差表YY=zeros(n,n);Y(:,1)=y';for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i))<epserror('the DATA is error .')endY(i+k,k+1)=(Y(i+k,k)-Y(i+k-1,k))./(x(i+k)-x(i));endend%计算牛顿插值公式y0=Y(1,1);for i=2:nz=1;for k=1:i-1z=z.*(x0-x(k));endy0=y0+Y(i,i).*z;end命令窗口输入命令>> x=[0.2:0.2:1.0];>> y=[0.98 0.92 0.81 0.64 0.38];>> x0=[0.2:0.08:1.0];>> P4=new(x,y,x0);(2)分段线性插值程序function y=divline(x0,y0,x)n=length(x0);m=length(x);for j=1:mfor i=1:n-1if (x(j)>=x0(i))&(x(j)<=x0(i+1))y(j)=(x(j)-x0(i+1))./(x0(i)-x0(i+1)).*y0(i)+(x(j)-x0(i))./(x0(i+1)-x0(i)).*y0(i+1);elsecontinue;endendend命令窗口输入命令>>x=[0.2:0.2:1.0];>> y=[0.98 0.92 0.81 0.64 0.38];>> x0=[0.2:0.08:1.0];>> I=divline(x,y,x0);实验结果(含实验图像)(1)牛顿插值画图命令及图像>> plot(x0,P4)(2)分段线性插值画图命令及图像>> plot(x0,I)2.function f=zuoye2_2(n)x0=linspace(-1,1,n+1);y0=1./(1+25*x0.^2);x=linspace(-1,1,100);y=1./(1+25*x.^2);y3=interp1(x0,y0,x,'spline');for k=1:length(x)im=ones(1,n+1);for i=1:n+1for j=1:n+1if x0(i)~=x0(j)im(i)=im(i)*(x(k)-x0(j))/(x0(i)-x0(j));endendendyp(k)=im*y0';endplot(x0,y0,'*',x,y,'b',x,y3,'-.',x,yp,'--');%画图legend('原插值点','原函数','三次样条插值','多项式插值')%加图例以zuoye2_2.m 保存文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 3
f [x , x , x ]
1 2 3
f [x , x , x , x ]
0 1 2 3
4
f (x )
k
f [x , x ]
3 4
f [x , x , x ]
2 3 4
f [x , x , x ]
1 2 3
f [x , x , x , x , x ]
0 1 2 3 4
则由差商表示的牛顿插值公式为Βιβλιοθήκη 牛顿插值法的流程图开始
输入 n 分别输入 n+1 个输入各节点
i=0
N
i<n Y j=i i=i+1
j<n? N Y j=j+1 Y i>1 N
yij
y i-1j - y i-1,j-1 x j x j i
yij
y i-1j - y i-1,j-1 x j x j 1
输入 yij i=1;t=1; N= y00
我们定义牛顿插值公式为
N ( x) f ( x ) f [ x , x ]( x x ) f [ x , x , x ]( x x )( x x )
n 0 0 1 0 0 1 2 0 1
f [ x , x , , x ]( x x )( x x ) ( x x )
所以,确定初值为 x0=1 二:不断迭代 算法: 第一步:将 f(x0)赋值给 x1 第二步:确定 x1-x0 的绝对值大小,若小于给定的误差值,则将 x1 当做方程的解,否则回到第一 步 编写计算机程序: clear f=inline('0.5*sin(x)+0.4'); x0=1; x1=f(x0); k=1; while abs(x1-x0)>=1.0e-6 x0=x1; x1=f(x0); k=k+1; fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1) end 显示结果如下: k=2,x0=0.820735492,x1=0.765823700 k=3,x0=0.765823700,x1=0.746565483 k=4,x0=0.746565483,x1=0.739560873 k=5,x0=0.739560873,x1=0.736981783
【实验结果】 最终试验的原方程 X=0.5*sin(x)+0.4 X= 0.735467157 【误差分析】 总共迭代十三次 迭代误差为 1.0*10^-6
在区间[-2,2]区间上的根为
【心得体会】 总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数 学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。但是,我现 在不这样想了,计算机其实非常傻,只会按照人类给它设定的步骤去走,不是计算机神奇,而是人 类非常神奇,竟然想到这样一个一个巧夺天工的巧妙方法。
k=6,x0=0.736981783,x1=0.736027993 k=7,x0=0.736027993,x1=0.735674699 k=8,x0=0.735674699,x1=0.735543758 k=9,x0=0.735543758,x1=0.735495216 k=10,x0=0.735495216,x1=0.735477220 k=11,x0=0.735477220,x1=0.735470548 k=12,x0=0.735470548,x1=0.735468074 k=13,x0=0.735468074,x1=0.735467157 >>。。 。 以下是程序运行截图:
【实验目的】 熟练掌握 MATLAB 掌握不动点迭代法的原理
【实验原理与数学模型】 对于方程 x=f(x),取一个初值 x0 代入 f(x),算得 x1=f(x0),再计算 x2=f(x1) ,。,这 。。 样依次类推得到一个迭代格式 Xk+1=f(Xk) , k=0,1,2,3… 从而得到一个序列 {Xk} ,k=0,1,2,3… 通常称该序列为迭代序列,f(x) 称为迭代函数, x0 称为迭代初值。 如果有迭代格式所产生的迭代序列 {Xk} 收敛,容易证明在收敛的情况下,迭代序列的极限 就是 x=f(x) 方程的实根。
【实验结果】 函数在 0.59 处的近似值为 0.5564 【误差分析】 误差为 dy = -7.2731e-013
【心得体会】 总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数 学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。但是,我现 在不这样想了,计算机其实非常傻,只会按照人类给它设定的步骤去走,不是计算机神奇,而是人 类非常神奇,竟然想到这样一个一个巧夺天工的巧妙方法。
【实验过程记录】 【编写 M 文件】 function [yhat,dy]=newtint(x,y,xhat) %牛顿插值法,xhat 为指定的 X 点,yhat 为相应的值,dy 为误 差 n=length(y); if length(x)~=n error('x and y ...') end c=y(:); for j=2:n %计算差商矩阵的对角元素 for i=n:-1:j c(i)=(c(i)-c(i-1))/(x(i)-x(i-j+1)); end end yhat=c(n); for i=(n-1):-1:1 yhat=yhat.*(xhat-x(i))+c(i); end if nargout>1 yn2=c(n-1); for i=n-2:-1:1 yn2=yn2.*(xhat-x(i))+c(i); end dy=yhat-yn2; if nargout>2 cout=c; end End
【实验具体内容】 运用不动点迭代法求解开普勒方程 X=0.5*sin(x)+0.4 在[-2,2]上的解
【实验过程记录】 一:确定初值 编写下列程序,画出函数 g=x 和 f=0.58*sin(x)+0.4,确定其交点大概位置 >> clear;clc; clf; >> f=inline('0.5*sin(x)+0.4'); >> g=inline('x') hold on >> fplot(g, [-2,2]) >> fplot(f, [-2,2]) >> hold off >> grid 输出结果如下所示:
由于牛顿插值法太过天马行空,太神奇,在此次试验中借鉴了网上最先进的算法,才把牛顿 插值法表示出来,哎,牛顿是个天才,那些把牛顿插值法编写出来的更是天才,在以上的算法中, 运用到了秦九韶算法, 并将原来复杂的矩阵计算化简为矩阵对角元素的计算,大大简化了计算的复 杂度。 作为把秦九韶算法抛到九霄云外的我,感到十分的汗颜。 对于人类的奇思妙想,我震惊不已,每每看到此处,总是心头没来由地发颤。 【教师评语】
实验报告内容: 一:不动点迭代法解方程 二:牛顿插值法的 MATLAB 实现
完成日期:2012 年 6 月 21 日星期四
数学实验报告一
日期:2012-6-21 班级 实验 名称 新能源 11 姓名 王志红 学号
2110310021
用不动点迭代法解方程
【问题背景描述】 天文学中有一类著名的方程——开普勒方程 x=q*sinx+a (0<q<1,a 为常数) 开普勒方程是用来确定行星在其运行轨道上的位置的。 如何求解该方程并使其解达到一定精度呢?
0 1 n 0 1 n 1
由此,我们可以得到一张差商表如下:
x x x x x x
k
f (x )
k
一阶差商
二阶差商
三阶差商
四阶差商
0
f (x )
k
1
f (x )
k
f [x , x ]
0 1
2
f (x )
k
f [x , x ]
1 2
f [x , x , x ]
0 1 2
3
f (x )
k
f [x , x ]
【编写主程序】 >> clear;clf >> x=0:0.1:5; >> y=sin(x); >> [yhat,dy]=newtint(x,y,0.59) 运行结果如下 yhat = 0.5564
dy = -7.2731e-013
>> 所以:函数在 0.59 处的近似值为 0.5564,误差为 dy = -7.2731e-013
N n ( x) f [ xn ] f [ xn , xn 1 ](x xn ) f [ xn , xn 1 , xn 2 ](x xn )(x xn 1 )(x xn 2 ) f [ xn , xn 1 ,, x0 ](x xn ) ( x x1 )
【教师评语】
数学实验报告之二
日期:2012-6-21 班级 实验 名称 新能源 11 姓名 牛顿插值法 王志红 学号
2110310021
【问题背景描述】 由于拉格朗日插值法涉及到复杂的矩阵运算, 牛顿提出一种不需要进行矩阵计算的多项式插值 方法,大大简化了运算复杂度。
【实验目的】 熟练掌握 MATLAB 掌握牛顿插值法的原理 【实验原理与数学模型】
t=t*(x- xi 1 )
输出 n 的值 N i<n+1 Y
N=N+ tyii
i=i+1
【实验具体内容】 已知某个函数在某些有限点的具体数值,要求该函数在指定点的近似值,并计算误差。 例如: 现在已知 F(X)=SIN(X)在 X=0:0.1:5 这 51 个点的具体数值,但是不知道其他点的值,现在 要求该函数在 X=0.59 的函数值,并计算误差
相关文档
最新文档