1. 三次样条插值求解
m,n是一组离散的点
spline对它做样条插值
完了计算以0~359为横坐标xx,以插值yy为纵坐标
最后的画图:
(m,n)是原始数据,用点表示
(xx,yy)是插值拟合数据,用线条表示。
俩画在一起,无非是看原始数据和拟合数据的拟合度
ps,
plot(m, n, ".", xx1, yy1)有问题
可能是 plot(m, n, ".", xx, yy)。
2. 急求!!!!matlab怎么求三次样条插值多项式
样条是分段函数,多项式的个数和分的段数有关的,这个段数应该是不定的,所以不太好弄。那么:
你想要一个三次多项式的话,就用polyfit,得到多项式的系数
如果你想三次样条插值,就用spline或者interp1,再用plot能得到曲线
3. 三次均匀B样条插值算法
三次样条插值(Cubic Spline Interpolation)简称Spline插值,是通过一系列形值点的一条光滑曲线,数学上通过求解三弯矩方程组得出曲线函数组的过程。
实际计算时还需要引入边界条件才能完成计算。一般的计算方法书上都没有说明非扭结边界的定义,但数值计算软件如Matlab都把非扭结边界条件作为默认的边界条件。
4. 数值方法 三次样条插值
也得不影响。。。 而且如果你固定用三次样条插值的话,直接影响精确度的就是间距。
所有的多项式插值,(不止插值,连拟合都是这样)只要方法固定下来,接下来直接影响精度的就是间距h了。
三次样条插值本质上就是解一个矩阵对应的线性方程组。至于你最后一句话:
“是知道一系列等间距点和该出的值,求这些点中间处的插值点的值。”
。。。那一系列等间距点就是插值点,后面那个是你未知的部分的内容,3次样条插值是求出一个可以穿过你原本给定的那一系列点的分段3次多项式函数,使得它在所有的点都保证至少2阶连续可导的光滑度。三次样条插值解出来的是各个分段的逼近多项式的表达式(3次的),得到全段的表达式后,你把你要估计的那个点的自变量值代进表达式得到该点的函数值。
插值有时候也会用来做别的事情。最常见的就是在估算原函数的积分的时候,威力巨大。
5. 三次样条插值计算步骤
三次样条插值在实际中有着广泛的应用,在计算机上也容易实现。下面介绍用计算机求取三样条插值函数S(x)的算法步骤:
(1)输入初始节点离散数据xi,yi(i=0,1,…,n);
(2)依据式(6-46),计算hi=xi-xi-1,λi和Ri(i=1,…,n-1);
(3)根据实际问题,从式(6-49)、式(6-51)和式(6-53)中选择一类对应的边界条件,求取v0,w0,u0,R0,un,vn,wn,Rn;
(4)根据形成的方程组(6-54)的特点,选用追赶法、高斯法等解方程组,求出Mi(i=0,1,2,…,n);
(5)依据式(6-41)、式(6-42),计算插值点的三样条插值函数值和该点的导数值。
6. MATLAB来做三次样条插值,如何得到插值的函数表达式
x=[1:1:10];
y=[2:2:20];
pp=interp1(x,y,'spline','pp')
breaks=pp.breaks
coefs=pp.coefs
7. 你好,如何求三次样条插值的基函数
三次样条函数:
定义:函数S(x)∈C2[a,b] ,且在每个小区间[ xj,xj+1 ]上是三次多项式,其中
a =x0 <x1<...< xn= b 是给定节点,则称S(x)是节点x0,x1,...xn上的三次样条函数。
若在节点x j 上给定函数值Yj= f (Xj).( j =0, 1, , n) ,并成立
S(xj ) =yj .( j= 0, 1, , n) ,则称S(x)为三次样条插值函数。
实际计算时还需要引入边界条件才能完成计算。边界通常有自然边界(边界点的二阶导为0),夹持边界(边界点导数给定),非扭结边界(使两端点的三阶导与这两端点的邻近点的三阶导相等)。一般的计算方法书上都没有说明非扭结边界的定义,但数值计算软件如Matlab都把非扭结边界条件作为默认的边界条件。
8. 三次样条插值
用Matlab实现了3次样条曲线插值的算法。边界条件取为自然边界条件,即:两个端点处的2阶导数等于0;
共包含3各个函数文件,主函数所在文件(即使用的时候直接调用的函数)为spline3.m,另外两个函数文件是在splin3函数文件中被调用的自定义函数。一个是GetParam.m,一个是GetM.m。
%GetParam.m文件的内容:
%根据给定的离散点的横坐标所构成的向量,计算各个区间段的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)=6*gff(i);
end
%设置与边界条件有关的参数;
gM(1)=0;%起点的2阶导数;
gM(n)=0;%终点的2阶导数;
end
%GetM.m文件的内容:
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
%主函数文件spline3.m的内容:
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/(6*gh(sn));
t1=t1*gM(sn);
t2=(x(j)-Vx(sn))^3/(6*gh(sn));
t2=t2*gM(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)为已知的点的坐标。
9. 三次样条插值算法
采用matlab中的imresize函数,其中bicubic选项为三次样条插值。
10. MATLAB中,如何求出三次样条插值函数
matlab中的三次样条插值函数是spline,用法是:yy=spline(x,y,xx),pp=spline(x,y),前者求出对应xx的纵坐标,后者求出一个多项式,可用ppval计算纵坐标值。