牛顿插值matlab程序
牛顿插值MATLAB算法
MATLAB程序设计期中作业——编程实现牛顿插值成员:刘川(P091712797)签名_____汤意(P091712817)签名_____王功贺(P091712799)签名_____班级:2009信息与计算科学学院:数学与计算机科学学院日期:2012年05月02日牛顿插值的算法描述及程序实现一:问题说明在我们的实际应用中,通常需要解决这样的问题,通过一些已知的点及其对应的值,去估算另外一些点的值,这些数据之间近似服从一定的规律,于是,这就引入了插值法的思想。
插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。
如果这特定函数是多项式,就称它为插值多项式。
利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。
二:算法分析newton 插值多项式的表达式如下:010011()()()()()n n n N x c c x x c x x x x x x -=+-+⋅⋅⋅+--⋅⋅⋅-其中每一项的系数c i 的表达式如下:12011010[,,,][,,,][,,,]i i i i i f x x x f x x x c f x x x x x -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=- 即为f (x)在点01,,,i x x x ⋅⋅⋅处的i 阶差商,([]()i i f x f x =,1,2,,i n =),由差商01[,,,]i f x x x ⋅⋅⋅的性质可知: ()01001[,,,]()i i i j j k j k k j f x x x f x x x ==≠⋅⋅⋅=-∑∏ 牛顿插值的程序实现方法:第一步:计算[][][][]001012012,,,,,,,n f x f x x f x x x f x x x x 、、、、。
牛顿插值matlab程序
牛顿插值matlab程序牛顿插值是一种多项式插值方法,其基本思想是利用分差表来构造一个一次到n 次多项式,从而逼近给定的数据点集合。
牛顿插值法有着计算简单,精度高,兼容性好等优点。
在Matlab中,牛顿插值法的实现非常简单。
接下来将介绍如何使用Matlab编写牛顿插值程序。
首先,我们需要明确牛顿插值法的基本思想,这可以用一个公式表示:f(x)≈Nn(x)=y0+C1(x−x0)+C2(x−x0)(x−x1)+⋯+Cn(x−x0)(x−x1)⋯(x−xn−1)其中y0即为给定数据点中的第一个点的纵坐标,x0到xn-1为已知的节点,Ci 表示节点x0到xi的差商,x为我们要求解的插值点。
据此,我们可以编写如下的Matlab代码实现牛顿插值:matlabfunction [result] = newton_interpolation(x, y, z)% x, y为已知的节点,z为插值点n = length(x);diff = zeros(n, n);diff(:, 1) = y';for j = 2:nfor i = j:ndiff(i, j) = (diff(i, j-1) - diff(i-1, j-1)) / (x(i) - x(i-j+1));endendresult = diff(n, n);for k = n-1:-1:1result = diff(k, k) + (z - x(k)) * result;end我们首先定义一个函数newton_interpolation,其输入为已知节点x和纵坐标y,以及插值点z。
接着,我们使用双重循环来计算分差表,并按照公式计算插值多项式的值。
最后,我们得到了插值点z处的函数值。
需要注意的是,在计算分差表时,我们需要根据已知的节点计算出所有的差商,并记录在diff中。
在计算插值点z处的函数值时,我们需要按照公式从n-1到0依次计算出多项式的各项系数。
matlab中cvx牛顿法
MATLAB中CVX牛顿法
在MATLAB中使用CVX来求解优化问题时,牛顿法通常作为内嵌的优化算法。
CVX是一个用于解决凸优化问题的MATLAB包,支持多种内嵌算法,包括牛顿法。
在使用CVX进行优化时,你需要先定义问题(包括变量、约束和目标函数),然后选择一个求解器来求解该问题。
牛顿法通常作为求解器选项之一,可以通过设置选项来实现。
以下是一个使用CVX进行优化问题求解并使用牛顿法的示例代码:
在上述代码中,我们首先导入了CVX包,然后定义了一个变量x,目标函数
为f,约束条件为x >= 0。
接下来,我们通过cvx_solver('牛顿法')设置了求解器为牛顿法。
最后,我们调用cvx_solve(f, x)来求解优化问题,并使用disp(x)输出结果。
需要注意的是,CVX支持多种内嵌算法,包括牛顿法、梯度下降法、次梯度下降法等。
选择哪种算法取决于问题的性质和要求。
对于一些特殊问题或特定应用场景,可能需要对算法进行调整或定制化设置。
matlab牛顿法代码举例
matlab牛顿法代码举例使用 MATLAB 实现牛顿法的示例代码。
牛顿法(也称为牛顿-拉弗森方法)是一种在实数和复数域上求解方程的数值方法。
该方法使用函数和其导数的值来寻找函数零点的近似值。
function [root, iter] = newtonMethod(func, dfunc, x0, tol, maxIter) "%"newtonMethod 使用牛顿法求解方程"%"输入:"%"func - 目标函数"%"dfunc - 目标函数的导数"%"x0 - 初始猜测值"%"tol - 容差,求解精度"%"maxIter - 最大迭代次数"%"输出:"%"root - 方程的根"%"iter - 迭代次数x = x0;for iter = 1:maxIterfx = func(x);dfx = dfunc(x);if abs(dfx) < epserror('导数太小,无法继续迭代');endxnew = x - fx/dfx;if abs(xnew - x) < tolroot = xnew;return;endx = xnew;enderror('超过最大迭代次数');end"%"示例: 求解 x^3 - x - 2 = 0func = @(x) x^3 - x - 2;dfunc = @(x) 3*x^2 - 1;x0 = 1; "%"初始猜测值tol = 1e-6; "%"容差maxIter = 1000; "%"最大迭代次数[root, iter] = newtonMethod(func, dfunc, x0, tol, maxIter);fprintf('根是: "%"f, 在 "%"d 次迭代后找到\n', root, iter);在这个代码中,newtonMethod 函数接收一个函数 func 及其导数 dfunc,一个初始猜测值,容差和最大迭代次数 maxIter。
牛顿插值法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实现完成日期:2012年6月21日星期四数学实验报告一日期:2012-6-21所以,确定初值为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.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 >>。
以下是程序运行截图:数学实验报告之二日期:2012-6-21【编写主程序】>> clear;clf>> x=0:0.1:5;>> y=sin(x);>> [yhat,dy]=newtint(x,y,0.59)运行结果如下yhat =0.5564dy =-7.2731e-013>>所以:函数在0.59处的近似值为0.5564,误差为dy = -7.2731e-013【实验结果】函数在0.59处的近似值为0.5564【误差分析】误差为dy = -7.2731e-013【心得体会】总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。
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 中,可以用fzero函数实现非线性方程的求解,用fminunc函数实现优化问题的求解。
以下是一个简单的牛顿法的MATLAB程序示例:function [x, fx, n] = newton(f, df, x0, tol, max_iter) % f: 目标函数% df: 目标函数的一阶导数% x0: 初值% tol: 精度要求% max_iter: 最大迭代次数n = 0;while n < max_iterfx = f(x0);dfx = df(x0);if abs(dfx) < 1e-9error('牛顿法失败:一阶导数过小');endx = x0 - fx / dfx;if abs(x - x0) < tolreturn;endx0 = x;n = n + 1;enderror('牛顿法失败:达到最大迭代次数');下面是一个例题,通过牛顿法求解方程sin(x) = x / 2:f = @(x) sin(x) - x / 2;df = @(x) cos(x) - 1 / 2;[x, fx, n] = newton(f, df, 1, 1e-9, 100);fprintf('解:%.16f,函数值:%.16f,迭代次数:%d', x, fx, n);运行结果为:解:0.0000000000000000,函数值:0.0000000000000000,迭代次数:4可以看到,牛顿法很快就找到了方程的一个根。
需要注意的是,牛顿法可能会失败,特别是在一阶导数过小或初值离根太远的情况下。
因此,使用时需要谨慎,并进行必要的检查和处理。
插值法(牛顿插值与拉格朗日插值法的M文件编写)
牛顿插值与拉格朗日插值ployfit 实现多项式回归matlab 的m 文件:Function yint=newtint(x,y,xx)%newtint:newton interpolating polynomial%yint=newtint(x,y,xx):uses an (n-1)-order newton%to determine a value of the dependent variable (yint)%at a given value of the independent variable,xx.%input:%x=independent variable%y=dependent variable%xx=value of independent variable at which Interpolation is calculated % output:% yint=interpolated value of dependent variable%compute the finite divided differences in the form of a%difference tablen=length(x);If length(y)~=n,error('x and y must be same length');Endb=zeros(n,n);%assign dependent variables to the first column of b.b(:,1)=y(:);%the(:)ensures that y is a column vector.For j=2:nFor i=1:n-j+1b(I,j)=(b(i+1,j-1)-b(I,j-1))/(x(i+j-1)-x(i));EndEnd% use the finite divided differences to interpolateXt=1;Yint=b(1,1);For j=1:n-1xt=xt*(xx-x(j));Yint=yint+b(1,j+1)*xt;End-------------------------------------------------------------------------------------------------------------拉格朗日插值方法m 文件的编写Function yint =lagrange(x,y,xx)%lagrange:lagrange interpolating polynomial%yint=lagrange(x,y,xx):uses an (n-1)-order% to determine a value of the dependent variable (yint) at% a given value of the independent variable ,xx.%input:% x=independent variable%y=dependent variable%xx=value of independent variable at which the interpolation is calculated %output:% yint=interpolated value of dependent variablen=length(x);If length(y)~=n,error('x and y must be same length');Ends=0;For i=1:nProduct=y(i);For j=1:nIf i~=jProduct =product*(xx-x(j))/(x(i)-x(j));End插值法2010年10月24日11:16EndEnds=s+product; EndYint=s;。
Newton插值的matlab实现
Newton插值的matlab实现成员:黄全P092314746 28%付吉P091712737 24%颜学俭P091712716 24%罗国庭P091712739 24%指导老师:刘华2012年5月2日目录Newton插值的matlab实现 ....................................................................................................... - 1 - 一过程整理...................................................................................................................... - 3 - Newton插值的基本原理 ............................................................................................ - 3 - 二流程图............................................................................................................................ - 4 - 三算法设计...................................................................................................................... - 6 -3.1、Newton插值的matlab实现 .............................................................................. - 6 -3.2、程序..................................................................................................................... - 6 -3.3、例题..................................................................................................................... - 6 -3.4、命令执行图...................................................................................................... - 7 - 四参考文献........................................................................................................................ - 7 -一 过程整理Newton 插值的基本原理假设有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 )确定。
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中牛顿插值法的程序:function [f, c] = newton_interpolation(x, y)% x:插值节点不同的x值,必须有n个元素。
% y:相应在每个节点的y值,必须有n个元素。
% 返回:拟合的多项式和的权重向量c% 我们创建一个表格,其中包含x和y值的第一行n = length(x);delta=zeros(n,n);% 先把第一列设置为y值:delta(:,1)=y';%接下来,我们将使用牛顿插值法来填写余下的每个列for j=2:nfor i=j:ndelta(i,j) = ( delta(i,j-1) - delta(i-1,j-1) )/( x(i) - x(i-j+1));endend% 配置 c 数组% 从差分表中得出k次递归系数矩阵,目标是多项式系数c = zeros(1,n);c(1)=delta(1,1);% 获取插值多项式(通过牛顿插值法)syms t;L = c(1);for j=2:nprod = 1;for i=1:j-1prod = prod * ( t - x(i) );endL = L + c(j) * prod;end% 转换L成一个函数y=L(x)f = matlabFunction(L);end现在,当我们调用这个函数并输入我们想要插值的节点和相应的y值,我们会得到拟合的多项式和传递插值节点的权重向量。
matlab插值法
MATLAB插值法引言MATLAB是一种高级编程语言和环境,特别适用于数值计算和数据可视化。
插值法是一种在给定有限的数据点的情况下,通过构造插值函数来估计其他数据点的方法。
在MATLAB中,有多种插值方法可供选择,例如拉格朗日插值、牛顿插值和样条插值等。
本文将详细介绍MATLAB中常用的插值方法及其应用。
一、拉格朗日插值法拉格朗日插值法是一种多项式插值方法,通过构造一个满足给定数据点要求的多项式函数,来估计其他数据点的函数值。
其基本思想是通过一个多项式函数对已知数据点进行拟合,以实现函数值的估计。
以下是使用MATLAB实现拉格朗日插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。
2.构造拉格朗日插值多项式。
拉格朗日插值多项式的表达式为:其中,为拉格朗日基函数,其表达式为:3.利用构造的拉格朗日插值多项式求解其他点的函数值。
二、牛顿插值法牛顿插值法是一种基于差商的插值方法,通过构造一个n次多项式函数来拟合已知数据点,并利用差商的性质来求解其他点的函数值。
使用MATLAB实现牛顿插值法的步骤如下:1.确定待插值的数据点集合,假设有n个数据点。
2.计算差商表。
差商表的计算公式为:3.构造牛顿插值多项式。
牛顿插值多项式的表达式为:4.利用构造的牛顿插值多项式求解其他点的函数值。
三、样条插值法样条插值法是一种通过多段低次多项式来逼近原始数据,以实现光滑插值的方法。
它在相邻数据点处保持一定的连续性,并通过边界条件来确定插值函数的特性。
以下是使用MATLAB实现样条插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。
2.根据数据点的个数确定样条插值的次数。
一般情况下,插值多项式的次数小于或等于n-1。
3.利用边界条件构造样条插值函数。
常用的边界条件有:自然边界、固定边界和周期边界。
4.利用MATLAB中的插值函数csape或interp1等进行样条插值。
5.利用样条插值函数求解其他点的函数值。
matlab牛顿插值法函数
matlab牛顿插值法函数
牛顿插值法是一种常用的数值计算方法,可以通过已知的离散数据点来估计未知的函数值。
该方法基于插值多项式的思想,利用已知数据点的信息来构建一个多项式,然后利用该多项式来估计其他点的函数值。
牛顿插值法的基本思想是利用差商的概念,通过递推的方式来计算插值多项式的系数。
具体来说,给定n个数据点(x0, y0), (x1, y1), ..., (xn, yn),我们可以得到一个n次插值多项式。
该多项式的形式为:
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[xi]表示差商,f[x0, x1]表示二阶差商,以此类推。
牛顿插值法的优点是计算简单,且对于多项式插值问题具有很高的精度。
然而,该方法也有一些局限性。
首先,插值多项式的次数随着数据点的增加而增加,可能导致多项式振荡或者过拟合。
此外,当数据点不均匀分布时,插值多项式的精度可能会受到影响。
为了解决这些问题,可以使用其他插值方法,如拉格朗日插值法或样条插值法。
这些方法在一定程度上克服了牛顿插值法的局限性,但也引入了一些新的问题。
因此,在实际应用中,需要根据具体问题的特点选择合适的插值方法。
牛顿插值法是一种常用的数值计算方法,可以用于估计未知函数值。
虽然该方法有一些局限性,但在适当的条件下,仍然可以获得较高的插值精度。
在实际应用中,需要综合考虑问题的特点和需求,选择合适的插值方法。
matlab牛顿插值法三次样条插值法
(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(i i i i n n k k k Newton f x x n x f x x i i n f x nx y i n Newton N x S x n x k y f x =-≤≤=+=-+====-+=题目:插值多项式和三次样条插值多项式。
已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max()n k n k n k n k n k n k kkN x S x k E N y N x E S y S x ==-=-和;、计算,;解释你所得到的结果。
算法组织:本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式)(x N n 和三次样条插值多项式()n S x 。
如此,则第三、四问则迎刃而解。
计算两种插值多项式的算法如下:一、求Newton 插值多项式)(x N n ,算法组织如下:Newton 插值多项式的表达式如下:)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N其中每一项的系数c i 的表达式如下:1102110),,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=-根据i c 以上公式,计算的步骤如下:⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅⋅⋅+⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅----),,,,(1),,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算二、求三次样条插值多项式)(x S n ,算法组织如下:所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i ii i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,, 因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i ii i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩, 则i M 满足如下n-1个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,方程中有n+1个未知量,则令0M 和n M 分别为零,则由上面的方程组可得到(11)i M i n ≤≤-的值,可得到整个区间上的三次样条插值多项式)(x S n 。
Matlab程序Newton插值函数
编写程序构造区间上的以等分结点为插值结点的Newton插值公式,假设结点数为(包括两个端点),给定相应的函数值,插值区间和等分的份数,该程序能快速计算出相应的插值公式。
以,为例计算其对应的插值公式,分别取不同的值并画出原函数的图像以及插值函数的图像,观察当增大时的逼近效果.解:Matlab计算程序为:clearclcf=input('请输入函数表达式:f(x)=','s');%测试公式为:1/(1+25*x^2)a=input('请输入区间左端值a:');%-1b=input('请输入区间右端值b:');%1n=input('请输入区间结点数(包括两个端点)n:');%取不同n值比较for i=1:nx(i)=a+(b-a)/(n-1)*(i-1);y(i,1)=eval(subs(f,'x','x(i)'));endfor j=1:n-1for k=j:n-1temp=y(k+1,j)-y(k,j);y(k+1,j+1)=temp/(x(k+1)-x(k+1-j));endc(j)=y(j,j);c(j+1)=y(j+1,j+1);endp=c(1);q=1;syms Xfor i=2:nq=q*(X-x(i-1));p=p+c(i)*q;endp=simple(p)for i=1:301t(i)=a+(b-a)/300*(i-1);Nn(i)=eval(subs(p,'X','t(i)'));endfor i=1:301h(i)=a+(b-a)/300*(i-1);yy(i)=eval(subs(f,'x','h(i)'));endplot(h,yy,'r')hold onplot(t,Nn,'b')hold ongrid onlegend('ÔʼÇúÏßf(x)','²åÖµÇúÏßN(x)')title('Å£¶Ù²åÖµ') xlabel('x') ylabel('f(x)')当n=5时,Newton插值公式为:p =(1250*X^4)/377 - (3225*X^2)/754 + 1 Matlab绘制的拟合图像为:由上图可见,n取较小值时,拟合误差较大当n=10时,Newton插值公式为:p = (84*X^9 + *X^8 - 112*X^7 - 4*X^6 + 136*X^5 + *X^4 + 44*X^3 - *X^2 + 4*X + 9741593257)/2706126848Matlab绘制的拟合图像为:由上图可见,随着n的增加,曲线拟合情况变好,且曲线两端拟合情况不如中间好。