matlab 三次样条插值法拟合三次多项式

matlab 三次样条插值法拟合三次多项式,第1张

1、m次多项式插值法:利用Matlab里的命令:

a = spline(x,y,xx)

其中,x,y为给定点的矩阵,矩阵 a 为矩阵xx所有点对应的拟合值矩 阵。

2、m次拟合法:a = polyfit(x,y,m)

其中,x,y为给定点的矩阵,前者为自变量矩阵,后者为因变量矩阵。m为多项式的次数, a为拟合出来的m次多项式的系数矩阵。

3、在这里x、y都是17的矩阵。至于最基本的赋值、创建变量的知识还是要自己看看啊、、、不难的、、

x=[1:1:10];

y=[2:2:20];

pp=interp1(x,y,'spline','pp')

breaks=ppbreaks

coefs=ppcoefs

三次样条插值(Cubic Spline Interpolation)简称Spline插值,是通过一系列形值点的一条光滑曲线,数学上通过求解三弯矩方程组得出曲线函数组的过程。

实际计算时还需要引入边界条件才能完成计算。一般的计算方法书上都没有说明非扭结边界的定义,但数值计算软件如Matlab都把非扭结边界条件作为默认的边界条件。

在工程上,构造三次样条插值函数通常有两种方法:

一是以给定插值结点处得二阶导数值作为未知数来求解,而工程上称二阶导数为弯矩,因此,这种方法成为三弯矩插值。

二是以给定插值结点处得一阶导数作为未知数来求解,而一阶导数右称为斜率,因此,这种方法称为三斜率插值。

matlab怎么实现双三次插值

spline函数可以实现三次样条插值

x = 0:10;

y = sin(x);

xx = 0:25:10;

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

用Matlab实现了3次样条曲线插值的算法。边界条件取为自然边界条件,即:两个端点处的2阶导数等于0;

共包含3各个函数文件,主函数所在文件(即使用的时候直接调用的函数)为spline3m,另外两个函数文件是在splin3函数文件中被调用的自定义函数。一个是GetParamm,一个是GetMm。

%GetParamm文件的内容:

%根据给定的离散点的横坐标所构成的向量,计算各个区间段的h值;

function GetParam(Vx,Vy)

global gh;

global gf;

global gu;

global gr;

global gd;

global gff;

global gM;

%global gn;

%n=length(Vx);%length()为向量Vx所含元素的个数;

%n=legth(Vx);

%gn=n;

%n=gn;

n=length(Vx);

gh(1)=Vx(2)-Vx(1);

gf(1)=(Vy(2)-Vy(1))/gh(1);

for i=2:1:n-1%从区间0到区间n-1;

gh(i)=Vx(i+1)-Vx(i);

gf(i)=(Vy(i+1)-Vy(i))/gh(i);

gu(i)=gh(i-1)/(gh(i-1)+gh(i));

gr(i)=1-gu(i);

gff(i)=(gf(i-1)-gf(i))/(Vx(i-1)-Vx(i+1));

gd(i)=6gff(i);

end

%设置与边界条件有关的参数;

gM(1)=0;%起点的2阶导数;

gM(n)=0;%终点的2阶导数;

end

%GetMm文件的内容:

function GetM(Vx)

global gh;

global gf;

global gu;

global gr;

global gd;

global gff;

global gM;

%global gn;

nn=length(Vx);

%nn=gn;

n=nn-2;

b=zeros(n,1);

A=zeros(n,n);

A(1,1)=2;A(1,2)=gr(2);

b(1)=gd(2)-gu(2)gM(1);

for i=2:1:n-1

A(i,i)=2;

A(i,i-1)=gu(i+1);

A(i,i+1)=gr(i+1);

b(i)=gd(i+1);

end

A(n,n-1)=gu(n);A(n,n)=2;

b(n)=gd(nn-1)-gr(nn-1)gM(nn);

X=(inv(A))b;

for i=2:1:nn-1

gM(i)=X(i-1);

end

end

%主函数文件spline3m的内容:

function result=spline3(x,Vx,Vy)

global gh;

global gf;

global gu;

global gr;

global gd;

global gff;

global gM;

%global gn;

GetParam(Vx,Vy);

GetM(Vx);

%n=length(Vx);

%n=gn;

n=length(Vx);

nn=length(x);

y=zeros(1,nn);

for j=1:1:nn

i=1;

while(x(j)>Vx(i+1))

i=i+1;

end

sn=i;

t1=(Vx(sn+1)-x(j))^3/(6gh(sn));

t1=t1gM(sn);

t2=(x(j)-Vx(sn))^3/(6gh(sn));

t2=t2gM(sn+1);

t3=Vy(sn)-gM(i)((gh(i))^2)/6;

t3=t3(Vx(sn+1)-x(j))/gh(sn);

t4=Vy(sn+1)-gM(sn+1)((gh(sn))^2)/6;

t4=t4(x(j)-Vx(sn))/gh(sn);

y(j)=t1+t2+t3+t4;

end

result=y;

end

函数调用的时候,result=spline3(x,Vx,Vy),x为代求点的横坐标向量,

(Vx,Vy)为已知的点的坐标。

三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。以第1边界条件为例,用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。通过Matlab编制三次样条函数的通用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图

0引言分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。故给出分段三次样条插值的构造过程、算法步骤,利用

spline函数可以实现三次样条插值

x = 0:10;

y = sin(x);

xx = 0:25:10;

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

另外fnplt csapi这两个函数也是三次样条插值函数,具体你可以help一下!

以上就是关于matlab 三次样条插值法拟合三次多项式全部的内容,包括:matlab 三次样条插值法拟合三次多项式、求问,MATLAB来做三次样条插值,如何得到插值的函数表达式、matlab怎么实现双三次插值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9294993.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存