牛顿插值法的MATLAB综合程序

合集下载

数值计算实验牛顿前插和后插插值

数值计算实验牛顿前插和后插插值

数值计算实验二姓名:方小开学号:20060810202 班级:计科0602一. 实验目的:1、差分的matlab实现;2、Newton插值的matlab实现;二. 实验原理:MATLAB在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路系统,系统动力学,信号与图像处理,控制理论分析和系统设计,过程控制,建模和仿真,通信系统,等有广泛的应用。

它具有功能强大,界面友好,语言自然即开放性等特点。

三.试验环境MATLAB7.0四. 试验过程及现象:1、牛顿插值公式:把下面的matlab程序在matlab中建立M-file文件并保存;function [d,v1]=newtonjz(x,y,v) %d 插商表 v是要插入x v1是插入的y值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));endendw=1;v1=d(1,1);for i=2:nw=w*(v-x(i-1));v1=v1+d(i,i)*w;end分别给x,y赋初值,并调用Newton插值函数得到结果如下:x=[0.40,0.55,0.65,0.80,0.90,1.05];y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382];[z,xy]=newtonjz(x,y,0.596);z =0.4108 0 0 0 0 00.5782 1.1160 0 0 0 00.6967 1.1860 0.2800 0 0 00.8881 1.2757 0.3589 0.1973 0 01.0265 1.3841 0.4335 0.2130 0.0312 01.2538 1.5153 0.5249 0.2287 0.0314 0.0003xy =0.63192Newton前插公式:把Newton前插公式的matlab程序写在matlab中建立M-file文件并保存;function [d,v1]=newtonBefore(x,y,t)n=length(x);d=zeros(n,n);d(:,1)=y';for j=2:nfor i=1:n-j+1d(i,j)=(d(i+1,j-1)-d(i,j-1));endendw=1;m=1;v1=d(1,1);for i=2:nw=w*(t-i+2);m=m*(i-1);v1=v1+d(1,i)*(w/m);end分别给x,y赋初值,并调用Newton前插函数得到结果如下;x=[1 1.05 1.10 1.15 1.20 1.25 1.30];y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];>> [z,qc]=newtonBefore(x,y,0.2);qc =1.004992263808003、Newton后插公式:把Newton后插公式的matlab程序写在matlab中建立M-file文件并保存;function [d,v1]=newtonAfter(x,y,t)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));endendw=1;m=1;v1=d(1,1);for i=2:nw=w*(t+i-2);m=m*(i-1);v1=v1+d(n,i)*(w/m);end分别给x,y赋初值,并调用Newton后插函数得到结果如下;x=[1 1.05 1.10 1.15 1.20 1.25 1.30];y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];>> [z,hc]=newtonAfter(x,y,-0.4);hc=1.13136982835200五.遇到的问题在调试的过程中也遇到了一些小小的问题,如输出的结果只显示4位有效数字,结果的精度太低了,不能满足要求,因此在matlab中把数据的格式从short型改成了long型,这样就大大的提高了结果的精确度,减少了误差。

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代码示例。

1.牛顿差商插值:牛顿差商插值是一种基于多项式插值的方法,其中差商是一个连续性的差分商。

该方法的优势在于可以快速计算多项式的系数。

以下是MATLAB代码示例:```matlabfunction [coeff] = newton_interpolation(x, y)n = length(x);F = zeros(n, 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));endendcoeff = F(n, :);end```该代码中,输入参数x和y分别表示已知数据点的x坐标和y坐标,返回值coeff表示插值多项式的系数。

2.插值误差分析:插值误差是指插值函数与原始函数之间的差异。

一般来说,通过增加插值节点的数量或使用更高次的插值多项式可以减小插值误差。

以下是MATLAB代码示例:```matlabfunction [error] = interpolation_error(x, y, x_eval)n = length(x);p = polyfit(x, y, n-1);y_eval = polyval(p, x_eval);f_eval = sin(pi*x_eval);error = abs(f_eval - y_eval);end```该代码中,输入参数x和y分别表示已知数据点的x坐标和y坐标,x_eval表示插值节点的x坐标,error表示插值误差。

3.龙格现象:龙格现象是插值多项式在等距插值节点上错误增长的现象。

牛顿法Matlab程序

牛顿法Matlab程序

1
Such approximation is given by, x1 = xo - f(xo)/f'(xo). The Newton-Raphson method consists in obtaining improved values of the approximate root through the recurrent application of equation above. For example, the second and third approximations to that root will be given by and respectively. This iterative procedure can be generalized by writing the following equation, where i represents the iteration number: xi+1 = xi - f(xi)/f'(xi). After each iteration the program should check to see if the convergence condition, namely, |f(x i+1)|<ε, is satisfied. The figure below illustrates the way in which the solution is found by using the NewtonRaphson method. Notice that the equation f(x) = 0 ≈ f(xo)+f'(xo)(x1 -xo) represents a straight line tangent to the curve y = f(x) at x = xo. This line intersects the x-axis (i.e., y = f(x) = 0) at the point x1 as given by x1 = xo - f(xo)/f'(xo). At that point we can construct another straight line tangent to y = f(x) whose intersection with the x-axis is the new approximation to the root of f(x) = 0, namely, x = x2. Proceeding with the iteration we can see that the intersection of consecutive tangent lines with the x-axis approaches the actual root relatively fast. x2 = x1 - f(x1)/f'(x1), x3= x2 - f(x2)/f'(x2),

拉格朗日插值、牛顿插值的matlab代码

拉格朗日插值、牛顿插值的matlab代码

实验五多项式插值逼近信息与计算科学金融崔振威201002034031一、实验目的:拉格朗日插值和牛顿插值的数值实现二、实验内容:p171.1、p178.1、龙格现象数值实现三、实验要求:1、根据所给题目构造相应的插值多项式,2、编程实现两类插值多项式的计算3、试分析多项式插值造成龙格现象的原因主程序1、拉格朗日function [c,l]=lagran(x,y)%c为多项式函数输出的系数%l为矩阵的系数多项式%x为横坐标上的坐标向量%y为纵坐标上的坐标向量w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1v=1;for j=1:n+1if k~=jv=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算endendl(k,:)=v;endc=y*l;牛顿插值多项式主程序function [p2,z]=newTon(x,y,t)%输入参数中x,y为元素个数相等的向量%t为插入的定点%p2为所求得的牛顿插值多项式%z为利用多项式所得的t的函数值。

n=length(x);chaS(1)=y(1);for i=2:nx1=x;y1=y;x1(i+1:n)=[];y1(i+1:n)=[];n1=length(x1);s1=0;for j=1:n1t1=1;for k=1:n1if k==j %如果相等则跳出循环continue;elset1=t1*(x1(j)-x1(k));endends1=s1+y1(j)/t1;endchaS(i)=s1;endb(1,:)=[zeros(1,n-1) chaS(1)];cl=cell(1,n-1); %cell定义了一个矩阵for i=2:nu1=1;for j=1:i-1u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法cl{i-1}=u1;endcl{i-1}=chaS(i)*cl{i-1};b(i,:)=[zeros(1,n-i),cl{i-1}];endp2=b(1,:);for j=2:np2=p2+b(j,:);endif length(t)==1rm=0;for i=1:nrm=rm+p2(i)*t^(n-i);endz=rm;elsek1=length(t);rm=zeros(1,k1);for j=1:k1for i=1:nrm(j)=rm(j)+p2(i)*t(j)^(n-i);endz=rm;endendplot(t,z,'y',x,y,'*r') %输出牛顿插值多项式的函数图p171.1(a)、f(x)=e x解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[exp(0) exp(0.2) exp(0.4) exp(0.6) exp(0.8) exp(1)]y =1.0000 1.2214 1.4918 1.82212.2255 2.7183>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0139 0.0349 0.1704 0.4991 1.0001 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0139 a1=0.0349 a2=0.1704 a3=0.4991 a4=1.0001 a5=1.0000(b)、f(x)=sin(x)解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[sin(0) sin(0.2) sin(0.4) sin(0.6) sin(0.8) sin(1)];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0073 0.0016 -0.1676 0.0002 1.0000 0l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0073 a1=0.0016 a2=-0.1676 a3=0.0002 a4=1.0000 a5=0(c)、f(x)=(x+1)x+1解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[1 1.2^1.2 1.4^1.4 1.6^1.6 1.8^1.8 2^2];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.3945 -0.0717 0.7304 0.9415 1.0052 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.3945 a1=-0.0717 a2=0.7304 a3=0.9415 a4=1.0052 a5=1.0000P178.12、a0=5 a1=-2 a2=0.5 a3=-0.1 a4=0.003x0=0 x1=1 x2=2 x3=3 c=2.5解:在matlab窗口中输入:>> x=[5 -2 0.5 -0.1];>> y=[0 1 2 3];>> t=0:0.1:2.5;>> [u,v]=newTon(x,y,t)可得出输出结果:u =0.1896 -0.7843 -1.3928 2.8688v =2.8688 2.7218 2.5603 2.3855 2.1983 2.0000 1.7917 1.5745 1.3497 1.1182 0.8813 0.6401 0.3957 0.1493 -0.0980 -0.3451 -0.5908 -0.8340 -1.0735 -1.3082 -1.5370 -1.7588 -1.9723 -2.1765 -2.3702 -2.5523由此可以求出牛顿多项式为:f(x)=0.1896x^3--0.7843^x2--1.3928x+2.8688输出的图为:结果分析:利用牛顿插值多项式的函数,通过调用函数可以求得牛顿多项式与给定的点的值,并通过matlab做出函数图像。

牛顿插值法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处的插值结果进行计算。

Langrage和Newton插值法的matlab实现

Langrage和Newton插值法的matlab实现

仅供参考1.已知数据如下:(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。

(1.1)langrage插值法编程实现syms xx0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];for i=1:5a=1;for j=1:5if j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:5if k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:5L=L+y0(p)*A(p);endLL =-25/48*x^4+5/6*x^3-53/48*x^2+23/120*x+49/50(1.2)Newton插值程序实现clear allclcsyms xx0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];for k=1:5for i=1:ka=1;b=0;for j=1:kif j~=ia=a*(x0(i)-x0(j));endendb=b+y0(i)/a;endA(k)=b;endB=[1,(x-x0(1)),(x-x0(1))*(x-x0(2)),(x-x0(1))*(x-x0(2))*(x-x0(3)),(x-x 0(1))*(x-x0(2))*(x-x0(3))*(x-x0(4))];L1=A.*B;l=0;for m=1:5l=l+L1(m);endL=expand(l)L =61/100+13/30*x+383/48*x^2-155/24*x^3+475/48*x^4(2)画图x0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];subplot(1,2,1);plot(x0(1),y0(1),'+r',x0(2),y0(2),'+r',x0(3),y0(3),'+r',x0(4),y0(4),' +r',x0(5),y0(5),'+r')x=0:0.05:1;y=-25/48.*x.^4+5/6.*x.^3-53/48.*x.^2+23/120.*x+49/50;subplot(1,2,2);plot(x,y)2.给定函数21(),[1,1]125f x x x ,利用上题编好的Langrage 插值程序(或Newton 插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数()f x 的图形,以验证Runge 现象、分析插值多项式的收敛性。

newton插值法matlab

newton插值法matlab

newton插值法matlab
Newton插值法是一种用于求解多项式插值的方法,在MATLAB中非常常见。

它基于离散数据点集来构造出一个插值多项式,该多项式将通过这些点并可以用于预测在数据点之间的任何值。

具体步骤如下:
1. 根据给定的数据点集,构造出一个差商表。

2. 计算出插值多项式的系数。

3. 使用计算出的插值多项式来预测在数据点之间的任何值。

在MATLAB中,可以使用polyfit和polyval函数来实现该方法。

具体实现步骤如下:
1. 定义x和y向量,分别表示数据点的x和y坐标。

2. 使用polyfit函数计算插值多项式的系数。

3. 使用polyval函数将插值多项式应用于一系列x值,以预测
其对应的y值。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档