三次样条插值java代码 三次样条插值的调用格式

插值的编程使用

matlab中使用插值函数

成都创新互联公司从2013年创立,是专业互联网技术服务公司,拥有项目成都网站制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元茄子河做网站,已为上家服务,为茄子河各地企业和个人服务,联系电话:13518219792

插值函数(the function of interpolation )

interp1

调用函数的格式(Syntax)

yi = interp1(x,Y,xi)

yi = interp1(Y,xi)

yi = interp1(x,Y,xi,method)

yi = interp1(x,Y,xi,method,'extrap')

yi = interp1(x,Y,xi,method,extrapval)

pp = interp1(x,Y,method,'pp')

调用格式说明(Description)

yi = interp1(x,Y,xi) 返回矢量X和Y决定的根据输入的节点xi时对应的y的值.矢量Y是矢量X的一个函数映射.

如果Y是一个矩阵,那么插值结果是一个对应的矩阵.

[===================================================

yi = interp1(x,Y,xi) returns vector yi containing elements corresponding to the elements of xi and determined by interpolation within vectors x and Y. The vector x specifies the points at which the data Y is given. If Y is a matrix, then the interpolation is performed for each column of Y and yi is length(xi)-by-size(Y,2).

===================================================]

yi = interp1(x,Y,xi,method)插值中可以使用的方法: 插值方法 说明 nearest 临近的两点插值 linear 线性插值(默认) spline 三次样条插值 pchip 分段三次Hermite插值多项式插值 cubic (作用于pchip相同) v5cubic 用matlab5版本中断三次样条插值 [====================================================

yi = interp1(x,Y,xi,method) interpolates using alternative methods:

methodDescription

nearestNearest neighbor interpolation

linearLinear interpolation (default)

splinesplineCubic spline interpolation

pchipPiecewise cubic Hermite interpolation

cubic(Same as 'pchip')

v5cubicCubic interpolation used in MATLAB 5

======================================================]

简单程序示例

x=[0.0 0.1 0.195 0.3 0.401 0.5];

y=[0.39849 0.39695 0.39142 0.38138 0.36812 0.35206];

plot(x,y);

T=interp1(x,y,.25,'linear') %线性插值

(返回结果T=0.3862)

T=interp1(x,y,.25,'nearest') % 两点插值

(返回结果T=0.3814)

T=interp1(x,y,.25,'spline')  % 三次样条插值

(返回结果T =0.3867)

T=interp1(x,y,.25,'cubic') %三次插值

(返回结果T =0.3867)

三次样条插值

用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)为已知的点的坐标。

C程高手请求帮忙!计算方法,三次样条插值程序!!

2=6.610;

x3=6.082;

x4=5.607;

x5=5.423;

xH=5.825;

%我这里的版本是2006a的,不知道6.5是否可以通过,你可以自己试试。

x=[x1 x2 x3 x4 x5];

y=[638.3 640.2 650.6 653.2 659.9];%你原来x只有5个元素,而y却有7个元素,所以会出错,我删了最后两个

xi=linspace(x1,x5,100);%这里自动让它平均生成了100个点,如果觉得太多可以自行改少一点

%你下面左引号都是全角中文的,应该换成英文半角状态

ycubic=interp1(x,y,xi,'cubic');

ylinear=interp1(x,y,xi,'linear');

yH1=interp1(x,y,xH,'cubic');

yH2=interp1(x,y,xi,'linear');

plot(x,y,'*',xH,yH1,'o',xi,ycubic,'-');

grid on

————————————————————————————

你们老师果然不负责任啊,选课的时候也不说明的。

建议自己找本matlab的教材学习一下,应该还是很好上手的。


文章名称:三次样条插值java代码 三次样条插值的调用格式
文章起源:http://scyanting.com/article/ddjdojc.html