函数的插值方法及matlab程序
MATLAB实现:拉格朗日插值法示例代码及应用指南
下面是使用 MATLAB 编写的拉格朗日插值法的示例代码:参数:x 是已知点的 x 坐标数组,y 是已知点的 y 坐标数组,point 是要进行插值的点的 x 坐标。
该函数会返回在给定 x 坐标 point 处的插值结果。
算法的实现思路是根据拉格朗日插值公式计算插值多项式,然后将 point 带入多项式计算得到插值结果。
你可以按照以下步骤使用上述函数:定义已知点的 x 坐标数组 x 和对应的 y 坐标数组 y。
调用lagrange_interpolation函数,并将x、y 和要插值的point 作为参数传递进去。
函数将返回在 point 处的插值结果。
以下是一个使用示例:1.定义已知点的 x 和 y 坐标x = [0, 1, 2, 4];y = [1, 4, 3, 2];2.要进行插值的点的 x 坐标point = 3.5;3.调用 lagrange_interpolation 函数进行插值result = lagrange_interpolation(x, y, point);4.输出插值结果disp(['在x = ', num2str(point), ' 处的插值结果为:', num2str(result)]);在上述示例中,已知点的 x 坐标为 [0, 1, 2, 4],对应的 y 坐标为 [1, 4, 3, 2]。
我们要在point = 3.5 处进行插值,然后通过调用lagrange_interpolation 函数计算插值结果,并输出结果。
请注意,拉格朗日插值法适用于小样本量和较低次数的插值问题。
对于大样本量和更高次数的插值,可能需要考虑使用其他插值方法或数值计算库中提供的更高级的插值函数。
插值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中插值函数MATLAB 中提供了许多插值函数,这些函数可以用来生成曲线和曲面上丢失的值,或者将方法升级到高精度,使其在小区域内变得更加平稳。
这篇文章介绍了一些常见的MATLAB 插值函数及其用法。
1. interp1 函数interp1 函数是 MATLAB 中最常用的插值函数,可以用于一维向量的插值。
interp1 函数有五个输入参数,第一个是插值点的位置,第二个是原始数据的位置,第三个是原始数据的值,第四个是插值方法,第五个是插值结果的返回类型。
下面的代码演示了如何使用 interp1 对数据进行线性插值:```matlab% 原始数据的位置和值x = [0, 1, 2, 3, 4];y = sin(x);% 插值点的位置xx = 0:0.1:4;% 线性插值yy = interp1(x, y, xx, 'linear');这个代码将生成一条正弦曲线的插值曲线。
interp2 函数是 MATLAB 针对二维数据点的插值函数。
interp2 函数有六个输入参数:x 和 y 是原始数据点的 x 和 y 坐标,z 是原始数据点,xi 和 yi 是要插值的 x 和 y 坐标,method 是插值方法。
这个函数可以执行线性插值、三次插值和紧凑的差值。
% 创建一个有噪声的原始数据点Z = sinc(sqrt(X.^2 + Y.^2)) + 0.1*randn(size(X));% 定义插值点的位置xi = -3:0.05:3;yi = -3:0.05:3;% 绘制原始和插值曲线mesh(X, Y, Z);hold on;mesh(xi, yi, Zi);```3. griddedInterpolant 函数griddedInterpolant 函数可以生成二维、三维和多维插值函数,其中包括线性插值函数、三次插值函数和拟和插值函数。
该函数可以在网格点和非网格点之间进行插值。
matlab插值(详细 全面)
Matlab中插值函数汇总和使用说明MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method')其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。
例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为12,9,9,10,18 ,24,28,27,25,20,18,15,13,推测中午12点(即13点)时的温度.x=0:2:24;y=[12 9 9 10 18 24 28 27 25 20 18 15 13];a=13;y1=interp1(x,y,a,'spline')结果为: 27.8725若要得到一天24小时的温度曲线,则:xi=0:1/3600:24;yi=interp1(x,y,xi, 'spline');plot(x,y,'o' ,xi,yi)命令1 interp1功能一维数据插值(表格查找)。
该命令对数据点之间计算内插值。
它找出一元函数f(x)在中间点的数值。
其中函数f(x)由所给数据决定。
x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi)返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。
参量x 指定数据Y 的点。
若Y 为一矩阵,则按Y 的每列计算。
yi是阶数为length(xi)*size(Y,2)的输出矩阵。
matlab的一维插值及应用方法
matlab的一维插值及应用方法在MATLAB中进行一维插值的基本方法是使用 `interp1` 函数。
这个函数可以用于一维数据的插值和外推。
以下是一些使用 `interp1` 的基本步骤:1. 创建数据:首先,您需要有一组已知的数据点。
这些数据通常存储在向量中。
2. 选择插值方法:`interp1` 函数提供了多种插值方法,包括最近邻插值、线性插值、多项式插值等。
你可以选择适合你需求的方法。
3. 应用插值:使用 `interp1` 函数对数据进行插值。
下面是一个简单的示例,演示如何使用 `interp1` 函数进行一维插值:```matlab% 创建原始数据x = 1:10;y = [2 4 7 9 12 14 17 20 23 26];% 选择插值方法(例如,线性插值)xi = 1::10; % 这是你想要求解的x值yi = interp1(x, y, xi, 'linear'); % 使用线性插值% 绘制原始数据和插值结果plot(x, y, 'o', xi, yi, '-')legend('原始数据', '线性插值结果')```在这个示例中,我们首先创建了一组原始数据 `x` 和 `y`。
然后,我们选择一个更大的x值范围`xi`,并使用`interp1` 对这些x值进行线性插值。
最后,我们将原始数据和插值结果一起绘制出来。
注意:`interp1` 函数还有其他参数和选项,允许你更精细地控制插值过程。
你可以查阅 MATLAB 的官方文档以获取更多详细信息。
Matlab中插值函数汇总和使用说明
Matlab中插值函数汇总和使用说明以下内容的参考地址:/blog/article.asp?id=28904已知向量x,y,通过x,y求出向量xi的插值的值1、分段线性插值yi=interp1(x,y,xi)或yi=interp1(x,y,'linear')2、多项式插值多项式为y=p(1)*x+p(2)*x^2+...+p(n)*x^n,则可以用p=polyfit(x,y,n),(n是多项式的最高次数)求出系数向量p,然后用y=polyval(p,xi)求出向量xi的函数值y3、三次样条插值yi=interp1(x,y,xi,'spline')或yi=spline(x,y,xi)或pp=interp1(x,y,'spline','pp'),然后pp=spline(x,y)-->yi=ppval(pp,xi)4、分段三次埃尔米特yi=interp1(x,y,xi,'pchip')或yi=pchip(x,y,xi)或pp=interp1(x,y,'pchip','pp') pp=pchip(x,y)-->yi=pppval(pp.xi)以下内容的参考地址:/s/blog_6056e8800100k3xf.html命令1 interp1功能一维数据插值(表格查找)。
该命令对数据点之间计算内插值。
它找出一元函数f(x)在中间点的数值。
其中函数f(x)由所给数据决定。
x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi)返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。
参量x 指定数据Y 的点。
若Y 为一矩阵,则按Y 的每列计算。
yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
(2)yi = interp1(Y,xi)假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。
matlab插值函数
matlab插值函数Matlab是一种功能强大的数值计算和科学编程环境,内置了许多插值函数,可以用来在不连续数据点之间进行插值或者外推。
下面将介绍其中一些常用的插值函数以及如何使用它们。
1. interp1函数:interp1函数用于一维数据的插值。
它可以根据给定的数据点和插值方法,在一些给定点上进行插值。
例如,可以使用线性插值、多项式插值或者样条插值。
interp1函数的基本语法如下:```Vq = interp1(X, V, Xq, method)```其中,X是原始的自变量数据点,V是对应的因变量数据点,Xq是需要进行插值的点,method是插值方法。
2. interp2函数:interp2函数用于二维数据的插值。
它可以根据给定的数据点和插值方法,在二维平面上的一些给定点上进行插值。
interp2函数在进行插值时,会自动处理数据点的网格化和内插。
常用的插值方法包括线性插值、三次插值和样条插值。
interp2函数的基本语法如下:```Vq = interp2(X, Y, V, Xq, Yq, method)```其中,X和Y是原始的自变量网格,V是对应的因变量数据点,Xq和Yq是需要进行插值的点,method是插值方法。
3. griddedInterpolant函数:griddedInterpolant函数是一个灵活的插值器,可以用于任意维度的插值。
该函数对输入数据进行光滑处理,然后生成一个可调用的插值器对象。
可以使用插值器对象在给定点上进行插值,也可以通过设置插值属性来调整插值方式。
griddedInterpolant函数的基本语法如下:```F = griddedInterpolant(X, V, method)Vq=F(Xq)```其中,X是原始的自变量数据点,V是对应的因变量数据点,method 是插值方法。
F是生成的插值器对象,Xq是需要进行插值的点,Vq是插值结果。
4. scatteredInterpolant函数:scatteredInterpolant函数可以用于不规则数据点的插值。
Matlab中的插值和平滑方法
Matlab中的插值和平滑方法1. 引言在数值分析和数据处理中,插值和平滑是常用的技术手段,可以用于填补数据的空缺以及降低数据中的噪声。
Matlab作为一种强大的数值计算和数据处理软件,提供了丰富的插值和平滑方法,本文将介绍其中的一些常用方法及其应用。
2. 插值方法2.1 线性插值线性插值是最简单的一种插值方法,它假设待插值函数在相邻数据点之间是线性变化的。
Matlab中提供了interp1函数实现线性插值,可以通过设定插值点的横坐标向量和已知数据点的横坐标向量,以及对应的纵坐标向量,得到插值结果。
2.2 分段插值分段插值是一种更精确的插值方法,它假设待插值函数在相邻数据点之间是分段线性变化的。
Matlab中的interp1函数也可以实现分段插值,通过指定'linear'插值方法和 'pchip'插值方法,可以得到不同的插值结果,前者得到的结果比较平滑,而后者更接近原始数据的形状。
2.3 样条插值样条插值是一种更高阶的插值方法,它假设待插值函数在相邻数据点之间是多项式变化的。
Matlab中的spline函数可以实现三次样条插值,它通过计算每个数据点处的二阶导数,得到一个以每个数据点为节点的三次多项式函数。
样条插值可以更加精确地还原数据,但也容易受到离群点的干扰。
3. 平滑方法3.1 移动平均移动平均是一种常用的平滑方法,它通过计算数据点周围一定范围内的平均值,得到平滑后的结果。
Matlab中的smoothdata函数提供了不同的平滑方法,包括简单移动平均、指数移动平均和加权移动平均等,可以根据具体需求选择适当的方法。
3.2 Savitzky-Golay滤波Savitzky-Golay滤波是一种基于最小二乘法的平滑方法,它通过拟合多项式曲线来实现数据的平滑。
Matlab中的sgolay函数可以实现Savitzky-Golay滤波,通过指定不同的拟合阶数和窗口大小,可以得到不同程度的平滑结果。
matlab数组插值程序
matlab数组插值程序在MATLAB中,数组插值是一种常见的操作,可以使用interp1函数来实现。
interp1函数可以对一维数据进行插值操作,以下是一个简单的示例程序,演示了如何在MATLAB中进行数组插值操作:matlab.% 创建原始数据。
x = 1:5; % 原始数据的x坐标。
y = [3 6 2 8 4]; % 原始数据的y坐标。
% 创建插值的新x坐标。
xq = 1:0.1:5; % 创建新的x坐标,间隔为0.1。
% 使用interp1进行线性插值。
yq_linear = interp1(x, y, xq, 'linear'); % 线性插值。
% 使用interp1进行三次样条插值。
yq_spline = interp1(x, y, xq, 'spline'); % 三次样条插值。
% 绘制原始数据和插值结果。
plot(x, y, 'o', xq, yq_linear, '-', xq, yq_spline, '--');legend('原始数据', '线性插值', '三次样条插值');在这个示例程序中,我们首先创建了原始数据x和y,然后创建了新的x坐标xq,接着使用interp1函数进行线性插值和三次样条插值,最后将原始数据和插值结果绘制在同一张图上进行对比。
需要注意的是,interp1函数还可以进行其他类型的插值,比如最近邻插值、分段线性插值等,具体可以根据实际需求选择合适的插值方法。
除了interp1函数,MATLAB还提供了其他一些用于数组插值的函数,比如interp2(用于二维数据的插值)、interpn(用于多维数据的插值)等,可以根据具体情况选择合适的插值函数进行操作。
总之,MATLAB提供了丰富的插值函数,可以满足不同数据插值的需求,通过灵活运用这些函数,可以实现对数组的高效插值操作。
插值与拟合的MATLAB实现
插值与拟合的MATLAB实现插值和拟合是MATLAB中常用的数据处理方法。
插值是通过已知数据点之间的数值来估计未知位置的数值。
而拟合则是通过已知数据点来拟合一个曲线或者函数,以便于进行预测和分析。
插值方法:1.线性插值:使用MATLAB中的interp1函数可以进行线性插值。
interp1函数的基本语法为:yinterp = interp1(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。
函数将根据已知数据点的线性关系,在xinterp位置返回相应的yinterp值。
2.拉格朗日插值:MATLAB中的lagrangepoly函数可以使用拉格朗日插值方法。
lagrangepoly的基本语法为:yinterp = lagrangepoly(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。
函数将根据拉格朗日插值公式,在xinterp位置返回相应的yinterp值。
3.三次样条插值:使用MATLAB中的spline函数可以进行三次样条插值。
spline函数的基本语法为:yinterp = spline(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。
函数将根据已知数据点之间的曲线关系,在xinterp位置返回相应的yinterp值。
拟合方法:1.多项式拟合:MATLAB中的polyfit函数可以进行多项式拟合。
polyfit的基本语法为:p = polyfit(x, y, n),其中x和y为已知数据点的向量,n为要拟合的多项式的次数。
函数返回一个多项式的系数向量p,从高次到低次排列。
通过使用polyval函数,我们可以将系数向量p应用于其他数据点,得到拟合曲线的y值。
2.曲线拟合:MATLAB中的fit函数可以进行曲线拟合。
fit函数的基本语法为:[f, goodness] = fit(x, y, 'poly2'),其中x和y为已知数据点的向量,'poly2'表示要拟合的曲线类型为二次多项式。
MATLAB中的插值方法及其应用
MATLAB中的插值方法及其应用引言数据在科学研究和工程应用中起着至关重要的作用。
然而,在实际问题中,我们常常遇到数据不完整或者不连续的情况。
为了填补这些数据的空隙,插值方法应运而生。
插值方法可以通过已知的点估计未知点的值,从而使得数据连续化。
MATLAB作为一款强大的数值计算软件,提供了丰富的插值方法及其应用。
本文将对MATLAB中常用的插值方法进行介绍,并探讨它们在实际应用中的价值和效果。
一、线性插值方法线性插值是最简单和常用的插值方法之一。
它假设两个已知数据点之间的插值点在直线上。
MATLAB中的线性插值可以通过interp1函数实现。
例如,对于一组已知的点(x1,y1)和(x2,y2),我们可以使用interp1(x,y,xq,'linear')来估计插值点(xq,yq)的值。
线性插值方法的优点在于简单易懂,计算速度快。
然而,它的缺点在于无法处理非线性关系和复杂的数据分布。
因此,在实际应用中,线性插值方法往往只适用于简单的数据场景。
二、多项式插值方法多项式插值是一种常用的插值技术,它假设插值点在已知数据点之间的曲线上,而非直线。
MATLAB中的polyfit和polyval函数可以帮助我们实现多项式插值。
多项式插值方法的优点在于可以逼近各种形状的曲线,对数据的逼真度较高。
然而,当插值点之间的数据分布不均匀时,多项式插值容易产生振荡现象,即“龙格现象”。
因此,在实际应用中,我们需要根据具体问题选择合适的插值阶数,以避免过拟合和振荡现象的发生。
三、样条插值方法样条插值是一种光滑且精确的插值方法。
它通过在已知数据点之间插入一系列分段多项式,使得插值曲线具有良好的光滑性。
MATLAB中的spline函数可以帮助我们实现样条插值。
样条插值方法的优点在于可以处理数据分布不均匀和曲线形状复杂的情况。
它能够减少振荡现象的发生,并保持曲线的光滑性。
然而,样条插值方法的计算复杂度较高,需要更多的计算资源。
matlab中二维插值函数用法
matlab中二维插值函数用法摘要:一、引言二、matlab 中二维插值函数的语法格式三、二维数据插值的使用方法1.最邻近插值方法(nearest)2.线性插值方法(linear)3.立方插值方法(cubic)四、二维插值在matlab 中的应用实例五、总结正文:一、引言在数据处理和分析中,插值是一种常用的方法,它可以根据已知的数据点预测未知的数据点。
在matlab 中,提供了丰富的插值函数,可以用于一维、二维甚至三维数据的插值。
本文将介绍matlab 中二维插值函数的用法。
二、matlab 中二维插值函数的语法格式在matlab 中,二维插值函数的语法格式如下:```matlabX = interp2(x, y, Z);X = interp2(x, y, Z, method);X = interp2(x, y, Z, method, grid);```其中,x 和y 是插值点的横纵坐标,Z 是插值点的高度(或者说是第三维),method 是插值方法,grid 是插值网格。
三、二维数据插值的使用方法1.最邻近插值方法(nearest)最邻近插值方法(nearest)是二维插值中最简单的插值方法,它将插值点落在离它最近的数据点上。
使用方法如下:```matlabX = interp2(x, y, Z, "nearest");```2.线性插值方法(linear)线性插值方法(linear)是二维插值中最常用的插值方法,它根据插值点的坐标和附近数据点的值进行线性插值。
使用方法如下:```matlabX = interp2(x, y, Z, "linear");```3.立方插值方法(cubic)立方插值方法(cubic)是二维插值中精度较高的插值方法,它根据插值点的坐标和附近数据点的值进行三次样条插值。
使用方法如下:```matlabX = interp2(x, y, Z, "cubic");```四、二维插值在matlab 中的应用实例下面我们通过一个实例来说明二维插值在matlab 中的用法。
Matlab中的数据插值技术
Matlab中的数据插值技术1. 引言在科学研究和工程应用中,我们常常遇到需要补全或者重构丢失的数据点的情况。
这时候数据插值技术就显得尤为重要了。
Matlab作为一种强大的数值计算软件,提供了多种数据插值的方法和函数,这篇文章将为大家介绍Matlab中常用的数据插值技术。
2. 线性插值线性插值是最直观和简单的插值方法之一。
它假设两个已知数据点之间的数据值是直线变化的,通过线性插值方法可以得到两个数据点之间任意位置的数据点值。
Matlab中的interp1函数就是用于线性插值的工具。
例如,我们有一组已知的数据点x和y,我们想要在两个相邻数据点之间插入10个数据点,可以使用以下代码实现:```matlabx = [1, 2, 3, 4];y = [5, 6, 8, 10];xi = linspace(1, 4, 10);yi = interp1(x, y, xi);```3. 插值曲线拟合除了线性插值外,插值曲线拟合是另一种常见的数据插值技术。
它在已知数据点之间通过拟合曲线来估计缺失数据点的值。
Matlab中的interp1函数还可以使用多项式拟合和样条插值方法来实现曲线拟合插值。
以下是一个使用样条插值的例子:```matlabx = [1, 2, 3, 4];y = [5, 6, 8, 10];xi = linspace(1, 4, 10);yi = interp1(x, y, xi, 'spline');```4. 最近邻插值最近邻插值是一种简单但有效的插值方法。
它假设新数据点的值与最近的已知数据点的值相同。
在Matlab中,可以使用interp1函数的`'nearest'`选项来进行最近邻插值。
以下是一个示例代码:```matlabx = [1, 2, 3, 4];y = [5, 6, 8, 10];xi = linspace(1, 4, 10);yi = interp1(x, y, xi, 'nearest');```5. 高级插值方法除了基本的插值方法外,Matlab还提供了一些高级的插值方法。
matlab插值函数用法
matlab插值函数用法在MATLAB 中,插值函数用于根据已知数据点的值,估计在这些数据点之间的位置的值。
MATLAB 提供了多种插值函数,常用的包括`interp1`、`interp2`、`interp3` 等。
下面是一些常见的MATLAB 插值函数的用法:1. interp1:一维插值函数,用于对一维数据进行插值。
```matlab% 创建一些示例数据x = 1:5;y = [3 7 2 5 8];% 定义插值点xi = 1:0.1:5;% 进行线性插值yi = interp1(x, y, xi, 'linear');```2. interp2:二维插值函数,用于对二维数据进行插值。
```matlab% 创建一些示例数据[X, Y] = meshgrid(1:5, 1:5);Z = peaks(5);% 定义插值点[XI, YI] = meshgrid(1:0.1:5, 1:0.1:5);% 进行二维插值ZI = interp2(X, Y, Z, XI, YI, 'linear');```3. interp3:三维插值函数,用于对三维数据进行插值。
```matlab% 创建一些示例数据[X, Y, Z] = meshgrid(1:5, 1:5, 1:5);V = rand(5, 5, 5);% 定义插值点[XI, YI, ZI] = meshgrid(1:0.1:5, 1:0.1:5, 1:0.1:5);% 进行三维插值VI = interp3(X, Y, Z, V, XI, YI, ZI, 'linear');```这些函数中的`'linear'` 参数表示使用线性插值方法,你也可以选择其他插值方法,比如`'nearest'`、`'spline'` 等。
此外,还可以根据需要进行更高级的插值操作,比如多项式插值、样条插值等。
matlab自带的插值函数interp1的四种插值方法
matlab⾃带的插值函数interp1的四种插值⽅法x=0:2*pi;y=sin(x);xx=0:0.5:2*pi;%interp1对sin函数进⾏分段线性插值,调⽤interp1的时候,默认的是分段线性插值y1=interp1(x,y,xx);figureplot(x,y,'o',xx,y1,'r')title('分段线性插值')%临近插值y2=interp1(x,y,xx,'nearest');figureplot(x,y,'o',xx,y2,'r');title('临近插值')%球⾯线性插值y3=interp1(x,y,xx,'spline');figureplot(x,y,'o',xx,y3,'r')title('球⾯插值')%三次多项式插值法y4=interp1(x,y,xx,'cubic');figureplot(x,y,'o',xx,y4,'r');title('三次多项式插值')(1) Nearest⽅法速度最快,占⽤内存最⼩,但⼀般来说误差最⼤,插值结果最不光滑。
(2) Spline三次样条插值是所有插值⽅法中运⾏耗时最长的,插值函数及其⼀⼆阶导函数都连续,是最光滑的插值⽅法。
占⽤内存⽐cubic⽅法⼩,但是已知数据分布不均匀的时候可能出现异常结果。
(3) Cubic三次多项式插值法中,插值函数及其⼀阶导数都是连续的,所以插值结果⽐较光滑,速度⽐Spline快,但是占⽤内存最多。
更新⽇志2020-11-3有个⼩⽼弟问我,怎么把这个插值函数获取到,后续调⽤,然后去看了⼀眼官⽅⽂档,有⼀句话pp = interp1(x,v,method,'pp')分段多项式,以可传递到 ppval 函数进⾏计算的结构体的形式返回。
matlab插值函数用法
matlab插值函数用法Matlab是一款非常强大的数学计算软件,其插值函数提供了一种在给定数据点上生成平滑连续函数的方法。
插值函数对于分析和处理数据非常有用,可以帮助我们更好地了解数据的变化趋势和模式。
在本文中,我们将详细介绍Matlab插值函数的用法,从数据导入到插值计算的每个步骤。
第一步:导入数据在使用Matlab进行插值之前,我们需要先将数据导入到Matlab的工作环境中。
Matlab支持多种数据导入方式,例如从Excel表格、文本文件或直接从变量中导入。
根据实际情况选择适合的方法导入数据,并将其存储为一个向量或矩阵。
第二步:选择插值方法Matlab提供了多种插值方法,每种方法都适用于不同类型的数据。
常用的插值方法包括线性插值、多项式插值、样条插值等。
选择合适的插值方法要根据数据的特点和需要达到的插值效果来决定。
线性插值是一种简单的插值方法,它使用两个最接近的数据点之间的线性关系来计算插值点的值。
多项式插值则是通过使用一个多项式函数来拟合已知数据点,进而计算插值点的值。
样条插值是一种更复杂的插值方法,它使用多个低次多项式组成的函数来拟合已知数据点,通过这些多项式的平滑性来提供更精确的插值结果。
根据数据的特点和具体需求,选择合适的插值方法是非常重要的。
在Matlab中,可以使用interp1函数来进行线性和多项式插值,使用spline 函数来进行样条插值。
第三步:执行插值计算一旦选择了合适的插值方法,我们可以使用相应的插值函数对数据进行插值计算。
下面是插值函数的基本用法示例。
对于线性插值,可以使用interp1函数来进行计算。
该函数的基本语法如下:y_interp = interp1(x, y, x_interp, 'method');其中,x和y表示已知的数据点,x_interp表示欲计算的插值点,'method'表示插值方法,可以是'linear'表示线性插值或'pchip'表示分段立方插值等。
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中,有多种方法可以进行曲线插值。
以下是一些
常用的方法:
1. 线性插值:使用线性函数将给定数据点之间的空白区域填充。
在MATLAB中,可以使用`interp1`函数实现线性插值。
2. 多项式插值:使用一个多项式函数来逼近数据点。
在MATLAB中,可以使用`polyfit`函数拟合数据点,并使用
`polyval`函数计算插值点。
3. 样条插值:使用分段多项式来逼近数据点,形成平滑的曲线。
在MATLAB中,可以使用`interp1`函数的`'spline'`选项进行样
条插值。
4. Lagrange插值:使用Lagrange插值多项式逼近数据点。
在MATLAB中,可以使用`polyfit`函数的第三个参数指定插值多
项式的次数。
5. 三次样条插值:使用三次多项式来逼近数据点,并确保曲线在数据点之间是连续且光滑的。
在MATLAB中,可以使用
`csape`函数进行三次样条插值。
这些方法在MATLAB中都有相应的函数可以直接调用,并提
供了灵活的参数选项来满足不同的插值需求。
matlab拟合函数并插值
matlab拟合函数并插值在MATLAB中进行拟合函数并插值可以通过以下步骤实现:1. 准备数据:首先,您需要准备要进行拟合和插值的数据。
这可以是一组x和y值,其中x是输入数据,y是对应的目标输出数据。
2. 拟合函数:使用MATLAB中的拟合函数来对数据进行拟合。
例如,您可以使用`fit`函数来拟合一组数据。
以下是一个简单的例子:```matlabx = [1, 2, 3, 4, 5]; % 输入数据y = [2, 3, 5, 7, 11]; % 输出数据fitresult = fit(x', y', 'poly1'); % 拟合一个一次多项式函数```在这个例子中,我们使用了`fit`函数来拟合一组输入数据`x`和输出数据`y`,并指定了要拟合的函数类型为一次多项式。
`fit`函数将返回拟合的结果,其中包含了拟合的函数表达式和拟合参数等信息。
3. 进行插值:一旦您完成了拟合,您可以使用插值方法来预测新的输入数据对应的输出值。
在MATLAB中,插值可以通过使用`interp1`函数来实现。
以下是一个简单的例子:```matlabxnew = [1.5, 2.5, 3.5, 4.5]; % 新的输入数据ynew = interp1(fitresult, xnew); % 使用拟合结果进行插值```在这个例子中,我们使用了`interp1`函数来对新的输入数据进行插值,并使用了之前拟合的结果作为插值函数的参数。
`interp1`函数将返回对应于新的输入数据`xnew`的插值结果`ynew`。
在MATLAB中进行拟合函数并插值需要准备数据、使用拟合函数进行拟合、使用插值函数进行插值。
这些步骤可以帮助您在MATLAB中实现拟合和插值的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1 插值问题及其误差6.1.2 与插值有关的MATLAB 函数(一) POLY2SYM函数调用格式一:poly2sym (C)调用格式二:f1=poly2sym(C,'V') 或f2=poly2sym(C, sym ('V') ),(二) POLYVAL函数调用格式:Y = polyval(P,X)(三) POLY函数调用格式:Y = poly (V)(四) CONV函数调用格式:C =conv (A, B)例 6.1.2求三个一次多项式、和的积.它们的零点分别依次为0.4,0.8,1.2.解我们可以用两种MATLAB程序求之.方法1如输入MATLAB程序>> X1=[0.4,0.8,1.2]; l1=poly(X1), L1=poly2sym (l1)运行后输出结果为l1 =1.0000 -2.4000 1.7600 -0.3840L1 =x^3-12/5*x^2+44/25*x-48/125方法2如输入MATLAB程序>> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2);C =conv (conv (P1, P2), P3) , L1=poly2sym (C)运行后输出的结果与方法1相同.(五) DECONV 函数调用格式:[Q,R] =deconv (B,A)(六) roots(poly(1:n))命令调用格式:roots(poly(1:n))(七) det(a*eye(size (A)) - A)命令调用格式:b=det(a*ey e(size (A)) - A)6.2 拉格朗日(Lagrange)插值及其MATLAB程序6.2.1 线性插值及其MATLAB程序例 6.2.1 已知函数在上具有二阶连续导数,,且满足条件.求线性插值多项式和函数值,并估计其误差.解输入程序>> X=[1,3];Y=[1,2]; l01= poly(X(2))/( X(1)- X(2)), l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym(l11), P = l01* Y(1)+ l11* Y(2),L=poly2sym (P),x=1.5; Y = polyval(P,x)运行后输出基函数l0和l1及其插值多项式的系数向量P(略)、插值多项式L和插值Y为l0 = l1 = L = Y =-1/2*x+3/2 1/2*x-1/2 1/2*x+1/2 1.2500 输入程序>> M=5;R1=M*abs((x-X(1))* (x-X(2)))/2运行后输出误差限为R1 =1.8750例6.2.2求函数e在上线性插值多项式,并估计其误差.解输入程序>> X=[0,1]; Y =exp(-X) ,l01= poly(X(2))/( X(1)- X(2)),l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym (l11), P = l01* Y(1)+ l11* Y(2), L=poly2sym (P), 运行后输出基函数l0和l1及其插值多项式的系数向量P和插值多项式L为l0 = l1 = P =-x+1 x -0.6321 1.0000L =-1423408956596761/2251799813685248*x+1输入程序>> M=1;x=0:0.001:1; R1=M*max(abs((x-X(1)).*(x-X(2))))./2运行后输出误差限为R1 =0.1250.6.2.2 抛物线插值及其MATLAB程序例6.2.3求将区间[0, π/2] 分成等份,用产生个节点,然后根据(6.9)和(6.13)式分别作线性插值函数和抛物线插值函数.用它们分别计算cos (π/6) (取四位有效数字),并估计其误差.解输入程序>> X=[0,pi/2]; Y =cos(X) ,l01= poly(X(2))/( X(1)- X(2)),l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym (l11),P = l01* Y(1)+ l11* Y(2), L=poly2sym (P),x=pi/6;Y = polyval(P,x)运行后输出基函数l0和l1及其插值多项式的系数向量P、插值多项式和插值为l0 =-5734161139222659/9007199254740992*x+1l1 =5734161139222659/9007199254740992*xP =-0.6366 1.0000L =-5734161139222659/9007199254740992*x+1Y =0.6667输入程序>> M=1;x=pi/6; R1=M*abs((x-X(1))*(x-X(2)))/2运行后输出误差限为R1 =0.2742.(2)输入程序>> X=0:pi/4:pi/2; Y =cos(X) ,l01= conv (poly(X(2)),poly(X(3)))/(( X(1)- X(2))* ( X(1)- X(3))),l11= conv (poly(X(1)),poly(X(3)))/(( X(2)- X(1))* ( X(2)- X(3))),l21= conv (poly(X(1)),poly(X(2)))/(( X(3)- X(1))* ( X(3)- X(2))),l0=poly2sym (l01),l1=poly2sym (l11),l2=poly2sym (l21),P = l01* Y(1)+ l11* Y(2) + l21* Y(3), L=poly2sym (P),x=pi/6;Y = polyval(P,x)运行后输出基函数l01、l11和l21及其插值多项式的系数向量P、插值多项式L和插值Y为l0 =228155022448185/281474976710656*x^2-2150310427208497/1125899906842624*x+1 l1 =-228155022448185/140737488355328*x^2+5734161139222659/2251799813685248*x l2 =228155022448185/281474976710656*x^2-5734161139222659/9007199254740992*x P =-0.3357 -0.1092 1.0000L=-6048313895780875/18014398509481984*x^2-7870612110600739/72057594037927936*x+1 Y =0.8508输入程序>> M=1;x=pi/6; R2=M*abs((x-X(1))*(x-X(2)) *(x-X(3)))/6运行后输出误差限为R2 =0.0239.6.2.3 次拉格朗日(Lagrange)插值及其MATLAB程序例 6.2.4给出节点数据,,,,作三次拉格朗日插值多项式计算,并估计其误差.解输入程序>> X=[-2,0,1,2]; Y =[17,1,2,17];p1=poly(X(1)); p2=poly(X(2));p3=poly(X(3)); p4=poly(X(4));l01= conv ( conv (p2, p3), p4)/(( X(1)- X(2))* ( X(1)- X(3)) * ( X(1)- X(4))),l11= conv ( conv (p1, p3), p4)/(( X(2)- X(1))* ( X(2)- X(3)) * ( X(2)- X(4))),l21= conv ( conv (p1, p2), p4)/(( X(3)- X(1))* ( X(3)- X(2)) * ( X(3)- X(4))),l31= conv ( conv (p1, p2), p3)/(( X(4)- X(1))* ( X(4)- X(2)) * ( X(4)- X(3))),l0=poly2sym (l01),l1=poly2sym (l11),l2=poly2sym (l21), l3=poly2sym (l31),P = l01* Y(1)+ l11* Y(2) + l21* Y(3) + l31* Y(4),运行后输出基函数l0,l1,l2和l3及其插值多项式的系数向量P(略)为l0 =-1/24*x^3+1/8*x^2-1/12*x,l1 =1/4*x^3-1/4*x^2-x+1 l2 =-1/3*x^3+4/3*x,l3 =1/8*x^3+1/8*x^2-1/4*x输入程序>> L=poly2sym (P),x=0.6; Y = polyval(P,x)运行后输出插值多项式和插值为L = Y =x^3+4*x^2-4*x+1 0.2560.输入程序>> syms M; x=0.6;R3=M*abs((x-X(1))*(x-X(2)) *(x-X(3)) *(x-X(4)))/24运行后输出误差限为R3 =91/2500*M即R3,.6.2.5 拉格朗日多项式和基函数的MATLAB程序求拉格朗日插值多项式和基函数的MATLAB主程序function [C, L,L1,l]=lagran1(X,Y)m=length(X); L=ones(m,m);for k=1: mV=1;for i=1:mif k~=iV=conv(V,poly(X(i)))/(X(k)-X(i));endendL1(k,:)=V; l(k,:)=poly2sym (V)endC=Y*L1;L=Y*l例6.2.5 给出节点数据,,,,,,作五次拉格朗日插值多项式和基函数,并写出估计其误差的公式.解在MATLAB工作窗口输入程序>> X=[-2.15 -1.00 0.01 1.02 2.03 3.25];Y=[17.03 7.24 1.05 2.03 17.06 23.05];[C, L ,L1,l]= lagran1(X,Y)运行后输出五次拉格朗日插值多项式L及其系数向量C,基函数l及其系数矩阵L1如下C =-0.2169 0.0648 2.1076 3.3960 -4.5745 1.0954 L =1.0954-4.5745*x+3.3960*x^2+2.1076*x^3+0.0648*x^4-0.2169*x^5L1 =-0.0056 0.0299 -0.0323 -0.0292 0.0382 -0.00040.0331 -0.1377 -0.0503 0.6305 -0.4852 0.0048-0.0693 0.2184 0.3961 -1.2116 -0.3166 1.00330.0687 -0.1469 -0.5398 0.6528 0.9673 -0.0097-0.0317 0.0358 0.2530 -0.0426 -0.2257 0.00230.0049 0.0004 -0.0266 0.0001 0.0220 -0.0002l =[ -0.0056*x^5+0.0299*x^4-0.0323*x^3-0.0292*x^2+0.0382*x-0.0004][ 0.0331*x^5-0.1377*x^4-0.0503*x^3+0.6305*x^2-0.4852*x+0.0048][ -0.0693*x^5+0.2184*x^4+0.3961*x^3-1.2116*x^2-0.3166*x+1.0033][ 0.0687*x^5-0.1469*x^4-0.5398*x^3+0.6528*x^2+0.9673*x-0.0097][ -0.0317*x^5+0.0358*x^4+0.2530*x^3-0.0426*x^2-0.2257*x+0.0023][ 0.0049*x^5+0.0004 *x^4-0.0266*x^3+0.0001*x^2+0.0220*x-0.0002]估计其误差的公式为,.6.2.6 拉格朗日插值及其误差估计的MATLAB程序拉格朗日插值及其误差估计的MATLAB主程序function [y,R]=lagranzi(X,Y,x,M)n=length(X); m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0; q1=1.0; c1=1.0;for j=1:nif j~=kp=p*(z-X(j))/(X(k)-X(j));endq1=abs(q1*(z-X(j)));c1=c1*j;ends=p*Y(k)+s;endy(i)=s;endR=M*q1/c1;例 6.2.6已知,,,用拉格朗日插值及其误差估计的MATLAB主程序求的近似值,并估计其误差.解在MATLAB工作窗口输入程序>> x=2*pi/9; M=1; X=[pi/6 ,pi/4, pi/3];Y=[0.5,0.7071,0.8660]; [y,R]=lagranzi(X,Y,x,M)运行后输出插值y及其误差限R为y = R =0.6434 8.8610e-004.6.3 牛顿(Newton)插值及其MATLAB程序6.3.3 牛顿插值多项式、差商和误差公式的MATLAB程序求牛顿插值多项式和差商的MATLAB主程序function [A,C,L,wcgs,Cw]= newploy(X,Y)n=length(X); A=zeros(n,n); A(:,1)=Y';s=0.0; p=1.0; q=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));endb=poly(X(j-1));q1=conv(q,b); c1=c1*j; q=q1;endC=A(n,n); b=poly(X(n)); q1=conv(q1,b);for k=(n-1):-1:1C=conv(C,poly(X(k))); d=length(C); C(d)=C(d)+A(k,k);endL(k,:)=poly2sym(C); Q=poly2sym(q1);syms Mwcgs=M*Q/c1; Cw=q1/c1;例 6.3.3 给出节点数据,,,,,,作五阶牛顿插值多项式和差商,并写出其估计误差的公式.解(1)保存名为newpoly.m的M文件.(2)输入MATLAB程序>> X=[-2.15 -1.00 0.01 1.02 2.03 3.25];Y=[17.03 7.24 1.05 2.03 17.06 23.05];[A,C,L,wcgs,Cw]= newdcw (X,Y)运行后输出差商矩阵A,五阶牛顿插值多项式L及其系数向量C, 插值余项公式L及其向量C w如下A =17.0300 0 0 0 0 07.2400 -8.5130 0 0 0 01.0500 -6.1287 1.1039 0 0 02.0300 0.97033.5144 0.7604 0 017.0600 14.8812 6.8866 1.1129 0.0843 023.0500 4.9098 -4.4715 -3.5056 -1.0867 -0.2169C =-0.2169 0.0648 2.1076 3.3960 -4.5745 1.0954 L =-7813219284746629/36028797018963968*x^5+583849564517807/900719925 4740992*x^4+593245028711263/281474976710656*x^3+3823593773002357/11258999 06842624*x^2-321902673270315/70368744177664*x+308328649211299/28147497671 0656wcgs =1/720*M*(x^6-79/25*x^5-14201/2500*x^4+4934097026900981/2814749767106 56*x^3+154500712237335/35184372088832*x^2-8170642380559269/56294995342131 2*x+5212760744134241/36028797018963968)Cw =0.0014 -0.0044 -0.0079 0.0243 0.0061 -0.0202 0.0002即L =1.0954-4.5745*x+3.3960*x^2+2.1076*x^3+0.0648*x^4-0.2169*x^5.估计其误差的公式为,.例6.3.4 求函数e在上五阶牛顿插值多项式,估计其误差的公式和误差限公式.用它们计算,并估计其误差.解(1)输入MATLAB程序>> X=2:4/5:6; Y=-7*exp(-X/5);[A,C,L,wcgs,Cw]= newploy(X,Y), x1=2:0.001:6;M=max(-7*exp(-x1/5)/(5^6)),运行后输出差商矩阵A,五阶牛顿插值多项式L及其系数向量C, 插值余项公式L及其向量C w如下A =-4.6922 0 0 0 0 0-3.9985 0.8672 0 0 0 0-3.4073 0.7390 -0.0801 0 0 0-2.9035 0.6297 -0.0683 0.0049 0 0-2.4742 0.5366 -0.0582 0.0042 -0.0002 0-2.1084 0.4573 -0.0496 0.0036 -0.0002 0.0000C =0.0000 -0.0004 0.0089 -0.1389 1.3985 -6.9991L =9721799720875/1152921504606846976*x^5-3503994098647815/922337 2036854775808*x^4+160742008798419/18014398509481984*x^3-1251152213853501/9007199254740992*x^2+6298131904328647/4503599627370496*x-394015692955401 3/562949953421312wcgs =1/720*M*(x^6-24*x^5+1172/5*x^4-5952/5*x^3+7276634802928539/219902 3255552*x^2-5237461186650519/1099511627776*x+6085939356447121/21990232555 52)Cw =0.0014 -0.0333 0.3256 -1.6533 4.5959 -6.6159 3.8438M =-1.3494e-004(2)输入MATLAB程序>> syms xwcgs1=1/720*M*1/720*M*(x^6-24*x^5+1172/5*x^4-5952/5*x^3+7 276634802928539/2199023255552*x^2-5237461186650519/1099511627776* x+6085939356447121/2199023255552),运行后输出误差限公式wcgs1如下wcgs1 =5565367633581443/158456325028528675187087900672*x^6-16696102 900744329/19807040628566084398385987584*x^5+1630652716639362799/1 98070406285660843983859875840*x^4-517579189923074199/123794003928 53802748991242240*x^3+40497147813610772932297365501777/3484491437 27040986586495598010130648530944*x^2-2914839697032385527000116471 8917/174224571863520493293247799005065324265472*x+338704899143102 83926665276375603/348449143727040986586495598010130648530944(3)输入MATLAB程序>> x=3.156;y=9721799720875/1152921504606846976*x^5-3503994098647815/9 223372036854775808*x^4+160742008798419/18014398509481984*x^3-1251 152213853501/9007199254740992*x^2+6298131904328647/45035996273704 96*x-3940156929554013/562949953421312wcgs2=1/720*M*(x^6-24*x^5+1172/5*x^4-5952/5*x^3+7276634802 928539/2199023255552*x^2-5237461186650519/1099511627776*x+6085939 356447121/2199023255552)运行后输出的近似值y,及其误差限wcgs2如下y =-3.7237wcgs2 =-2.4764e-0076.3.4 牛顿插值及其误差估计的MATLAB程序牛顿插值及其误差估计的MATLAB主程序function [y,R]= newcz(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;例6.3.5 已知,,,用牛顿插值法求的近似值,估计其误差,并与例 6.2.6的计算结果比较.解方法1(牛顿插值及其误差估计的MATLAB主程序)输入MATLAB程序>> x=2*pi/9;M=1; X=[pi/6 ,pi/4, pi/3];Y=[0.5,0.7071,0.8660]; [y,R]= newcz(X,Y,x,M)运行后输出y = R =0.6434 8.8610e-004方法2 (求牛顿插值多项式和差商的MATLAB主程序)输入MATLAB程序>> x=2*pi/9; X=[pi/6 ,pi/4, pi/3];Y=[0.5,0.7071,0.8660]; M=1;[A,C,L,wcgs,Cw]= newploy(X,Y), y=polyval(C,x)运行后输出结果A =0.5000 0 00.7071 0.7911 00.8660 0.6070 -0.3516C =-0.3516 1.2513 -0.0588L =-1583578379808357/4503599627370496*x^2+1408883391907005/11 25899906842624*x-132405829044691/2251799813685248wcgs =1/6*M*(x^3-3/4*x^2*pi+4012734077357799/2251799813685248*x-7757769783530263/18014398509481984)Cw =0.1667 -0.3927 0.2970 -0.0718y =0.6434上述两种方法计算y的结果相同.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给出节点数据,,,,作三阶牛顿插值多项式,计算,并估计其误差.解首先将名为newdscg.m的程序保存为M文件,然后在MA TLAB工作窗口输入程序>> 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及其误差限公式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例 6.3.7 将区间[0,π/2] 分成等份,用产生个节点,求二阶和三阶牛顿插值多项式和.用它们分别计算sin (π/7) (取四位有效数字),并估计其误差.解首先将名为newdscg.m的程序保存为M文件,然后在MA TLAB工作窗口输入程序>> X1=0:pi/4:pi/2; Y1 =sin(X1); M=1; x=pi/7;X2=0:pi/6:pi/2; Y2 =sin(X2);[y1,R1,A1,C1,P2]=newdscg(X1,Y1,x,M),[y2,R2,A2,C2,P3]=newdscg(X2,Y2,x,M)运行后输出插值y1=和y2=及其误差限R1和R2,二阶和三阶牛顿插值多项式P2和P3及其系数向量C1和C2,差商的矩阵A1和A2如下y1 =0.4548R1 =0.0282A1 =0 0 00.7071 0.9003 01.0000 0.3729 -0.3357C1 =-0.3357 1.1640 0P2 =-3024156947890437/9007199254740992*x^2+163820246322191/140737488355328*x y2 =0.4345R2 =9.3913e-004A2 =0 0 0 00.5000 0.9549 0 00.8660 0.6991 -0.2443 01.0000 0.2559 -0.4232 -0.1139C2 =-0.1139 -0.0655 1.0204 0P3 =-1025666884451963/9007199254740992*x^3-4717668559161127/720 57594037927936*x^2+4595602396951547/4503599627370496*x6.4 埃尔米特(Hermite)插值及其MATLAB程序6.4.3 埃尔米特插值多项式和误差公式的MATLAB程序求埃尔米特插值多项式和误差公式的MATLAB主程序function [Hc, Hk,wcgs,Cw]= hermite (X,Y,Y1)m=length(X); n=M1;s=0; H=0;q=1;c1=1; L=ones(m,m);G=ones(1,m);for k=1:n+1V=1;for i=1:n+1if k~=is=s+(1/(X(k)-X(i)));V=conv(V,poly(X(i)))/(X(k)-X(i));endh=poly(X(k)); g=(1-2*h*s); G=g*Y(k)+h*Y1(k);endH=H+conv(G,conv(V,V)); b=poly(X(k));b2=conv(b,b);q=conv(q,b2); t=2*n+2;Hc=H;Hk=poly2sym (H); Q=poly2sym(q);endfor i=1:tc1=c1*i;endsyms M,wcgs=M*Q/c1; Cw=q/c1;例 6.4.3 给定函数在点处的函数值,,和导数值,,,且,求函数在点处的五阶埃尔米特插值多项式和误差公式,计算并估计其误差.解(1)保存名为hermite.m的M文件.(2)在MATLAB工作窗口输入程序>>X=[pi/6,pi/4,pi/2]; Y=[0.5,0.7071,1];Y1=[0.8660,0.7071,0]; [Hc, Hk,wcgs,Cw]= hermite (X,Y,Y1)运行后输出五阶埃尔米特插值多项式H k及其系数向量H c,误差公式wcgs及其系数向量C w 如下Hc =1.0e+003 *0.1912 -0.9273 1.6903 -1.4380 0.5751 -0.0866Hk =6725828781679091/35184372088832*x^5-4078286086775209/439804 6511104*x^4+7434035571017927/4398046511104*x^3-3162205449085973/2 199023255552*x^2+5058863928652835/8796093022208*x-6094057839958843/70368744177664wcgs =1/720*M*(x^6-11/6*x^5*pi+7446708432019761/562949953421312*x ^4-4363745503235773/281474976710656*x^3+21569239021155/2199023255 552*x^2-7178073637328281/2251799813685248*x+3758430567659515/9007 199254740992)Cw =0.0014 -0.0080 0.0184 -0.0215 0.0136 -0.0044 0.0006当时的误差公式为R=0.001 4* x^6-0.008 0*x^5+0.018 4*x^4-0.021 5*x^3+0.013 6*x^2-0.004 4*x+0.000 6(3)在MATLAB工作窗口输入程序>> x=1.567;M=1;Hk=6725828781679091/35184372088832*x^5-4078286086775209/43 98046511104*x^4+7434035571017927/4398046511104*x^3-316220544908597 3/2199023255552*x^2+5058863928652835/8796093022208*x-6094057839958 843/70368744177664,wcgs=1/720*M*(x^6-11/6*x^5*pi+7446708432019761/56294995342 1312*x^4-4363745503235773/281474976710656*x^3+21569239021155/21990 23255552*x^2-7178073637328281/2251799813685248*x+3758430567659515/ 9007199254740992)运行后输出的近似值Hk及其误差wcgs如下Hk =2.5265wcgs =1.3313e-0086.5 分段插值及其MATLAB程序6.5.1 高次插值的振荡和MATLAB程序例 6.5.1作下列函数在指定区间上的次拉格朗日插值多项式的图形,并讨论插值多项式的次数与误差的关系.(1),;(2),.解将计算次拉格朗日插值多项式的值的MATLAB程序保存名为lagr1.m 的M文件.function y=lagr1(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(1)现提供作次拉格朗日插值多项式的图形的MATLAB程序,保存名为Li1.m 的M文件m=150; x=-pi:2*pi/(m-1): pi;y=tan(cos((3^(1/2)+sin(2*x))./(3+4*x.^2)));plot(x,y,'k-'),gtext('y=tan(cos((sqrt(3)+sin(2x))/(3+4x^2)))'),pausen=3; x0=-pi:2*pi/(3-1):pi;y0=tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));y1=lagr1(x0,y0,x);hold on,plot(x,y1,'g<'),gtext('n=2'),pause,hold offn=5; x0=-pi:2*pi/(n-1):pi;y0=tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));y2=lagr1(x0,y0,x);hold on,plot(x,y2,'b:'),gtext('n=4'),pause,hold offn=7; x0=-pi:2*pi/(n-1):pi;y0=tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));y3=lagr1(x0,y0,x);hold on,plot(x,y3,'rp'),gtext('n=6'),pause,hold offn=9; x0=-pi:2*pi/(n-1):pi;y0=tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));y4=lagr1(x0,y0,x);hold on,plot(x,y4,'m*'),gtext('n=8'),pause,hold offn=11; x0=-pi:2*pi/(n-1):pi;y0=tan(cos((3^(1/2)+sin(2*x0))./(3+4*x0.^2)));y5=lagr1(x0,y0,x);hold on,plot(x,y5,'g:'),gtext('n=10')title('高次拉格朗日插值的振荡')在MA TLAB工作窗口输入名为Li1.m的M文件的文件名>> Li1.m回车运行后,便会逐次画出在区间上的次拉格朗日插值多项式的图形(略).(2)在MA TLAB工作窗口输入程序m=101; x=-5:10/(m-1):5; y=1./(1+x.^2);z=0*x;plot(x,z,'r',x,y,'k-'),gtext('y=1/(1+x^2)'),pausen=3; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);y1=lagr1(x0,y0,x);hold on,plot(x,y1,'g'),gtext('n=2'),pause,hold offn=5; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);y2=lagr1(x0,y0,x);hold on,plot(x,y2,'b:'),gtext('n=4'),pause,hold offn=7; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);y3=lagr1(x0,y0,x);hold on,plot(x,y3,'r'),gtext('n=6'),pause,hold offn=9; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);y4=lagr1(x0,y0,x);hold on,plot(x,y4,'r:'),gtext('n=8'),pause,hold offn=11; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);y5=lagr1(x0,y0,x);hold on,plot(x,y5,'m'),gtext('n=10')title('高次拉格朗日插值的振荡')回车运行后,便会逐次画出在区间上的次拉格朗日插值多项式的图形(略).6.5.4 作有关分段线性插值图形的MATLAB程序作有关分段线性插值图形的MATLAB主程序function s= xxczhjt1(x0,y0,xi,x,y)s= interp1(x0,y0,xi);Sn= interp1(x0,y0,x0);plot(x0,y0,'o',x0,Sn,'-',xi,s,'*',x,y,'-.')legend('节点(xi,yi)','分段线性插值函数Sn(x)','插值点(x,s)','被插值函数y')我们也可以直接在在MA TLAB工作窗口编程序.例如,>> x0 =-6:6; y0 =sin(x0);xi = -6:.25:6;yi = interp1(x0,y0,xi);x=-6:0.001:6; y=sin(x);plot(x0,y0,'o',xi,yi,x,y,':'),legend('节点(xi,yi)','分段线性插值函数','被插值函数y=sinx ')title('y=sinx及其分段线性插值函数和节点的图形')>> x0 =-6:6; y0 =cos(x0);xi = -6:.25:6;yi = interp1(x0,y0,xi);x=-6:0.001:6; y=cos(x); plot(x0,y0,'o',xi,yi,x,y,':'),legend('节点(xi,yi)','分段线性插值函数','被插值函数y=cosx ')title('y=cosx及其分段线性插值函数和节点的图形')例6.5.5设函数,在区间上取等距节点,构造分段线性插值函数,用MA TLAB程序计算各小区间的中点处的值,作出节点,插值点,和的图形.解节点的横坐标和插值点等取值与例6.5.4相同.在MATLAB工作窗口输入程序>>x0=-1:0.2:1; y0=1./(1+25.*x0.^2);xi=-0.9:0.2:0.9;b=max(x0);a=min(x0);x=a:0.001:b;y=1./(1+25.*x.^2);s=xxczhjt1(x0,y0,xi,x,y), title('y=1/(1+25 x^2)的分段线性插值的有关图形')运行后屏幕显示各小区间中点处的值,出现节点,插值点,和的图形(略)s =Columns 1 through 40.04864253393665 0.07941176470588 0.15000000000000 0.35000000000000Columns 5 through 80.75000000000000 0.75000000000000 0.35000000000000 0.15000000000000Columns 9 through 100.07941176470588 0.048642533936656.5.5 用MATLAB计算有关分段线性插值的误差例6.5.8设函数,在区间上取等距节点,,构造分段线性插值函数.(1)用MA TLAB程序计算各小区间中点处的值,作出节点,插值点,和的图形;(2) 用MA TLAB程序计算各小区间中点处的值及其相对误差;(3) 用MA TLAB程序估计和在区间上的误差限.解在MATLAB工作窗口输入程序>>h=2*pi/9; x0=-pi:h:pi;y0=tan(cos((sqrt(3)+sin(2*x0))./(3+4*x0.^2)));xi=-pi+h/2:h:pi-h/2;fi=tan(cos((3^(1/2)+sin(2*xi))./(3+4*xi.^2)));b=max(x0); a=min(x0);x=a:0.001:b; y=tan(cos((sqrt(3)+sin(2.*x))./(3+4*x.^2)));si=xxczhjt1(x0,y0,xi,x,y);Ri=abs((fi-si)./fi);xi,fi,si,Ri,i=[xi',fi',si',Ri']title('y=tan(cos((sqrt(3)+sin(2 x))/(3+4 x^2)))的分段线性插值的有关图形')运行后屏幕显示R i(略),并且作出节点,插值点,和的图形(略).在MATLAB工作窗口输入程序>> syms xy=tan(cos((3^(1/2)+sin(2*x))/(3+4*x^2)));yxx=diff(y,x,2),运行后屏幕显示函数的二阶导数(略).在MATLAB工作窗口输入程序>> h=2*pi/9; x=-pi:0.0001:-pi;yxx=2*tan(cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2))).*(1+tan(co s((3.^(1/2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3^(1/2)+sin(2.*x) )./(3+4.*x.^2)).^2.*(2*cos(2.*x)./(3+4*x.^2)-8*(3^(1/2)+sin(2.*x) )./(3+4.*x.^2).^2.*x).^2-(1+tan(cos((3^(1/2)+sin(2.*x))./(3+4.*x. ^2))).^2).*cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./ (3+4.*x.^2)-8*(3^(1/2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^2-(1+tan(c os((3^(1/2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1/2)+sin(2.*x ))./(3+4.*x.^2)).*(-4.*sin(2.*x)./(3+4.*x.^2)-32*cos(2.*x)./(3+4. *x.^2).^2.*x+128*(3^(1/2)+sin(2.*x))./(3+4.*x.^2).^3.*x.^2-8*(3^( 1/2)+sin(2.*x))./(3+4.*x.^2).^2);myxx=max(yxx), R=(h^2)* myxx/8运行后屏幕显示myxx =和在区间上的误差限如下myxx = R =-0.02788637150664 -0.001698934907116.6 分段埃尔米特插值及其MATLAB程序6.6.2 分段埃尔米特插值的MATLAB程序调用格式一:YI=interp1(X,Y,XI,'pchip')调用格式二:YI=interp1(X,XI,'pchip')例6.6.5试用MA TLAB程序计算例6.6.1中在各小区间中点处分段三次埃尔米特插值及其相对误差.解在MATLAB工作窗口输入程序>> h=0.2;x0=-1:h:1;y0=1./(1+25.*x0.^2); xi=-0.9:h:0.9;fi=1./(1+25.*xi.^2); yi=interp1(x0,y0,xi,'pchip');Ri=abs((fi-yi)./fi); xi,fi,yi,Ri,i=[xi',fi',yi',Ri']运行后屏幕显示各小区间中点x i处的函数值f i,插值s i,相对误差值R i (略).6.6.3 作有关分段埃尔米特插值图形的MATLAB程序作有关分段埃尔米特插值图形的MATLAB主程序function H=hermitetx(x0,y0,xi,x,y)H= interp1(x0,y0,xi,'pchip');Hn= interp1(x0,y0,x,'pchip');plot(x0,y0,'o',x,Hn,'-',xi,H,'*',x,y,'-.')legend('节点(xi,yi)', '分段埃尔米特插值函数','插值点(x,H)','被插值函数y')我们也可以直接在在MATLAB工作窗口编程序,例如,>> x0 =-6:6; y0 =sin(x0); xi = -6:.25:6;yi = interp1(x0,y0,xi,'pchip');x=-6:0.001:6; y=sin(x); plot(x0,y0,'o',xi,yi,x,y,':'),legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数y=sinx')title(' y=sinx及其分段埃尔米特插值函数和节点的图形')>> x0 =-6:6; y0 =cos(x0);xi = -6:.25:6;yi = interp1(x0,y0,xi,'pchip');x=-6:0.001:6; y=cos(x); plot(x0,y0,'o',xi,yi,x,y,':'),legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数y=cosx')title(' y=cosx及其分段埃尔米特插值函数和节点的图形')例6.6.6设函数定义在区间上,节点(X(i),(X (i)))的横坐标向量X的元素是首项a=-5,末项b=5,公差h=1.5的等差数列,构造三次分段埃尔米特插值函数.把区间分成20等份,构成20个小区间,用MA TLAB程序计算各小区间中点处的值,并作出节点,插值点,和的图形.解在MATLAB工作窗口输入程序>>x0=-5:1.5:5;y0=1./(1+x0.^2); x1=-4.75:0.5:4.75;x=-5:0.001:5; y=1./(1+x.^2); H= hermitetx(x0,y0,x1,x,y)title('函数y=1/(1+x^2)及其分段埃尔米特插值函数,插值,节点(xi,yi) 的图形')运行后屏幕显示各小区间中点处的值,出现节点,插值点,和的图形(略).例6.6.7设函数定义在区间上,取,按等距节点构造分段埃尔米特插值函数,用MA TLAB程序计算各小区间中点处的值,作出节点,插值点,和的图形.解记节点的横坐标插值点,.在MA TLAB工作窗口输入程序>> h=2*pi/7; x0=-pi:h:pi;y0=0.5.*x0-cos(x0); xi=-pi+h/2:h:pi-h/2;b=max(x0); a=min(x0); x=a:0.001:b;y=0.5.*x-cos(x); H= hermitetx(x0,y0,xi,x,y)title('函数y=0.5x-cos(x)及其分段埃尔米特插值函数,插值,节点(xi,yi) 的图形')运行后屏幕显示各小区间中点处的值,出现节点,插值点,和的图形(略).6.6.4 用MATLAB计算有关分段埃尔米特插值的误差例6.6.8 设函数定义在区间上,取,按等距节点构造分段埃尔米特插值函数,用MA TLAB程序在上计算和的误差公式和误差限.解在MATLAB工作窗口输入程序>> syms h,x=-1:0.0001:1;yxxxx=150000000./(1+25.*x.^2).^5.*x.^4-4500000./(1+25.*x.^2 ).^4.*x.^2+15000./(1+25.*x.^2).^3;myxxxx=max(yxxxx), R=(h^4)* abs(myxxxx/384)运行后输出的4阶导数在区间上绝对值的最大值myxxxx和在区间上的误差公式myxxxx为myxxxx = R =15000 625/16*h^4(4)在MATLAB工作窗口输入程序>> h=0.2; R =625/16*h^4运行后输出误差限为R =0.06250000000000例6.6.9 设函数定义在区间上,取,按等距节点构造分段埃尔米特插值函数.(1)用MA TLAB程序计算各小区间中点处的值,作出节点,插值点,和的图形;(2) 并用MA TLAB程序计算各小区间中点处的值及其相对误差;(3) 用MA TLAB程序求和在区间上的误差公式和各插值的误差限.解(1)记节点的横坐标,插值点,.在MATLAB工作窗口输入程序>>h=2*pi/9; x0=-pi:h:pi;y0=tan(cos((sqrt(3)+sin(2*x0))./(3+4*x0.^2)));xi=-pi+h/2:h:pi-h/2;fi=tan(cos((3^(1/2)+sin(2*xi))./(3+4*xi.^2)));b=max(x0); a=min(x0); x=a:0.001:b;y=tan(cos((3^(1/2)+sin(2.*x))./(3+4*x.^2)));Hi= hermite tx(x0,y0,xi,x,y);Ri=abs((fi-Hi)./fi); xi,fi,Hi,Ri,i=[xi',fi',Hi',Ri']title('函数y=tan(cos((sqrt(3)+sin(2x))/(3+4x^2)))及其分段埃尔米特插值函数,插值,节点(xi,yi) 的图形')运行后屏幕显示各小区间中点x i处的函数值f i,插值H i,相对误差值R i,并且作出节点,插值点,和的图形(略).(2)在MATLAB工作窗口输入程序>> syms xy=tan(cos((3^(1/2)+sin(2*x))/(3+4*x^2)));yxxxx=diff(y,x,4),%simple(yxxxx)运行后屏幕显示函数的4阶导数,然后将输出的编程求和及其在区间上的误差限的MA TLAB程序如下>>syms h,x=-pi:0.0001:pi;yxxxx=-12.*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2) )).^2).^2.*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)).^3.*(2.*cos(2 .*x)./(3.+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^2.*x). ^2.*(-4.*sin(2.*x)./(3.+4.*x.^2)-32.*cos(2.*x)./(3.+4.*x.^2).^2.* x+128.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^3.*x.^2.-8.*(3.^(1./2 )+sin(2.*x))./(3.+4.*x.^2).^2)+16.*(1.+tan(cos((3.^(1./2)+sin(2.* x))./(3.+4.*x.^2))).^2).^2.*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^ 2)).^4.*(2.*cos(2.*x)./(3.+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3. +4.*x.^2).^2.*x).^4.*tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)) )+8.*tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).^3.*(1.+tan(co s((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2 .*x))./(3+4.*x.^2)).^4.*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+ sin(2.*x))./(3.+4.*x.^2).^2.*x).^4-8.*tan(cos((3.^(1./2)+sin(2.*x ))./(3.+4.*x.^2))).*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4*x.^2 ))).^2).*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)).^2.*(2.*cos(2.* x)./(3.+4.*x.^2)-8*(3.^(1./2)+sin(2.*x))./(3.+4*x.^2).^2.*x).^4+6 .*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1 ./2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^ (1./2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^2.*(-4.*sin(2.*x)./(3+4.*x .^2)-32.*cos(2.*x)./(3+4.*x.^2).^2.*x+128.*(3.^(1./2)+sin(2.*x)). /(3+4.*x.^2).^3.*x.^2-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2)+( 1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*cos((3.^(1./2 )+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1. /2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^4-3.*(1+tan(cos((3.^(1./2)+si n(2.*x))./(3+4.*x.^2))).^2).*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^ 2)).*(-4.*sin(2.*x)./(3+4.*x.^2)-32.*cos(2.*x)./(3+4.*x.^2).^2.*x +128.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^3.*x.^2-8.*(3.^(1./2)+s in(2.*x))./(3+4.*x.^2).^2).^2-4.*(1+tan(cos((3.^(1./2)+sin(2.*x)) ./(3+4.*x.^2))).^2).*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*(2. *cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2. *x).*(-8.*cos(2.*x)./(3+4.*x.^2)+96.*sin(2.*x)./(3+4.*x.^2).^2.*x +768.*cos(2.*x)./(3+4.*x.^2).^3.*x.^2-48.*cos(2.*x)./(3+4.*x.^2). ^2-3072.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^4.*x.^3+384.*(3.^(1. /2)+sin(2.*x))./(3+4.*x.^2).^3.*x)-(1+tan(cos((3.^(1./2)+sin(2.*x ))./(3+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*( 16.*sin(2.*x)./(3+4.*x.^2)+256.*cos(2.*x)./(3+4.*x.^2).^2.*x-3072 .*sin(2.*x)./(3+4.*x.^2).^3.*x.^2+192.*sin(2.*x)./(3+4.*x.^2).^2-24576.*cos(2.*x)./(3+4.*x.^2).^4.*x.^3+3072.*cos(2.*x)./(3+4.*x.^ 2).^3.*x+98304.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^5.*x.^4-18432 .*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^4.*x.^2+384.*(3.^(1./2)+sin (2.*x))./(3+4.*x.^2).^3)-12.*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3 +4.*x.^2))).^2).^2*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).^2.*(2 .*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2 .*x).^4.*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))-24.*tan(cos((3.^ (1./2)+sin(2.*x))./(3+4.*x.^2))).^2.*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)). ^3.*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x. ^2).^2.*x).^2.*(-4.*sin(2.*x)./(3+4.*x.^2)-32.*cos(2.*x)./(3+4.*x .^2).^2.*x+128.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^3.*x.^2-8.*(3 .^(1./2)+sin(2.*x))./(3+4.*x.^2).^2)-24.*tan(cos((3.^(1./2)+sin(2 .*x))./(3+4.*x.^2))).^2.*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.* x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).^2.*(2.*cos( 2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^ 4.*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))+36.*tan(cos((3.^(1./2) +sin(2.*x))./(3+4.*x.^2))).*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+ 4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos( 2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^ 2.*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*(-4.*sin(2.*x)./(3+4. *x.^2)-32.*cos(2.*x)./(3+4.*x.^2).^2.*x+128.*(3.^(1./2)+sin(2.*x) )./(3+4.*x.^2).^3.*x.^2-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2) +6.*tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).*(1+tan(cos((3.^ (1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*cos((3.^(1./2)+sin(2.*x))./ (3+4.*x.^2)).^2.*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.* x))./(3+4.*x.^2).^2.*x).^4+6.*tan(cos((3.^(1./2)+sin(2.*x))./(3+4 .*x.^2))).*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*s in((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).^2.*(-4.*sin(2.*x)./(3+4.* x.^2)-32.*cos(2.*x)./(3+4.*x.^2).^2.*x+128.*(3.^(1./2)+sin(2.*x)) ./(3+4.*x.^2).^3.*x.^2-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2). ^2+8.*tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).*(1+tan(cos((3 .^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x)) ./(3+4.*x.^2)).^2.*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2 .*x))./(3+4.*x.^2).^2.*x).*(-8.*cos(2.*x)./(3+4.*x.^2)+96.*sin(2. *x)./(3+4.*x.^2).^2.*x+768.*cos(2.*x)./(3+4.*x.^2).^3.*x.^2-48.*c os(2.*x)./(3+4.*x.^2).^2-3072.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2) .^4.*x.^3+384.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^3.*x) myxx=max(yxxxx), R=(h.^4).* abs(myxx./384)将其保存为名为myxx.m的M文件,然后在MATLAB工作窗口输入该文件名>> myxx运行后屏幕显示myxx =和在区间上的误差公式如下myxx = R =73.94706841647552 1734520780029061/9007199254740992*h^4最后在MATLAB工作窗口输入>>h=2*pi/9; R =1734520780029061/9007199254740992*h^4运行后屏幕显示在区间上的误差限R =0.045744530299486.7 三次样条(Spline)及其MATLAB程序6.7.4 用一阶导数计算的几种样条函数和MATLAB程序计算压紧样条的MATLAB主程序function[m,H,lambda,mu,D,A,dY,sk]=ClampedSp (X,Y,dyo,dyn)m=length(X);A=zeros(m,m);n=m-1;H=zeros(1,n);lambda=zeros(1,n);mu=zeros(1,n);lambda(1)=0;A(1,1)=2;A(1,2)=lambda(1);。