MATLAB 牛顿插值法例题与程序
MAAB牛顿插值法例题与程序
![MAAB牛顿插值法例题与程序](https://img.taocdn.com/s3/m/33d09880bb68a98271fefab2.png)
题目一:多项式插值某气象观测站在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(迭代法_牛顿插值)](https://img.taocdn.com/s3/m/b32a3729700abb68a982fbfb.png)
实验报告内容:一:不动点迭代法解方程二:牛顿插值法的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程序例题](https://img.taocdn.com/s3/m/0ba1c0664a35eefdc8d376eeaeaad1f3469311e2.png)
牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。
这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。
牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。
在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处的插值结果进行计算。
插值法-第二次程序题
![插值法-第二次程序题](https://img.taocdn.com/s3/m/3ffe9706312b3169a451a487.png)
插值法题目1:对函数在区间[-1,1]作下列插值逼近,并和的图像进行比较,并对结果进行分析。
(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton 插值多项式的图像。
(2)用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。
(4)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的三次自然样条插值函数的图像。
程序及分析:(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton 插值多项式的图像。
Matlab 程序如下:%计算均差x=[-1::1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t)end%构造插值多项式f=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%作图a=[-1::1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i));endfx=subs(f,z,a);subplot(2,1,1);plot(a,b,'k',a,fx,'r');c=[::];n=length(c);for i=1:nd(i)=1/(1+25*c(i)*c(i));endfx=subs(f,z,c);subplot(2,1,2);plot(c,d,'k',c,fx,'r');结果与分析:由下图可以看出,在区间[,]上,插值多项式可以很好的逼近被插值函数。
牛顿法matlab程序及例题
![牛顿法matlab程序及例题](https://img.taocdn.com/s3/m/17ae0b184a73f242336c1eb91a37f111f0850d52.png)
牛顿法matlab程序及例题牛顿法是一种求解非线性方程组的常用方法,它的基本思想是通过迭代逐步逼近方程组的根。
在matlab中,可以通过编写相应的程序来实现牛顿法,并且可以通过一些例题来深入理解其应用。
下面是一份牛顿法的matlab程序:function [x, fval, exitflag, output] = mynewton(fun, x0, tol, maxiter)% fun:非线性方程组的函数句柄% x0:初始点% tol:允许误差% maxiter:最大迭代次数x = x0;fval = feval(fun, x);iter = 0;output = [];while norm(fval) > tol && iter < maxiteriter = iter + 1;J = myjacobian(fun, x);dx = - J fval;x = x + dx;fval = feval(fun, x);output = [output; [x', norm(fval)]];endif norm(fval) <= tolexitflag = 0; % 成功求解elseexitflag = 1; % 未能求解end% 计算雅可比矩阵function J = myjacobian(fun, x)n = length(x);fval = feval(fun, x);J = zeros(n);h = sqrt(eps); % 微小的增量for j = 1:nxj = x(j);x(j) = xj + h;fval1 = feval(fun, x);x(j) = xj - h;fval2 = feval(fun, x);x(j) = xj;J(:, j) = (fval1 - fval2) / (2 * h);end接下来,我们可以通过一个例题来演示牛顿法的应用。
matlab牛顿插值法三次样条插值法
![matlab牛顿插值法三次样条插值法](https://img.taocdn.com/s3/m/1172f91384868762caaed5a2.png)
(){}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 =-≤≤=+=-+====-+=L L 题目:插值多项式和三次样条插值多项式。
已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (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 ==-=-L 和;、计算,;解释你所得到的结果。
算法组织:本题在算法上需要解决的问题主要是:求出第二问中的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程序及例题
![牛顿法matlab程序及例题](https://img.taocdn.com/s3/m/a782e64930b765ce0508763231126edb6f1a7692.png)
牛顿法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可以看到,牛顿法很快就找到了方程的一个根。
需要注意的是,牛顿法可能会失败,特别是在一阶导数过小或初值离根太远的情况下。
因此,使用时需要谨慎,并进行必要的检查和处理。
牛顿法matlab程序及例题
![牛顿法matlab程序及例题](https://img.taocdn.com/s3/m/25799cdb6394dd88d0d233d4b14e852458fb398b.png)
牛顿法matlab程序及例题牛顿法是一种求解非线性方程的优秀方法,其基本思想是利用切线逼近非线性方程的根,逐步逼近准确解。
下面我们介绍牛顿法的matlab程序及例题。
【程序】function [x_iter,k]=newton(f,df,x0,tol,maxit)%牛顿法%输入:f-目标函数,df-目标函数的导函数,x0-初始值,tol-误差限,maxit-最大迭代次数%输出:x_iter-迭代结果,k-迭代次数k=0;x_iter=x0;err=tol+1;while(err>tol && k<maxit)x=x_iter;x_iter=x-f(x)/df(x);err=abs(x_iter-x);k=k+1;endif(k==maxit)fprintf('未收敛');elsefprintf('迭代次数:%d',k);end【例题】example:求解非线性方程f(x)=x^3-5x^2+3x+7=0,初始值为x0=2,精度为1e-6。
解法:首先求导得df(x)=3x^2-10x+3,然后代入程序:>> f=@(x)x^3-5*x^2+3*x+7;>> df=@(x)3*x^2-10*x+3;>> [x_iter,k]=newton(f,df,2,1e-6,100);>> x_iterans =4.3793>> kk =5故该非线性方程的根为x=4.3793,迭代次数为5次。
【总结】通过以上例题,我们可以发现牛顿法是一种十分有效的求解非线性方程的方法,其程序简洁高效,对于复杂的非线性方程求解也能得到较好的结果。
因此在实际应用中,我们可以采用牛顿法来求解非线性方程,提高计算效率和精度。
牛顿插值法matlab程序
![牛顿插值法matlab程序](https://img.taocdn.com/s3/m/2cc580cf58fb770bf68a5573.png)
《计算方法》数值实验陈述之宇文皓月创作班级090712 学号09071235 姓名金志彬实验室3-128 设备编号D12 日期2012.06.05 实验题目编写牛顿插值方法的MATLAB主程序并验算P183.111、实验目的:通过编程实现牛顿插值方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
2、实验要求:(1)认真分析课题要求,复习相关理论知识,选择适当的解决方案;(2)上机实验程序,做好上机前的准备工作;(3)调试程序,记录计算结果;(4)分析和解释计算结果;(5)依照要求书写实验陈述。
3、实验内容:(1)算法原理或计算公式式(1-2)为插值余项,由插值多项式唯一性可知,它与书本式(5.1.19)是等价的,事实上,利用均差与导数关系式可由式(1-2)推出书本式(5.1.19)。
但式(1-2)更有一般性,它对f是由离散点给出的情形或f导数不存在时均适用。
(21)输入:n x(本文取x0,x1两个函数点);3(3)源程序function f=Newton(x,y,x0,x1)syms t;if(length(x)==length(y))n=length(x);c(1:n)=0.0;elsedisp('x和y的维数不相等!');return;endf=y(1);y1=0;l =1;for(i=1:n-1)for(j=i+1:n)y1(j)=(y(j)-y(i))/(x(j)-x(i));endc(i)=y1(i+1);l=l*(t-x(i));f=f+c(i)*l;y=y1;endf=simplify(f);g=subs(f,'t',x0)g1=subs(f,'t',x1)A=zeros(n,n-1);A=[y',A];for j=2:nfor i=j:nA(i,j)=(A(i,j-1)-A(i-1,j-1))/(x(i)-x(i+1-j));endenddisp('差商表为');disp(A);(4)运行结果>> x=[0 1 2 3];>> y=[1 2 17 64];>> x0=0.5;>> x1=2.5;>> f=Newton(x,y,x0,x1)g =0.8750g1 =35.3750差商表为0 0 0 01.0000 1.0000 0 07.0000 6.0000 2.5000 03.0000 -4.0000 -5.0000 -2.5000f =1-2*t^2+3*t^34、实验小结体会:1)通过本次实验让我从实践验证了理论-------插值多项式的基本思想;2)牛顿插值法建立过程中用到了插商计算,这是有别于拉格朗日插值法的一部分,在已知点数较少的情况下用牛顿插值法较为准确;3)通过编程,加深了matlab的熟悉特别是一些函数语句,进一步体会到了函数迫近的思想。
Newton插值 matlab
![Newton插值 matlab](https://img.taocdn.com/s3/m/36357a1ae87101f69e31958b.png)
1.3 0.9636
1.5 0.9975
1.7 0.9917
主程序: x=[0.7:0.2:1.7]; y=[0.6442 0.7833 0.8912 0.9636 0.9975 0.9917]; xi=0.74, yi=Newton_int(x,y,xi) 运行得 xi =0.7400 yi = 0.6743 四、实验题目 已知 f ( x) ln x, [a, b] [1, 2], 取 h 0.1, xi 1 ih, i 0,1, 计算 ln1.54 及 ln1.98 的近似值。
function yi=Newton_int(x,y,xi) % Newton 插值多项式; % x为向量,全部的插值节点,按行输入; % y为向量,插值节点处的函数值,按行输入; % xi为被插值点向量; % yi为要求的被插值点函数值向量; n=length(x); Y=zeros(n); Y(:,1)=y';%0阶差商 for k=1:n-1 for i=1:n-k Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));%k阶差商 end end %Y %输出差商表 % 以下计算Newton插值公式N(xi) yi=0; for i=1:n z=1; for k=1:i-1 z=z.*(xi-x(k)); end yi=yi+Y(1,i)*z; end %n为已知插值节点个数; % 以下计算差商表Y
,10. 用 Newton 插值
实验 10 Newton 插值
一 实验名称:Newton 插值 二 实验目的:学会用 Newton 插值计算函数值。 三 实验内容: 例 1、设函数 f(x)满足 X 0.7 0.9 1.1 Y 0.6642 0.7833 0.8912 利用六点 Newton 插值多项式计算 f(0.74). 解:先建立函数文件
实验一牛顿插值法
![实验一牛顿插值法](https://img.taocdn.com/s3/m/697a54176c175f0e7cd137fb.png)
实验一 牛顿K 次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。
2、 培养编程与上机调试能力。
二、牛顿插值法基本思路与计算步骤:给定插值点序列())(,i i x f x ,,,1,0,n i =。
构造牛顿插值多项式)(u N n 。
输入要计算的函数点,x 并计算)(x N n 的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面)(x N n 的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。
为 的 一阶均差。
为的 k 阶均差。
均差表:1. 输入n 值及())(,i i x f x ,,,1,0,n i =;要计算的函数点x 。
2. 对给定的,x 由[][][]00010101201101()()(),()(),,()()(),,n n n N x f x x x f x x x x x x f x x x x x x x x x f x x x -=+-+--++---计算()n N x 的值。
3.输出()n N x 。
三:程序流程图:四:程序清单:function[c, d]=newpoly(x, y)%牛顿插值的MA TLAB实现%这里x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。
%c为所求的牛顿插值多项式的系数构成的向量。
n=length(x);%取x的个数。
d=zeros(n, n);%构造nXn的空数组。
d(: , 1)=y';f or j=2 : nfor k=j : nd(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1));ende ndc =d(n, n);for k=(n-1) : - 1 : 1c =conv(c, poly(x(k)));% conv求积,poly(x)将该多项式的系数赋给向量。
m=length(c);c(m)=c(m)+d(k, k);end五、测试数据与结果:测试数据:(第三章习题第三题第2题)01234Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144 建立一个主程序np.mclcclearnewpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, -0.223144]) 计算结果如下:ans =-0.3096 2.6083 -5.4861 5.6921 -2.4744由此看出所求的牛顿多项式为:P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744P(0.53)= -0.6347。
matlab_牛顿插值法_三次样条插值法
![matlab_牛顿插值法_三次样条插值法](https://img.taocdn.com/s3/m/09a209b4c77da26925c5b074.png)
(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(i i ii n n k k k Newton f x x n x f x x i i n f x nxy 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 i i 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牛顿插值法程序
![matlab牛顿插值法程序](https://img.taocdn.com/s3/m/2f5f4afe48649b6648d7c1c708a1284ac9500558.png)
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综合程序](https://img.taocdn.com/s3/m/f932cf23650e52ea551898b5.png)
6.3.5 牛顿插值法的MATLAB 综合程序求牛顿插值多项式、差商、插值及其误差估计的MATLAB 主程序function [y,R,A,C,L]=newdscg(X,Y,x,M)n=length(X); m=length(x);for t=1:mz=x(t); A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0; q1=1.0; c1=1.0;for j=2:nfor i=j:nA(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));endq1=abs(q1*(z-X(j-1)));c1=c1*j;endC=A(n,n);q1=abs(q1*(z-X(n)));for k=(n-1):-1:1C=conv(C,poly(X(k)));d=length(C);C(d)=C(d)+A(k,k);endy(k)= polyval(C, z);endR=M*q1/c1;L(k,:)=poly2sym(C);例6.3.6 给出节点数据00.27)00.4(=-f ,00.1)00.0(=f ,00.2)00.1(=f ,00.17)00.2(=f ,作三阶牛顿插值多项式,计算)345.2(-f ,并估计其误差.解 首先将名为newdscg.m 的程序保存为M 文件,然后在MATLAB 工作窗口输入程序>> syms M,X=[-4,0,1,2]; Y =[27,1,2,17]; x=-2.345;[y,R,A,C,P]=newdscg(X,Y,x,M)运行后输出插值y )345.2(-≈f 及其误差限公式R ,三阶牛顿插值多项式P 及其系数向量C ,差商的矩阵A 如下y =22.3211R =1323077530165133/562949953421312*M (即R =2.3503*M )A=27.0000 0 0 01.0000 -6.5000 0 02.0000 1.0000 1.5000 017.0000 15.0000 7.0000 0.9167C =0.9167 4.2500 -4.1667 1.0000P =11/12*x^3+17/4*x^2-25/6*x+1欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
牛顿插值matlab实现
![牛顿插值matlab实现](https://img.taocdn.com/s3/m/16935851571252d380eb6294dd88d0d233d43ce7.png)
牛顿插值matlab实现
牛顿插值是一种利用已知数据点构造插值多项式的方法。
在Matlab中,可以使用Newton插值函数`interp1()`来实现。
下面是一个示例代码,展示了如何使用Matlab实现牛顿插值:
```matlab
% 已知数据点
x = [1, 2, 3, 4, 5];
y = [4, 3, 2, 1, 5];
% 牛顿插值
xi = 2.5; % 待插值的点
yi = interp1(x, y, xi, 'nearest'); % 最近邻插值
disp(['插值点 (', num2str(xi), ',', num2str(yi), ')']);
% 绘制插值多项式和原始数据点
xx = linspace(min(x), max(x), 100); % 插值点
yy = interp1(x, y, xx, 'nearest'); % 插值多项式
plot(x, y, 'o', xx, yy, '-')
legend('原始数据', '插值多项式');
```
在上面的代码中,我们首先定义了已知的数据点x和y。
然后
使用`interp1()`函数进行插值,传入待插值点xi,选择插值方
法为最近邻插值。
最后,我们可以通过绘制插值多项式和原始数据点来可视化结果。
请注意,牛顿插值法还有其他插值方法,如线性插值、多项式插值等,在`interp1()`函数的第四个参数中可以选择合适的方法。
matlab中的牛顿插值
![matlab中的牛顿插值](https://img.taocdn.com/s3/m/0bd419bbfbb069dc5022aaea998fcc22bcd143aa.png)
matlab中的牛顿插值在MATLAB中,你可以使用牛顿插值方法来生成一个多项式,用于逼近一组离散数据点。
牛顿插值多项式通常用于曲线拟合和数据插值的任务。
以下是在MATLAB中执行牛顿插值的步骤:1.准备数据:首先,准备你的离散数据点,包括x值和相应的y值。
这些数据点将用于生成插值多项式。
2.计算差商:使用牛顿插值的关键是计算差商(divided differences)。
差商用于构建插值多项式的系数。
在MATLAB中,你可以使用`divdif`函数来计算差商。
```matlabx=[x1,x2,x3,...];%x值y=[y1,y2,y3,...];%相应的y值coefficients=divdif(x,y);```3.构建插值多项式:一旦你计算出差商,你可以使用这些差商来构建牛顿插值多项式。
可以使用`poly2sym`函数将差商转化为多项式对象。
```matlabp=poly2sym(coefficients,x);```4.绘制插值曲线:你可以使用插值多项式对象`p`来绘制插值曲线,以查看如何逼近原始数据。
```matlabx_interp=linspace(min(x),max(x),100);%用于插值的新x值y_interp=subs(p,x_interp);%计算插值多项式的y值plot(x,y,'o',x_interp,y_interp);```这些步骤将帮助你在MATLAB中执行牛顿插值,以生成一个多项式,用于逼近给定的离散数据点。
这个插值多项式可以用于估算原始数据点之间的值,以获得更平滑的曲线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一:多项式插值
某气象观测站在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)可以用差商表示。
一般有
f
k =α[k 10x x x ⋯⋯,] (k=0,1,2,……,n )
(4) 把(4)代入(1)得到满足插值条件N )()
(i i n x f x =(i=0,1,2,……n)的n 次Newton 插值多项式
N n (x)=f(0x )+f[10x x ,](1x -x )+f[210x x x ,,](1x -x )(2x -x )+……+f[n 10x x x ⋯⋯,](1x -x )(2x -x )…(1-n x -x )、
其中插值余项为: )()!
()()()()(x 1n f x N -x f x R 1n 1n n +++==ωξ ξ介于k 10x x x ⋯⋯,之间。
三、程序设计
function [y,A,C,L]=newdscg(X,Y,x,M)
% y 为对应x 的值,A 为差商表,C 为多项式系数,L 为多项式
% X 为给定节点,Y 为节点值,x 为待求节点
n=length(X); m=length(x); % n 为X 的长度
for t=1:m
z=x(t); A=zeros(n,n);A(:,1)=Y';
s=0、0; p=1、0; q1=1、0; c1=1、0;
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));
end
q1=abs(q1*(z-X(j-1)));c1=c1*j;
end
C=A(n,n);q1=abs(q1*(z-X(n)));
for k=(n-1):-1:1
C=conv(C,poly(X(k)));
d=length(C);C(d)=C(d)+A(k,k);
end
y(k)= polyval(C, z); %输出y 值
end
L(k,:)=poly2sym(C); %输出多项式
>> syms M,X=[1,3,5,7];Y=[22、5,24、4,25、2,24、8];x=10;
>> [y,A,C,L]=newdscg(X,Y,x,M)
y =
21、7313
A =
22、5000 0 0 0
24、4000 0、9500 0 0
25、2000 0、4000 -0、1375 0
24、8000 -0、2000 -0、1500 -0、0021
C =
-0、0021 -0、1187 1、4521 21、1688
L =
- x^3/480 - (19*x^2)/160 + (697*x)/480 + 3387/160
四、结果分析与讨论
对于不超过三次的插值多项式,x如果选取1,3,5,7这三个点能够得到较好的三次插值多项式L=-0、0021x^3-0、1187x^2+1、4521x+21、1688。
当x=10时,也即9点30分时的温度为21、7317度,结果分析知此值应就是偏小的。
对于选取不同的插值节点,能够得到不同的插值多项式,误差也不尽相同。
五、完成题目的体会与收获
对于牛顿插值法有了更深的了解,合理选择插值节点很重要。
加深了对其原理的认识,学会了牛顿插值法的matlab编程,对matlab计算方法更加熟悉。
通过完成这道题使我受益匪浅。