MATLAB实现拉格朗日插值

合集下载

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的matlab实现

拉格朗日插值法在实践中的应 用
在数值分析中的应用
单击此处添加标题
插值法:拉格朗日插值法是数值分析中常用的插值方法之一,具有简单易 行、计算量小等优点。
单击此处添加标题
数据拟合:拉格朗日插值法可以用于数据拟合,通过对已知数据进行插值, 得到未知数据的近似值。
单击此处添加标题
数值微积分:拉格朗日插值法在数值微积分中也有广泛应用,例如在求解 函数的导数、积分等运算时,可以利用拉格朗日插值法进行近似计算。
龙格现象
龙格现象的定义
定义:当插值多项式的阶数过高时, 插值结果可能变得不可预测或出现 剧烈振荡
解决方法:在实际应用中,应避免 使用过高的插值多项式阶数,而应 选择合适的阶数以保证插值结果的 稳定性和准确性
添加标题
添加标题
添加标题
添加标题
原因:由于高阶插值多项式对数据 点的敏感性增强,导致插值结果不 稳定
拉格朗日插值龙格现象的 Matlab实现
汇报人:XX
单击输入目录标题 拉格朗日插值法 龙格现象 拉格朗日插值法在Matlab中的实现 拉格朗日插值法的龙格现象分析 拉格朗日插值法在实践中的应用
添加章节标题
拉格朗日插值法
插值法的定义
插值法是一种数学方法,通过已知的离散数据点,构造一个多项式函数,使得该函数在 数据点处的取值等于已知的数据点值。
算法收敛性:在某些情况下,龙格现象可能导致算法收敛速度减慢,增加计算时间和计算成本。
实际应用限制:由于龙格现象的存在,某些数值方法在实际应用中可能受到限制,无法处理某些 复杂问题。
算法改进需求:为了克服龙格现象的影响,需要研究和发展新的数值方法和算法,提高数值计算 的稳定性和精度。
拉格朗日插值法在Matlab中的 实现

matlab利用拉格朗日插值法求解范德蒙行列式 -回复

matlab利用拉格朗日插值法求解范德蒙行列式 -回复

matlab利用拉格朗日插值法求解范德蒙行列式-回复MATLAB是一款强大的数值计算软件,广泛应用于科学、工程和许多其他领域。

在MATLAB中,我们可以使用拉格朗日插值法来求解范德蒙(Vandermonde)行列式。

本文将一步一步地介绍如何使用MATLAB来实现这个过程。

范德蒙行列式是一种特殊的行列式形式,其矩阵中的元素由变量的幂来定义。

具体来说,一个n阶的范德蒙矩阵可以表示为:![Vandermonde Matrix](其中,x表示变量,a0,a1,…,an−1是给定的常数。

我们的目标是使用拉格朗日插值法来计算一个给定的范德蒙矩阵的行列式。

首先,我们需要定义一个函数来计算范德蒙矩阵的行列式。

在MATLAB 中,我们可以使用以下代码来实现:matlabfunction det = vandermonde_det(x, a)n = length(a);A = ones(n);for i = 1:nA(:,i) = a(i).^(0:n-1);enddet = det(A);end在这个函数中,x是一个包含变量的向量,a是一个包含给定常数的向量。

我们首先计算变量的数量n。

然后,我们创建一个大小为n×n的单位矩阵A。

接下来的循环中,我们将每一列的元素设置为给定常数的幂。

最后,我们使用MATLAB内置的det函数来计算矩阵A的行列式,并将结果返回。

接下来,我们可以编写一个主程序来使用这个函数并求解范德蒙行列式。

以下是一个简单的例子:matlabx = [1 2 3 4 5];a = [1 2 3 4 5];d = vandermonde_det(x, a);disp(d);在这个例子中,我们定义了一个变量向量x和一个常数向量a,它们分别包含了范德蒙行列式中的变量和常数。

然后,我们调用vandermonde_det 函数来计算范德蒙行列式的值,并将结果打印出来。

通过运行这个程序,我们可以得到范德蒙行列式的值。

MATLAB实现拉格朗日插值

MATLAB实现拉格朗日插值

数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、调用MATLAB内带函数插值1、MATLAB内带插值函数列举如下:2、取其中的一维数据内插函数(interp1)为例,程序如下:其调用格式为:yi=interp1(x, y, xi)yi=interp1(x, y, xi, method)举例如下:x=0:10:100y=[40 44 46 52 65 76 80 82 88 92 110];xi=0:1:100yi=interp1(x,y,xi,'spline')3、其他内带函数调用格式为:Interpft函数:y=interpft(x,n)y=interpft(x,n,dim)interp2函数:ZI=interp2(X, Y, Z, XI, YI),ZI=imerp2(Z, ntimes)ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes)VI=interp3(V,XI,YI,ZI) VI=interp3(…, method)Interpn函数:VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …)VI=interpn(V, ntimes)VI=interpn(V, Yl, Y2, Y3, …) VI=interpn(…, method)Spline函数:yi=spline(x,y,xi)pp=spline(x,y)meshgrid函数:[X,Y]=meshgrid(x,y)[X,Y]=meshgrid(x)[X,Y,Z]=meshgrid(x,y,z)Ndgrid函数:[X1, X2, X3, …]=ndgrid(x1, x2, x3, …)[X1, X2, X3, …]=ndgrid(x)Griddata函数:ZI=griddata(x, y, z, XI, YI)[XI, YI, ZI]=griddata(x, y, z, xi, yi)[…]=griddata(…method)二、自编函数插值1、拉格朗日插值法:建立M 文件:function f = Language(x,y,x0)syms t l;if(length(x) == length(y))n = length(x);elsedisp('x和y的维数不相等!');return; %检错endh=sym(0);for (i=1:n)l=sym(y(i));for(j=1:i-1)l=l*(t-x(j))/(x(i)-x(j));end;for(j=i+1:n)l=l*(t-x(j))/(x(i)-x(j));end;h=h+l;endsimplify(h);if(nargin == 3)f = subs (h,'t',x0); %计算插值点的函数值elsef=collect(h);f = vpa(f,6); %将插值多项式的系数化成6位精度的小数end在MATLAB中输入:x=[18 31 66 68 70 72 70;]y=[23 33 52 51 43 40 46];f=Language(x,y)plot(x,y)结果为:f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 - 0.000512106*t^6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数:function y=lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end画图程序如下:x=[-5:1:5];y=1./(1+x.^2);x0=[-5:0.001:5];y0=lagrange(x,y,x0);y1=1./(1+x0.^2);plot(x0,y0,'r')hold onplot(x0,y1,'g')注:画出的图形为n =10的图形得到图形如下:n=10的图像牛顿K次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。

2、拉格朗日插值的matlab实现

2、拉格朗日插值的matlab实现
%x0处的插值:f0
syms t;
if(length(x)==length(y))
n=length(x);
else
disp('x和y的维数不相等!');
return;
end%检错
f=0.0;
for(i=1:n)
l=y(i);
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
[f,f0]=Language(x,y,1.6)%计算输出的拉格朗日插值多项式
%计算x=1.6时的插值输出值f0
运行结果
f =
-799/3125*t*(t-1)*(t-3/2)*(t-2)*(t-5/2)*(t-3)+561/500*t*(t-1/2)*(t-3/2)*(t-2)*(t-5/2)*(t-3)-133/75*t*(t-1/2)*(t-1)*(t-2)*(t-5/2)*(t-3)+3031/2500*t*(t-1/2)*(t-1)*(t-3/2)*(t-5/2)*(t-3)-399/1250*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-3)+1411/112500*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-5/2)
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));%计算拉格朗日基函数
end;
f=f+l;%计算拉格朗日插值函数
simplify(f);%化简
end
f0=subs(f,'t',x0);%计算插值点的函数值
运行程序;
x=0:0.5:3;
y=[0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411];

拉格朗日插值法matlab程序代码

拉格朗日插值法matlab程序代码

拉格朗日插值法matlab程序代码文章开始:拉格朗日插值法是一种常用的数值计算方法,用于在已知的数据点上构造一个多项式,以逼近未知的函数值。

其主要思想是通过构造一个经过已知数据点的多项式,从而在未知点上近似函数的值。

在本文中,我将通过MATLAB编程来实现拉格朗日插值法,并给出相应的程序代码和解释。

在开始编写程序之前,让我们首先了解一下拉格朗日插值法的基本原理。

给定一组已知数据点(x0, y0), (x1, y1), ..., (xn, yn),其中xi为自变量,yi为因变量。

我们的目标是构造一个多项式P(x),使得对于任意的x,P(x)可以近似地表示未知函数f(x)的值。

首先,我们需要定义Lagrange基函数Li(x)。

每个基函数都满足以下两个性质:Li(xi) = 1Li(xj) = 0,其中i ≠ j基于这些性质,Li(x)可以通过以下公式计算:Li(x) = Π(j=0 to n, j ≠ i) ((x - xj) / (xi - xj))接下来,我们将利用这些基函数和已知数据点的因变量yi来构造拉格朗日插值多项式P(x):P(x) = Σ(i=0 to n) (yi * Li(x))有了这个多项式,我们可以使用它来近似未知函数f(x)在任意点x的值。

现在,让我们来实现这个算法,并给出MATLAB代码。

``` MATLABfunction P = lagrange_interpolation(x, y, x_val)% x: 已知数据点的自变量% y: 已知数据点的因变量% x_val: 需要插值的自变量n = length(x) - 1; % 数据点的数量P = zeros(size(x_val)); % 初始化插值多项式的值for i = 1:n+1% 计算基函数L = ones(size(x_val));for j = 1:n+1if j ~= iL = L .* (x_val - x(j)) / (x(i) - x(j));endend% 更新插值多项式的值P = P + y(i) * L;endend```上面的代码实现了拉格朗日插值法的核心算法。

用拉格朗日插值法求解函数值 matlab

用拉格朗日插值法求解函数值 matlab

**使用拉格朗日插值法求解函数值的MATLAB实现**拉格朗日插值法是一种常用的插值方法,通过已知的若干点构造一个多项式来近似一个未知的函数。

下面我们将详细介绍如何在MATLAB中使用拉格朗日插值法来求解函数值。

**1. 拉格朗日插值法的基本原理**给定n+1个点(x0, y0), (x1, y1), ..., (xn, yn),拉格朗日插值多项式L(x)可以表示为:L(x) = Σ[yi * li(x)] (i从0到n)其中,li(x) 是拉格朗日基函数,定义为:li(x) = Π[(x - xj) / (xi - xj)] (j从0到n,且j≠i)**2. MATLAB实现**以下是一个简单的MATLAB脚本,用于计算给定点的拉格朗日插值多项式及其值。

```matlab% 假设我们有一些点的数据:xi, yi(其中i = 0,1,2,...,n)xi = [1, 2, 3, 4]; % 自变量数据点yi = [1, 4, 9, 16]; % 因变量数据点% 要计算插值的点x = 2.5;n = length(xi); % 点的数量L = 0; % 初始化插值多项式% 计算拉格朗日插值多项式在点x处的值for i = 1:nli = 1; % 初始化基函数for j = 1:nif i ~= jli = li * (x - xi(j)) / (xi(i) - xi(j)); % 计算基函数endendL = L + yi(i) * li; % 更新插值多项式enddisp(['拉格朗日插值结果:', num2str(L)]); % 显示结果```在此脚本中,我们首先定义了已知的数据点`xi`和`yi`,并选择一个特定的`x`来计算对应的函数近似值。

然后,我们使用两个嵌套的循环来计算拉格朗日插值多项式在所选点`x`处的值。

外部循环遍历每个数据点,而内部循环计算相应的基函数。

最后,我们显示计算得到的插值结果。

拉格朗日插值matlab程序例题

拉格朗日插值matlab程序例题

拉格朗日插值是一种常用的数据拟合方法,它可以通过已知数据点来估计出未知数据点的值。

在数学和工程领域中,拉格朗日插值经常被用来进行数据的近似和预测。

在本文中,我们将深入探讨拉格朗日插值的原理和应用,并以Matlab程序例题来展示其实际运用。

1. 拉格朗日插值的原理拉格朗日插值是利用已知数据点来构造一个多项式,通过这个多项式来拟合数据并进行预测。

它的原理基于拉格朗日多项式的概念,即通过已知的n个点来构造一个n-1次的拉格朗日多项式,利用这个多项式来估计其他点的数值。

2. 拉格朗日插值的公式假设有n个已知的数据点(x1, y1), (x2, y2), …, (xn, yn),则拉格朗日插值多项式可以表示为:L(x) = Σ(yi * li(x)), i=1 to n其中li(x)是拉格朗日基函数,定义为:li(x) = Π((x - xj) / (xi - xj)), j=1 to n, j≠i利用这个公式,我们可以得到拉格朗日插值多项式,进而进行数据的拟合和预测。

3. 拉格朗日插值的Matlab程序实现下面我们将以一个具体的例题来展示如何使用Matlab来实现拉格朗日插值。

假设有如下数据点:y = [10, 5, 8, 3, 6];我们希望利用这些数据点来构造拉格朗日插值多项式,并使用这个多项式来估计x=3.5处的数值。

我们可以编写Matlab程序来实现拉格朗日插值。

代码如下:```matlabfunction result = lagrange_interpolation(x, y, xx)n = length(x);result = 0;for i = 1:ntemp = y(i);for j = 1:nif i ~= jtemp = temp * (xx - x(j)) / (x(i) - x(j));endendresult = result + temp;endend```我们可以调用这个函数来进行插值计算:```matlaby = [10, 5, 8, 3, 6];xx = 3.5;result = lagrange_interpolation(x, y, xx)disp(result);```通过这段程序,我们可以得到x=3.5处的插值结果为6.75。

lagrange插值matlab源程序

lagrange插值matlab源程序

lagrange插值matlab源程序function y = lagrange_interpolation(x, y, x0)% 检查输入值的维度是否一致if numel(x) ~= numel(y)error('输入的x和y的长度不一致');end% 初始化插值多项式的系数n = length(x);p = zeros(n, n);p(:, 1) = 1; % p0 = 1% 计算拉格朗日插值基函数for i = 1:nfor j = 1:nif i ~= jp(i, j) = (x0 - x(j)) / (x(i) - x(j));endendend% 计算插值结果y = p * y; % 使用矩阵乘法计算插值结果end在这个函数中,输入参数x和y是已知的数据点,x0是需要计算插值的点。

然后,我们使用Lagrange插值基函数来计算插值多项式,并将结果存储在变量y中。

最后,返回y作为插值结果。

% 已知数据点x = [0, 1, 2, 3];y = [1, 2, 1, 3];% 需要计算插值的点x0 = 1.5;% 使用Lagrange插值进行估算y0 = lagrange_interpolation(x, y, x0);disp(y0); % 输出插值结果在这个例子中,我们使用了一组已知的数据点(x, y),然后使用Lagrange 插值方法来估算在x0 = 1.5处的y值。

然后,我们打印出这个估算结果。

请注意,这是一个简单的例子,实际使用时需要根据具体的数据和需求进行调整。

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的MATLAB 实现姓名:袁宽 学号:2 专业:电气工程题目:对于函数211)(x x f +=,55≤≤-x 进行拉格朗日插值。

10=n ,按等距节点求分段线性插值,把)(x f 和插值多项式的曲线画在同一张图上进行比较。

观察Lagrange 插值及数值积分中的分段性插值。

f.m :function f= f( x )f=1./(1+x.^2);endLagrange.mfunction y=Lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;End拉格朗日插值的曲线:x=[-5:1:5];y=1./(1+x.^2);x0=[-5:0.001:5];y0=Lagrange(x,y,x0);y1=1./(1+x0.^2);plot(x0,y0,'b')hold onplot(x0,y1,'r')使用龙格现象观察分段性插值的曲线:syms y x lx;y=1/(1+x^2);x0=-5:1:5;y0=zeros(1,length(x0));for i=1:11x=x0(i);y0(i)=eval(y);endM = -5:0.01:5;y1 = zeros(1,length(M));n = 1;for i=2:11for x=-5:0.01:5if x<x0(i) && x>=x0(i-1)lx(1)=y0(i-1)*(x-x0(i))/(x0(i-1)-x0(i));lx(2)=y0(i)*(x-x0(i-1))/(x0(i)-x0(i-1));y1(n) = lx(1)+lx(2);n = n+1;endendendezplot(y,[-5,5])hold onA =-5:0.01:5;plot(A,y1,'r');分别运行两个文件后的得到两个图形曲线:拉格朗日插值曲线分段插值曲线。

matlab 最优插值法

matlab 最优插值法

matlab 最优插值法
在MATLAB中,常用的最优插值方法包括线性插值、拉格朗日插值和样条插值。

1. 线性插值:
MATLAB中可以使用interp1函数进行线性插值。

该函数的语法如下:
```matlab
yi = interp1(x, y, xi);
```
其中,x和y是已知的数据点,xi是要插值的位置,yi是对应xi位置的插值结果。

2. 拉格朗日插值:
MATLAB中可以使用polyfit和polyval函数进行拉格朗日插值。

首先使用polyfit函数拟合出拉格朗日多项式的系数,然后使用polyval函数计算插值结果。

```matlab
p = polyfit(x, y, n); % n是拉格朗日多项式的阶数
yi = polyval(p, xi);
```
3. 样条插值:
MATLAB中可以使用interp1函数的'spline'方法进行样条插值。

该方法基于自然边界条件(二阶导数在边界处为0)或其他形式的边界条件,计算出样条函数,并对插值点进行插值。

```matlab
yi = interp1(x, y, xi, 'spline');
```
需要注意的是,在进行最优插值时,选择适当的插值方法和参数非常重要,以得到准确的插值结果。

matlab插值法

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 拉格朗日插值多项式

matlab 拉格朗日插值多项式
拉格朗日插值多项式是一种基于差商的插值方法,它可以用于生
成通过给定数据点的曲线。

该方法的实现依赖于 MATLAB 的插值函数。

以下是一个简单的分步骤的过程来解释如何使用 MATLAB 来使用拉格
朗日插值多项式进行插值。

第一步是定义数据点。

要使用拉格朗日插值多项式,需要有一组
完整的数据点。

可以使用 MATLAB 预定义的数据或手动定义自己的数据。

第二步是创建插值函数。

可以使用 MATLAB 的 interp1 函数来
定义插值函数。

该函数需要数据点和插值点作为输入,以及插值函数
类型(在此处选择拉格朗日插值多项式)。

第三步是绘制数据和插值曲线。

可以使用 plot 函数来对数据和
插值曲线进行绘图。

这使得您可以可视化数据点和插值过程,并检查
结果的准确性。

第四步是调整插值精度。

可以使用 MATLAB 的 interp1 函数来
调整插值的精度。

通常,较高的精度会导致更准确的结果,但也会增
加计算时间。

最后一步是验证和测试。

最后一步是验证和测试已生成的拉格朗
日插值多项式。

可以使用 MATLAB 的测试函数和可视化工具来检查曲
线的准确性和精度。

总之,使用 MATLAB 进行拉格朗日插值多项式插值是一种灵活、
快速、易用的方法。

使用该方法,可以快速生成插值曲线,使您能够
更好地理解数据,做出更明智的决策。

拉格朗日差值、牛顿插值以及三次样条插值的matlab实现

拉格朗日差值、牛顿插值以及三次样条插值的matlab实现

拉格朗日差值、牛顿插值以及三次样条插值的matlab实现% Lagrange插值clearclc%-----------------------------n=10; %结点个数lb=-1; %下界ub=1; %上界step=0.01; %作图点步长%-----------------------------% 原始函数图形x0=lb:step:ub;y0=1./(1+25*x0.^2);plot(x0,y0,'r-');hold on%-----------------------------% 插值函数for i=1:n+1xi(i)=lb+(ub-lb)*(i-1)/n;yi(i)=1/(1+25*xi(i)^2);end%------------------------------count=1;for x=lb:step:ubfl=0;%--------------------------%求出pn(xk)for k=1:n+1up=1;dn=1;%----------------------%求出f(xk)for i=1:n+1if k~=iup=up*(x-xi(i));dn=dn*(xi(k)-xi(i));endend%----------------------fl=fl+yi(k)*up/dn;endpn(count)=fl;%--------------------------fi(count)=1/(1+25*x^2);%求原函数的值count=count+1;end%------------------------------% L插值函数图x=lb:step:ub;plot(x,pn,'g--')%------------------------------num=(ub-lb)/step+1;for i=1:nump_f(i)=pn(i)-fi(i);endcenter=fix(num/2);scale=fix(num/10);a=center-scale;b=center+scale;disp ' pn(i)-fi(i) 的值为:'p_f(a:b) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%clear allclc%Newton迭代法求解极小值点%===================================== disp '几点说明:'disp '1.程序中的函数采用课本P102例3.3.2。

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的MATLAB 实现姓名:袁宽 学号:2 专业:电气工程题目:对于函数211)(x x f +=,55≤≤-x 进行拉格朗日插值。

10=n ,按等距节点求分段线性插值,把)(x f 和插值多项式的曲线画在同一张图上进行比较。

观察Lagrange 插值及数值积分中的分段性插值。

f.m :function f= f( x )f=1./(1+x.^2);endLagrange.mfunction y=Lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;End拉格朗日插值的曲线:x=[-5:1:5];y=1./(1+x.^2);x0=[-5:0.001:5];y0=Lagrange(x,y,x0);y1=1./(1+x0.^2);plot(x0,y0,'b')hold onplot(x0,y1,'r')使用龙格现象观察分段性插值的曲线:syms y x lx;y=1/(1+x^2);x0=-5:1:5;y0=zeros(1,length(x0));for i=1:11x=x0(i);y0(i)=eval(y);endM = -5:0.01:5;y1 = zeros(1,length(M));n = 1;for i=2:11for x=-5:0.01:5if x<x0(i) && x>=x0(i-1)lx(1)=y0(i-1)*(x-x0(i))/(x0(i-1)-x0(i));lx(2)=y0(i)*(x-x0(i-1))/(x0(i)-x0(i-1));y1(n) = lx(1)+lx(2);n = n+1;endendendezplot(y,[-5,5])hold onA =-5:0.01:5;plot(A,y1,'r');分别运行两个文件后的得到两个图形曲线:拉格朗日插值曲线分段插值曲线。

matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法-回复Matlab 拉格朗日插值法和牛顿插值法引言:在数值分析中,插值法是一种通过已知数据点来估计介于这些数据点之间的未知数值的方法。

拉格朗日插值法和牛顿插值法是两种常用的插值方法,都有各自的优点和适用场景。

本文将详细介绍这两种方法的原理和实现方式,以及在Matlab 中如何使用它们来进行插值计算。

一、拉格朗日插值法1. 原理:拉格朗日插值法是使用一个N次的多项式来逼近未知函数。

给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过拉格朗日插值法可以得到一个多项式P(x),使得P(xi) = yi。

该多项式表示了数据点间的曲线关系,从而可以通过插值估算未知点的值。

2. 实现步骤:(1)创建一个N次多项式的拉格朗日插值函数;(2)计算每个插值点的权重系数,即拉格朗日插值函数的系数;(3)根据给定的数据点和权重系数,构建多项式;(4)通过多项式计算未知点的值。

3. Matlab 中的使用:在Matlab 中,可以使用"polyfit" 函数来实现拉格朗日插值法。

该函数可以拟合出一个多项式曲线,将给定的数据点映射到曲线上。

二、牛顿插值法1. 原理:牛顿插值法是通过构造一个差商表来逼近未知函数。

给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过牛顿插值法可以得到一个N次多项式P(x),满足P(xi) = yi。

该多项式的系数由差商构成,利用递归的方式逐层求解。

2. 实现步骤:(1)创建一个N次多项式的牛顿插值函数;(2)计算差商表,其中第一列为给定的数据点y值;(3)递归计算差商表中的其他列,直到得到最后的差商值;(4)根据差商表构建多项式;(5)通过多项式计算未知点的值。

3. Matlab 中的使用:在Matlab 中,可以使用"interp1" 函数结合牛顿插值法来进行插值计算。

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

数值分析上机报告
题目:插值法
学号:*********
姓名:***
一、调用MATLAB内带函数插值
1、MATLAB内带插值函数列举如下:
2、取其中的一维数据内插函数()为例,程序如下:其调用格式为:
yi=interp1(x, y, xi)
yi=interp1(x, y, xi, method)
举例如下:
x=0:10:100
y=[40 44 46 52 65 76 80 82 88 92 110];
xi=0:1:100
yi=interp1(x,y,xi,'spline')
3、其他内带函数调用格式为:
Interpft函数:
y=interpft(x,n)
y=interpft(x,n,dim)
interp2函数:
ZI=interp2(X, Y, Z, XI, YI),ZI=imerp2(Z, ntimes)
ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:
VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes)
VI=interp3(V,XI,YI,ZI) VI=interp3(…, method) Interpn函数:
VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …)
VI=interpn(V, ntimes)
VI=interpn(V, Yl, Y2, Y3, …) VI=interpn(…, method) Spline函数:
yi=spline(x,y,xi)
pp=spline(x,y)
meshgrid函数:
[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)
[X,Y,Z]=meshgrid(x,y,z)
Ndgrid函数:
[X1, X2, X3, …]=ndgrid(x1, x2, x3, …)
[X1, X2, X3, …]=ndgrid(x)
Griddata函数:
ZI=griddata(x, y, z, XI, YI)
[XI, YI, ZI]=griddata(x, y, z, xi, yi)
[…]=griddata(… method)
二、自编函数插值
1、拉格朗日插值法:
建立M 文件:
function f = Language(x,y,x0)
syms t l;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
return; %检错
end
h=sym(0);
for (i=1:n)
l=sym(y(i));
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
h=h+l;
end
simplify(h);
if(nargin == 3)
f = subs (h,'t',x0); %计算插值点的函数值
else
f=collect(h);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end
在MATLAB中输入:
x=[18 31 66 68 70 72 70;]
y=[23 33 52 51 43 40 46];
f=Language(x,y)
plot(x,y)
结果为:
f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 -
0.000512106*t^6
图形如下:
MATLAB实现拉格朗日插值建立如下拉格朗日插值函数:
function y=lagrange(x0,y0,x);
n=length(x0);
m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
画图程序如下:
x=[-5:1:5];
y=1./(1+x.^2);
x0=[-5:0.001:5];
y0=lagrange(x,y,x0);
y1=1./(1+x0.^2);
plot(x0,y0,'r')
hold on
plot(x0,y1,'g')
注:画出的图形为n =10的图形得到图形如下:
牛顿K 次插值多项式
一、实验目的:
1、掌握牛顿插值法的基本思路和步骤。

2、 培养编程与上机调试能力。

二、牛顿插值法基本思路与计算步骤:
给定插值点序列())(,i i x f x ,,,1,0,n i 。

构造牛顿插值多项式)(u N n 。

输入要计算的函数点,x 并计算)(x N n 的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面)(x N n 的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。

为 的 一阶均差。


的 k 阶均差。

均差表:
n=10的图像
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'; for j=2 : n for k=j : n
d(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1)); end end
c =d(n, n);
for k=(n-1) : - 1 : 1
c =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.m
clc
clear
newpoly([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.4744
P(0.53)= -0.6347。

相关文档
最新文档