c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值

1.1.Hermite插值多项式

如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值,这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的 Hermite 插值。

设已知函数

math?formula=y%3Df(x)

math?formula=n%2B1个互异节点

math?formula=x_%7B0%7D%2C%20x_%7B1%7D%2C%20%5Ccdots%2C%20x_%7Bn%7D上的函数值

math?formula=y_%7Bi%7D%3Df%5Cleft(x_%7Bi%7D%5Cright)(i%3D0%2C1%2C%20%5Ccdots%2C%20n)和导数值

math?formula=y_%7Bi%7D%5E%7B%5Cprime%7D%3Df%5E%7B%5Cprime%7D%5Cleft(x_%7Bi%7D%5Cright)%20%5Cquad(i%3D0%2C1%2C%20%5Ccdots%2C%20n),要求一个至多

math?formula=2%20n%2B1次的多项式

math?formula=H(x),使得:

math?formula=H%5Cleft(x_%7Bi%7D%5Cright)%3Dy_%7Bi%7D%20%5Cquad%20H%5E%7B%5Cprime%7D%5Cleft(x_%7Bi%7D%5Cright)%3Dy_%7Bi%7D%5E%7B%5Cprime%7D%20%5Cquad(i%3D0%2C1%2C%20%5Ccdots%2C%20n)

满足上述条件的多项式

math?formula=H(x)称为Hermite多项式。

Hermite 插值多项式为:

math?formula=H(x)%3D%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%20h_%7Bi%7D%5Cleft%5B%5Cleft(x_%7Bi%7D-x%5Cright)%5Cleft(2%20a_%7Bi%7D%20y_%7Bi%7D-y_%7Bi%7D%5E%7B%5Cprime%7D%5Cright)%2By_%7Bi%7D%5Cright%5D

其中:

math?formula=h_%7Bi%7D%3D%5Cprod_%7Bj%3D0%20%5Catop%20j%20%5Cneq%20i%7D%5E%7Bn%7D%5Cleft(%5Cfrac%7Bx-x_%7Bj%7D%7D%7Bx_%7Bi%7D-x_%7Bj%7D%7D%5Cright)%5E%7B2%7D%2C%20%5Cquad%20a_%7Bi%7D%3D%5Csum_%7Bj%3D0%20%5Catop%20j%20%5Cneq%20i%7D%5E%7Bn%7D%20%5Cfrac%7B1%7D%7Bx_%7Bi%7D-x_%7Bj%7D%7D

1.2.用Matlab实现Hermite插值

Matlab 中没有现成的 Hermite 插值函数,必须编写一个 M 文件实现插值。

math?formula=n个节点的数据以数组

math?formula=x0(已知点的横坐标),

math?formula=y0(函数值),

math?formula=y1(导数值)输入(注意 Matlat 的数组下标从 1 开始),

math?formula=m个插值点以数组

math?formula=x输入,输出数组

math?formula=y

math?formula=m个插值。编写一个名为herite.m的M文件:

function y=hermite(x0,y0,y1,x);

n=length(x0);m=length(x);

for k=1:m

yy=0.0;

for i=1:n

h=1.0;

a=0.0;

for j=1:n

if j~=i

h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;

a=1/(x0(i)-x0(j))+a;

end

end

yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));

end

y(k)=yy;

end

2.样条插值

许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞机的机翼外形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续,而且要有连续的曲率,这就导致了样条插值的产生。

2.1.样条函数的概念

所谓样条(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木条或细金属条。绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并使连接点处有连续的曲率。

数学上将具有一定光滑性的分段多项式称为样条函数。具体地说,给定区间

math?formula=%5Ba%2C%20b%5D的一个分划:

math?formula=%5CDelta%20%3A%20%5Cquad%20a%3Dx_%7B0%7D%3Cx_%7B1%7D%3C%5Ccdots%3Cx_%7Bn-1%7D%3Cx_%7Bn%7D%3Db

如果函数

math?formula=s(x)满足:

(1)在每个小区间

math?formula=%5Cleft%5Bx_%7Bi%7D%2C%20x_%7Bi-1%7D%5Cright%5D(i%3D0%2C1%2C%20%5Ccdots%2C%20n-1)

math?formula=s(x)

math?formula=k次多项式。

(2)

math?formula=s(x)

math?formula=%5Ba%2C%20b%5D上具有

math?formula=k-1

阶连续导数。

则称

math?formula=s(x)为关于分划

math?formula=%5CDelta

math?formula=k次样条函数,其图形称为

math?formula=k次样条函数。

math?formula=x_%7B0%7D%2C%20x_%7B1%7D%2C%20%5Ccdots%2C%20x_%7Bn%7D称为样条节点,

math?formula=x_%7B1%7D%2C%20x_%7B2%7D%2C%20%5Ccdots%2C%20x_%7Bn-1%7D称为内节点,

math?formula=x_%7B0%7D%2C%20x_%7Bn%7D称为边界点,这类样条函数的全体记做

math?formula=S_%7BP%7D(%5CDelta%2C%20k),则

math?formula=s(x)是关于分划

math?formula=%5CDelta

math?formula=k次多项式样条函数。

math?formula=k次多项式样条函数的一般形式为:

math?formula=s_%7Bk%7D(x)%3D%5Csum_%7Bi%3D0%7D%5E%7Bk%7D%20%5Cfrac%7B%5Calpha_%7Bi%7D%20x%5E%7Bi%7D%7D%7Bi%20!%7D%2B%5Csum_%7Bj%3D1%7D%5E%7Bn-1%7D%20%5Cfrac%7B%5Cbeta_%7Bj%7D%7D%7Bk%20!%7D%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7Bk%7D

其中

math?formula=%5Calpha_%7Bi%7D(i%3D0%2C1%2C%20%5Ccdots%2C%20k)

math?formula=%5Cbeta_%7Bj%7D(j%3D1%2C2%2C%20%5Ccdots%2C%20n-1)均为任意常数,而:

math?formula=%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7Bk%7D%3D%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cleft(x-x_%7Bj%7D%5Cright)%5E%7Bk%7D%2C%20x%20%5Cgeq%20x_%7Bj%7D%7D%20%5C%5C%20%7B0%2C%20%5Cquad%20x%3Cx_%7Bj%7D%7D%5Cend%7Barray%7D%2C%20%5Cquad(j%3D1%2C2%2C%20%5Ccdots%2C%20n-1)%5Cright.

在实际中最常用的是

math?formula=k%3D2或3的情况,即为二次样条函数和三次样条函数。

二次样条函数:

对于

math?formula=%5Ba%2C%20b%5D上的分划

math?formula=%5CDelta%20%3A%20a%3Dx_%7B0%7D%3Cx_%7B1%7D%3C%5Ccdots%3Cx_%7Bn%7D%3Db,则:

math?formula=s_%7B2%7D(x)%3D%5Calpha_%7B0%7D%2B%5Calpha_%7B1%7D%20x%2B%5Cfrac%7B%5Calpha_%7B2%7D%7D%7B2%20!%7D%20x%5E%7B2%7D%2B%5Csum_%7Bj%3D1%7D%5E%7Bn-1%7D%20%5Cfrac%7B%5Cbeta_%7Bj%7D%7D%7B2%20!%7D%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7B2%7D%20%5Cin%20S_%7BP%7D(%5CDelta%2C%202)

其中:

math?formula=%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7B2%7D%3D%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cleft(x-x_%7Bj%7D%5Cright)%5E%7B2%7D%2C%20x%20%5Cgeq%20x_%7Bj%7D%7D%20%5C%5C%20%7B0%2C%20%5Cquad%20x%3Cx_%7Bj%7D%7D%5Cend%7Barray%7D%2C%20%5Cquad(j%3D1%2C2%2C%20%5Ccdots%2C%20n-1)%5Cright.

三次样条函数:

对于

math?formula=%5Ba%2C%20b%5D上的分划

math?formula=%5CDelta%20%3A%20a%3Dx_%7B0%7D%3Cx_%7B1%7D%3C%5Ccdots%3Cx_%7Bn%7D%3Db,则:

math?formula=s_%7B2%7D(x)%3D%5Calpha_%7B0%7D%2B%5Calpha_%7B1%7D%20x%2B%5Cfrac%7B%5Calpha_%7B2%7D%7D%7B2%20!%7D%20x%5E%7B2%7D%2B%5Csum_%7Bj%3D1%7D%5E%7Bn-1%7D%20%5Cfrac%7B%5Cbeta_%7Bj%7D%7D%7B2%20!%7D%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7B2%7D%20%5Cin%20S_%7BP%7D(%5CDelta%2C%202)

其中:

math?formula=%5Cleft(x-x_%7Bj%7D%5Cright)_%7B%2B%7D%5E%7B3%7D%3D%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cleft(x-x_%7Bj%7D%5Cright)%5E%7B3%7D%2C%20x%20%5Cgeq%20x_%7Bj%7D%7D%20%5C%5C%20%7B0%2C%20%5Cquad%20x%3Cx_%7Bj%7D%7D%5Cend%7Barray%7D%2C%20%5Cquad(j%3D1%2C2%2C%20%5Ccdots%2C%20n-1)%5Cright.

利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。例如分段线性插值是一次样条插值。下面我们介绍二次、三次样条插值。

2.2.二次样条函数插值

首先,我们注意到

math?formula=s_%7B2%7D(x)%20%5Cin%20S_%7BP%7D(%5CDelta%2C%202)中含有

math?formula=n%2B2个特定常数,故应需要

math?formula=n%2B2 + n 个插值条件,因此,二次样条插值问题可分为两类:

问题(1):

已知插值节点

math?formula=x_%7Bi%7D和相应的函数值

math?formula=y_%7Bi%7D(i%3D0%2C1%2C%20%5Ccdots%2C%20n)以及端点

math?formula=x_%7B0%7D(或

math?formula=x_%7Bn%7D)处的导数值

math?formula=y_%7B0%7D%5E%7B%5Cprime%7D(或

math?formula=y_%7Bn%7D%5E%7B%5Cprime%7D),求

math?formula=s_%7B2%7D(x)%20%5Cin%20S_%7Bp%7D(%5CDelta%2C%202)使得:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bs_%7B2%7D%5Cleft(x_%7Bi%7D%5Cright)%3Dy_%7Bi%7D(i%3D0%2C1%2C2%2C%20%5Ccdots%2C%20n)%7D%20%5C%5C%20%7Bs_%7B2%7D%5E%7B%5Cprime%7D%5Cleft(x_%7B0%7D%5Cright)%3Dy_%7B0%7D%5Cleft(%E6%88%96s_%7Bn%7D%5E%7B%5Cprime%7D%5Cleft(x_%7Bn%7D%5Cright)%3Dy_%7Bn%7D%5Cright)%7D%5Cend%7Barray%7D%5Cright.

问题(2):

已知插值节点

math?formula=x_%7Bi%7D和相应的导数值

math?formula=y_%7Bi%7D%5E%7B%5Cprime%7D(i%3D0%2C1%2C2%2C%20%5Ccdots%2C%20n)以及端点

math?formula=x_%7B0%7D(或

math?formula=x_%7Bn%7D)处的函数值

math?formula=y_%7B0%7D(或

math?formula=y_%7Bn%7D),求

math?formula=s_%7B2%7D(x)%20%5Cin%20S_%7Bp%7D(%5CDelta%2C%202)使得:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bs_%7B2%7D%5E%7B%5Cprime%7D%5Cleft(x_%7Bi%7D%5Cright)%3Dy_%7Bi%7D%5E%7B%5Cprime%7D(i%3D0%2C1%2C2%2C%20%5Ccdots%2C%20n)%7D%20%5C%5C%20%7Bs_%7B2%7D%5Cleft(x_%7B0%7D%5Cright)%3Dy_%7B0%7D%5Cleft(%E6%88%96s_%7Bn%7D%5Cleft(x_%7Bn%7D%5Cright)%3Dy_%7Bn%7D%5Cright)%7D%5Cend%7Barray%7D%5Cright.

事实上,可以证明这两类插值问题都是唯一可解的。

对于问题(1)有:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bs_%7B2%7D%5Cleft(x_%7B0%7D%5Cright)%3D%5Calpha_%7B0%7D%2B%5Calpha_%7B1%7D%20x_%7B0%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5Calpha_%7B2%7D%20x_%7B0%7D%5E%7B2%7D%3Dy_%7B0%7D%7D%20%5C%5C%20%7Bs_%7B2%7D%5Cleft(x_%7B1%7D%5Cright)%3D%5Calpha_%7B0%7D%2B%5Calpha_%7B1%7D%20x_%7B1%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5Calpha_%7B2%7D%20x_%7B1%7D%5E%7B2%7D%3Dy_%7B1%7D%7D%20%5C%5C%20%7Bs_%7B2%7D%5Cleft(x_%7Bj%7D%5Cright)%3D%5Calpha_%7B0%7D%2B%5Calpha_%7B1%7D%20x_%7Bj%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5Calpha_%7B2%7D%20x_%7Bj%7D%5E%7B2%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5Csum_%7Bi%3D1%7D%5E%7Bk-1%7D%20%5Cbeta_%7Bi%7D%5Cleft(x_%7Bj%7D-x_%7Bi%7D%5Cright)%5E%7B2%7D%3Dy_%7Bj%7D%20%5Cquad(j%3D2%2C3%2C%20%5Ccdots%2C%20n)%7D%20%5C%5C%20%7Bs_%7B2%7D%5E%7B%5Cprime%7D%5Cleft(x_%7B0%7D%5Cright)%3D%5Calpha_%7B1%7D%2B%5Calpha_%7B2%7D%20x_%7B0%7D%3Dy_%7B0%7D%5E%7B%5Cprime%7D%7D%5Cend%7Barray%7D%5Cright.

引入记号

math?formula=X%3D%5Cleft(%5Calpha_%7B0%7D%2C%20%5Calpha_%7B1%7D%2C%20%5Calpha_%7B2%7D%2C%20%5Cbeta_%7B1%7D%2C%20%5Ccdots%2C%20%5Cbeta_%7Bn-1%7D%5Cright)%5E%7BT%7D为未知向量,

math?formula=C%3D%5Cleft(y_%7B0%7D%2C%20y_%7B1%7D%2C%20%5Ccdots%2C%20y_%7Bn%7D%2C%20y_%7B0%7D%5E%7B%5Cprime%7D%5Cright)为已知向量。

math?formula=A%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bcccccc%7D%7B1%7D%20%26%20%7Bx_%7B0%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%20x_%7B0%7D%5E%7B2%7D%7D%20%26%20%7B0%7D%20%26%20%7B%5Ccdots%7D%20%26%20%7B0%7D%20%5C%5C%20%7B1%7D%20%26%20%7Bx_%7B1%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%20x_%7B1%7D%5E%7B2%7D%7D%20%26%20%7B0%7D%20%26%20%7B%5Ccdots%7D%20%26%20%7B0%7D%20%5C%5C%20%7B1%7D%20%26%20%7Bx_%7B2%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%20x_%7B2%7D%5E%7B2%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%5Cleft(x_%7B2%7D-x_%7B1%7D%5Cright)%5E%7B2%7D%7D%20%26%20%7B%5Ccdots%7D%20%26%20%7B0%7D%20%5C%5C%20%7B%5Cvdots%7D%20%26%20%7B%5Cvdots%7D%20%26%20%7B%5Cvdots%7D%20%26%20%7B0%7D%20%26%20%7B%5Cvdots%7D%20%26%20%7B%5Cvdots%7D%20%5C%5C%20%7B1%7D%20%26%20%7Bx_%7Bn%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%20x_%7Bn%7D%5E%7B2%7D%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%5Cleft(x_%7Bn%7D-x_%7B1%7D%5Cright)%5E%7B2%7D%7D%20%26%20%7B%5Ccdots%7D%20%26%20%7B%5Cfrac%7B1%7D%7B2%7D%5Cleft(x_%7Bn%7D-x_%7Bn-1%7D%5Cright)%5E%7B2%7D%7D%20%5C%5C%20%7B0%7D%20%26%20%7B1%7D%20%26%20%7Bx_%7B0%7D%7D%20%26%20%7B0%7D%20%26%20%7B%5Ccdots%7D%20%26%20%7B0%7D%5Cend%7Barray%7D%5Cright%5D

于是,问题转化为求方程组

math?formula=AX%3DC的解

math?formula=X%3D%5Cleft(%5Calpha_%7B0%7D%2C%20%5Calpha_%7B1%7D%2C%20%5Calpha_%7B2%7D%2C%20%5Cbeta_%7B1%7D%2C%20%5Ccdots%2C%20%5Cbeta_%7Bn-1%7D%5Cright)%5E%7BT%7D的问题,即可得到二次样条函数

math?formula=s_%7B2%7D(x)的表达式。

对于问题(2)的情况类似。

2.3.三次样条函数插值

由于

math?formula=s_%7B3%7D(x)%20%5Cin%20S_%7Bp%7D(%5CDelta%2C%203)中含有

math?formula=n%2B3个待定系数。故应需要

math?formula=n%2B3个待定系数,已知插值节点

math?formula=x_%7Bi%7D和相应的函数值

math?formula=f%5Cleft(x_%7Bi%7D%5Cright)%3Dy_%7Bi%7D(i%3D0%2C1%2C2%2C%20%5Ccdots%2C%20n),这里提供了

math?formula=n%2B1个条件,还需要2个边界条件。

常用的三次样条函数的边界条件有 3 种类型:

(1)

math?formula=s_%7B3%7D%5E%7B%5Cprime%7D(a)%3Dy_%7B0%7D%5E%7B%5Cprime%7D%2C%20s_%7B3%7D%5E%7B%5Cprime%7D(b)%3Dy_%7Bn%7D%5E%7B%5Cprime%7D。由这种边界条件建立的样条插值函数称为

math?formula=f(x)的完备三次样条插值函数。

特别地,

math?formula=y_%7B0%7D%5E%7B%5Cprime%7D%3Dy_%7Bn%7D%5E%7B%5Cprime%7D%3D0时,样条曲线在端点处呈水平状态。

如果

math?formula=f%5E%7B%5Cprime%7D(x)不知道,我们可以要求

math?formula=s_%7B3%7D%5E%7B%5Cprime%7D(x)

math?formula=f%5E%7B%5Cprime%7D(x)在端点处近似相等。这时以

math?formula=x_%7B0%7D%2C%20x_%7B1%7D%2C%20x_%7B2%7D%2C%20x_%7B3%7D为节点作一个三次Newton插值多项式

math?formula=N_%7Ba%7D(x),以

math?formula=x_%7Bn%7D%2C%20x_%7Bn-1%7D%2C%20x_%7Bn-2%7D%2C%20x_%7Bn-3%7D作一个三次Newton插值多项式

math?formula=N_%7Bb%7D(x),要求:

math?formula=s%5E%7B%5Cprime%7D(a)%3DN_%7Ba%7D%5E%7B%5Cprime%7D(a)%2C%20s%5E%7B%5Cprime%7D(b)%3DN_%7Bb%7D%5E%7B%5Cprime%7D(b)

(2)

math?formula=s%5E%7B%5Cprime%20%5Cprime%7D(a)%3Dy%5E%7B%5Cprime%20%5Cprime%7D_%7B0%7D%2C%20s_%7B3%7D%5E%7B%5Cprime%20%5Cprime%7D(b)%3Dy%5E%7B%5Cprime%20%5Cprime%7D_%7B3%7D。特别地

math?formula=y_%7Bn%7D%5E%7B%5Cprime%20%5Cprime%7D%3Dy_%7Bn%7D%5E%7B%5Cprime%20%5Cprime%7D%3D0,称为自然边界条件。

(3)

math?formula=s_%7B3%7D%5E%7B%5Cprime%7D(a%2B0)%3Ds_%7B3%7D%5E%7B%5Cprime%7D(b-0)%2C%20s_%7B3%7D%5E%7B%5Cprime%20%5Cprime%7D(a%2B0)%3Ds_%7B3%7D%5E%7B%5Cprime%20%5Cprime%7D(b-0),(这里要求)

math?formula=s_%7B3%7D(a%2B0)%3Ds_%7B3%7D(b-0)此条件称为周期条件。

2.4.三次样条插值在Matlab中的实现

在 Matlab 中数据点称之为断点。如果三次样条插值没有边界条件,最常用的方法,就是采用非扭结(not-a-knot)条件。这个条件强迫第 1 个和第 2 个三次多项式的三阶导数相等。对最后一个和倒数第 2 个三次多项式也做同样地处理。

Matlab 中三次样条插值也有现成的函数:

y=interp1(x0,y0,x,'spline');

y=spline(x0,y0,x);

pp=csape(x0,y0,conds),y=ppval(pp,x);

其中 x0,y0 是已知数据点,x 是插值点,y 是插值点的函数值。

对于三次样条插值,我们提倡使用函数 csape,csape 的返回值是 pp 形式,要求插值点的函数值,必须调用函数 ppval。

pp=csape(x0,y0):使用默认的边界条件,即 Lagrange 边界条件。

pp=csape(x0,y0,conds)中的 conds 指定插值的边界条件,其值可为:

conds

作用

'complete'

边界为一阶导数,即默认的边界条件

'not-a-knot'

非扭结条件

'periodic'

周期条件

'second'

边界为二阶导数,二阶导数的值[0,0]

对于一些特殊的边界条件,可以通过 conds 的一个

math?formula=1%20%5Ctimes%202矩阵来表示,conds 元素的取值为1,2。此时,使用命令:

pp=csape(x0,y0_ext,conds)

其中 y0_ext=[left, y0, right],这里 left 表示左边界的取值,right 表示右边界的取值。

conds(i)=j 的含义是给定端点

math?formula=i

math?formula=j 阶导数,即 conds 的第一个元素表示左边界的条件,第二个元素表示右边界的条件,conds=[2,1]表示左边界是二阶导数,右边界是一阶导数,对应的值由 left 和 right 给出。

例:机床加工

待加工零件的外形根据工艺要求由一组数据

math?formula=(x%2C%20y)给出(在平面情况下),用程控铣床加工时每一刀只能沿

math?formula=x方向和

math?formula=y方向走非常小的一步,这就需要从已知数据得到加工所要求的步长很小的

math?formula=(x%2C%20y)坐标。

下表给出的数据

math?formula=x%2C%20y数据位于机翼断面的下轮廓线上,假设需要得到

math?formula=x坐标每改变0.1时的

math?formula=y坐标。试完成加工所需数据,画出曲线,并求出

math?formula=x%3D0处的曲线斜率和

math?formula=13%20%5Cleq%20x%20%5Cleq%2015范围内

math?formula=y的最小值。

数据表:

math?formula=x

0

3

5

7

9

11

12

13

14

15

math?formula=y

0

1.2

1.7

2.0

2.1

2.0

1.8

1.2

1.0

1.6

利用Matlab编程,使用Lagrange,分段线性和三次样条三种插值方法计算。

clc,clear

x0=[0 3 5 7 9 11 12 13 14 15];

y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];

x=0:0.1:15;

y1=lagrange(x0,y0,x); %调用前面编写的Lagrange插值函数

y2=interp1(x0,y0,x);

y3=interp1(x0,y0,x,'spline');

pp1=csape(x0,y0); y4=ppval(pp1,x);

pp2=csape(x0,y0,'second'); y5=ppval(pp2,x);

fprintf('比较一下不同插值方法和边界条件的结果:\n')

fprintf('x y1 y2 y3 y4 y5\n')

xianshi=[x',y1',y2',y3',y4',y5'];

fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',xianshi')

subplot(2,2,1), plot(x0,y0,'+',x,y1), title('Lagrange')

subplot(2,2,2), plot(x0,y0,'+',x,y2), title('Piecewise linear')

subplot(2,2,3), plot(x0,y0,'+',x,y3), title('Spline1')

subplot(2,2,4), plot(x0,y0,'+',x,y4), title('Spline2')

dyx0=ppval(fnder(pp1),x0(1)) %求x=0处的导数

ytemp=y3(131:151);

index=find(ytemp==min(ytemp));

xymin=[x(130+index),ytemp(index)]

(Lagrange函数请参见我的简书文章【数学建模算法】(23)插值和拟合:拉格朗日插值)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剖析XAML语言

这节剖析一下XAML(读作:zaml)——这一WPF中的UI设计语言。XAML在wpf中,UI部分使用xaml语言来编写,xaml语言是由xml语言派生而来的语言,所以在xaml中我们可以看到很多熟悉的特点:它也是使用标签构建页面,一个…

中国最神秘的一所大学,它只存在过8年,却成了永远的第一

全世界只有3.14 % 的人关注了青少年数学之旅本文授权转载于公众号:物道精致生活(wudaojieqi),转载请联系物道中国曾经有过这么一所大学:在抗日战争中仓促搭起,被称为“史上最穷”,校舍破旧得梁思…

ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...

NBA历史风卷云涌,巨星层出不穷,就算是称霸一时的巨星组合亦是多不胜数。默契的魔术师与贾巴尔,强悍的斯托克顿与马龙,绝对统治的乔丹与皮蓬,飞天遁地的科比与奥尼尔。就算是近十年,有如韦德与詹姆斯&#x…

一句话征服了美国人,这位饱受争议的数学博士竟从未上过学?

全世界只有3.14 % 的人关注了青少年数学之旅前两天,有位不愿意透露姓名的模友问了超模君一个问题:虽然这个问题超模君已经解答过无数遍了,但看到模友如此虔诚的态度,超模君决定今天再给模友们讲一个犹太小伙用数学征服美国军官的故…

使用 C# 开发浏览器扩展

使用 C# Blazor 开发浏览器扩展Intro前段时间听了 Justin 大佬分享的 Blazor 开发浏览器扩展,觉得很不错,C# 可以做更多有趣的事情了,很多需要在服务器端做的事情可能就可以在客户端里实现了,而且高度可以复用已有的 C# 代码&…

一个设置ip的vbs脚本

经常在两个网段间转换 常改ip,找了一个改ip的脚本稍微改了一下,让他适合我的情况(自动判断我的ip)strComputer "."SetobjWMIService GetObject("winmgmts:\\"&strComputer &"\root\cimv2")…

心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...

文 | 土豆2018年,一档画风清新,以素人恋爱为主体、辅之以明星观察为核心的恋爱社交真人秀节目,走红于市场。彼时国内综艺市场,尚且还处于竞技类真人秀、偶像综艺的爆发期——《心动的信号》播出以后,不仅成功开启了国内…

android 如何动态设置margin,Android 动态设置margin

android的view中有setPadding,但是没有直接的setMargin方法。如果要在代码中设置该怎么做呢?可以通过设置view里面的LayoutParams设置,而这个LayoutParams是根据该view在不同的GroupView而不同的。布局文件如下:xmlns:tools"http://sche…

老是担心数学学不好?是因为你的数学老师不是爱因斯坦!

各位模友,大家好我是小木相信上学的时候,数学对于很多人来说,无疑是个坑!好不容易毕业了,好奇又好学的小表妹每次都能完美地引起小木的心酸历程。就在小木一边回忆起自己的心酸历程的同时,不禁感叹&#xf…

oracle 产看执行计划_ODBA 技能SPM计划

OBA技能1-获取执行计划OBA技能2-执行计划顺序OBA技能3-执行计划顺序表连接ODBA 技能4实战执行计划ODBA 技能5 固定执行计划因为每次统计信息作业在收集完信息后,会触发ACS自适应游标管理程序,进行对绑定变量的窥探工作&#xff0c…

android动画设置的单位,Kotlin语言入门—实现单位转换,view设置,动画等

dp转换为px在android开发中,dp sp px之间的转换是不可避免的,在使用java语言开发时,往往会做个工具类进项转化。这样的工具类在网上很多,这里就不在展示了。如果使用Kotlin语言开发,则可以通过通过Extension来优雅的解…

微软面向初学者的机器学习课程:1.1-机器学习介绍

写在前面:最近在参与microsoft/ML-For-Beginners的翻译活动,欢迎有兴趣的朋友加入(https://github.com/microsoft/ML-For-Beginners/issues/71)机器学习介绍![机器学习,人工智能,深度学习-有什么区别?](ht…

遭央视曝光的“AI算命”,背后竟然隐藏了一个价值千亿的市场!?

全世界只有3.14 % 的人关注了青少年数学之旅还记得儿时算命先生曾对我说:等你25岁那年,会黄袍加身,每天与大鱼大肉为伍。如今眼看着25逐步逼近,数据汪看到美团的外卖小哥都有种莫名的“亲切感”。爆红的“AI算命”言归正传&#x…

微软面向初学者的机器学习课程:1.2-机器学习的历史

写在前面:最近在参与microsoft/ML-For-Beginners的翻译活动,欢迎有兴趣的朋友加入(https://github.com/microsoft/ML-For-Beginners/issues/71)机器学习的历史作者Tomomi Imura[1]课前测验[2]在本课中,我们将走过机器学…

android布局中画圆角矩形,Android 自定义View之圆角矩形轨迹图

一、原理说明主要是通过计算轨迹的坐标点加入到集合中,然后对集合进行相应截取,传入canvas中。二、具体代码实现/*** 原理是先通过尺寸把各个轨迹的坐标计算出来,然后再截取相应坐标,进行重绘。** author lz* Time 2019-3-27*/pub…

类QQ右下角弹出框(Qt)

2019独角兽企业重金招聘Python工程师标准>>> 使用Qt写的类QQ右下角弹出框 /***main.cpp */ #include <QtGui/QApplication> #include "dialog.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);Dialog w;w.show();return a.exec()…

实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯

朴素贝叶斯 概述贝叶斯分类是一类分类算法的总称&#xff0c;这类算法均以贝叶斯定理为基础&#xff0c;故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后&#xff0c;我们通过实例来讨论贝叶斯分类的中最简单的一种: 朴素贝叶斯分类。贝叶斯理论 &a…

设计模式(1)

一、 C# 面向对象程序设计复习 点击http://files.cnblogs.com/zhenyulu/CSharp.rar下载&#xff0c;内容包括&#xff1a; 字段与属性.cs 属性、方法作用范围.cs 一加到一百.cs 使用接口排序(2).cs 使用接口排序(1).cs 求质数.cs 冒泡法排序.cs 九九表.cs 静态与非静态…

微软面向初学者的机器学习课程:1.3-机器学习中的公平性

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习中的公平性作者Tomomi Imura课前测验介绍在本课程中&#xff0c;您将开始了解…

[每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...

转载请注明出处&#xff1a;http://blog.csdn.net/guoyjoe/article/details/11924597正确答案&#xff1a;CD&#xff08;题库给出的答案是AD&#xff0c;大家要相信自己&#xff0c;有些答案是错的&#xff01;一切以实战为依据&#xff09;一、我们先来看Oracle 11g内存架构图…