Matlab插值算法程序集

2018-12-02 14:02

Matlab插值算法程序集 一、插值算法

1.Atken

function f = Atken(x,y,x0) syms t;

if(length(x) == length(y)) n = length(x); else

disp('x和y的维数不相等!'); return;

end %检错

y1(1:n) = t; %符号函数数组要赋初值 for(i=1:n-1) for(j=i+1:n)

y1(j) = y(j)*(t-x(i))/(x(j)-x(i))+y(i)*(t-x(j))/(x(i)-x(j)); end y = y1;

simplify(y1); end

if(nargin == 3)

f = subs(y1(n),'t',x0); %计算插值点的函数值 else

simplify(y1(n)); %化简

f = collect(y1(n)); %将插值多项式展开

f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end

2.BSample

function f0 = BSample(a,b,n,y,y_1,y_N,x0) f0 = 0.0; h = (b-a)/n;

c = zeros(n+3,1); b = zeros(n+1,1);

for i=0:n-1

if(a+i*h<=x0) && (a+i*h+h>=x0) index = i; break; end

end %找到x0所在区间

A = diag(4*ones(n+1,1)); I = eye(n+1,n+1);

AL = [I(2:n+1,:);zeros(1,n+1)]; AU = [zeros(1,n+1);I(1:n,:)];

A = A+AL+AU; %形成系数矩阵 for i=2:n

b(i,1) = 6*y(i); end

b(1) = 6*y(1)+2*h*y_1; b(n+1) = 6*y(n+1)-2*h*y_N;

d = followup(A,b); %用追赶法求出系数 c(2:n+2) = d;

c(1) = c(2) - 2*h*y_1; %c(-1) c(n+3) = c(3)+2*h*y_N; %c(n+1)

x1 = (a+index*h-h-x0)/h;

m1 = c(index+1)*(-((abs(x1))^3)/6+(x1)^2-2*abs(x1)+4/3); x2 = (a+index*h-x0)/h;

m2 = c(index+2)*((abs(x2))^3/2-(x2)^2+2/3); x3 = (a+index*h+h-x0)/h;

m3 = c(index+3)*((abs(x3))^3/2-(x3)^2+2/3); x4 = (a+index*h+2*h-x0)/h;

m4 = c(index+4)*(-((abs(x4))^3)/6+(x4)^2-2*abs(x4)+4/3); f0 = m1+m2+m3+m4; %求出插值

3.DCS

function f = DCS(x,y,x0) syms t;

if(length(x) == length(y)) n = length(x); c(1:n) = 0.0; else

disp('x和y的维数不相等!'); return; end

c(1) = y(1); for(i=1:n-1) for(j=i+1:n)

y1(j) = (x(j)-x(i))/(y(j)-y(i)); end

c(i+1) = y1(i+1);

y = y1; end

f = c(n); for(i=1:n-1)

f = c(n-i) + (t-x(n-i))/f; f = vpa(f,6); if(i==n-1)

if(nargin == 3)

f = subs(f,'t',x0); else

f = vpa(f,6); end end end;

4.DH

function fz = DH(x,y,x0,y0,zx,zy,zxy) n = length(x); m = length(y);

for i=1:n

if(x(i)<=x0)&& (x(i+1)>=x0) index_x = i; break; end

end %找到x0所在区间 for i=1:m

if(y(i)<=y0)&& (y(i+1)>=y0) index_y = i; break; end

end %找到y0所在区间 hx = x(index_x+1) - x(index_x); hy = y(index_y+1) - y(index_y);

tx = (x0 - x(index_x))/hx; %插值坐标归一化 ty = (y0 - y(index_y))/hy; %插值坐标归一化

Hl = [(1-tx)^2*(1+2*tx) tx*tx*(3-2*tx) tx*(1-tx)^2 tx*tx*(tx-1)]; %左向量 Hr = [(1-ty)^2*(1+2*ty); ty*ty*(3-2*ty); ty*(1-ty)^2 ; ty*ty*(ty-1)]; %右向量 C = [Z(index_x, index_y) Z(index_x,index_y+1) zy(index_x, index_y) ... zy(index_x, index_y+1);

Z(index_x+1, index_y) Z(index_x+1,index_y+1) zy(index_x+1, index_y) ... zy(index_x+1, index_y+1);

zx(index_x, index_y) zy(index_x, index_y+1) zxy(index_x, index_y) ... zxy(index_x, index_y+1);

zx(index_x+1, index_y) zy(index_x+1, index_y+1) zxy(index_x+1, index_y) ... zxy(index_x+1, index_y+1)]; %C矩阵 fz = Hl*C*Hr;

5.DL

function fz = DL(x,y,Z,x0,y0,eps) n = length(x); m = length(y);

for i=1:n

if(x(i)<=x0)&& (x(i+1)>=x0) index_x = i; break; end

end %找到x0所在区间 for i=1:m

if(y(i)<=y0)&& (y(i+1)>=y0) index_y = i; break; end

end %找到y0所在区间

A = [1 x(index_x) y(index_y) x(index_x)* y(index_y);

1 x(index_x+1) y(index_y+1) x(index_x+1)* y(index_y+1); 1 x(index_x) y(index_y+1) x(index_x)* y(index_y+1); 1 x(index_x+1) y(index_y) x(index_x+1)* y(index_y)]; iA = inv(A);

B = iA*[Z(index_x,index_y); Z(index_x+1,index_y+1); Z(index_x,index_y+1); Z(index_x+1,index_y)]; fz = [1 x0 y0 x0*y0]*B;

6.DTL

function fz = DTL(x,y,Z,x0,y0) syms s t; f = 0.0;

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

for i=1:n

if(x(i)<=x0)&& (x(i+1)>=x0) index_x = i; break;

end

end %找到x0所在区间 for i=1:m

if(y(i)<=y0)&& (y(i+1)>=y0) index_y = i; break; end

end %找到y0所在区间

if index_x == 1

cx(1:3) = index_x:(index_x+2); else

if index_x == n-1

cx(1:3) = (index_x-1):(index_x+1); else

if abs(x(index_x-1)-x0)>abs(x(index_x+2)-x0) cx(1:3) = (index_x):(index_x+2); else

cx(1:3) = (index_x-1):(index_x+1); end end

end %找到离x0最近的三个x坐标

if index_y == 1

cy(1:3) = index_y:(index_y+2); else

if index_y == m-1

cy(1:3) = (index_y-1):(index_y+1); else

if abs(y(index_y-1)-y0)>=abs(y(index_y+2)-y0) cy(1:3) = (index_y):(index_y+2); else

cy(1:3) = (index_y-1):(index_y+1); end end

end %找到离y0最近的三个y坐标

for i=1:3 i1 = mod(i+1,3); if(i1 == 0) i1 = 3; end

i2 = mod(i+2,3); if(i2 == 0)


Matlab插值算法程序集.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:多媒体教学学习感悟

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: