Matlab插值算法程序集(2)

2018-12-02 14:02

i2 = 3; end for j=1:3

j1 = mod(j+1,3); if(j1 == 0) j1 = 3; end

j2 = mod(j+2,3); if(j2 == 0) j2 = 3; end

f = f+Z(cx(i),cy(j))*((t-x(cx(i1)))*(t-x(cx(i2)))/(x(cx(i))-x(cx(i1)))/(x(cx(i))-x(cx(i2))))* ... (s-y(cy(j1)))*(s-y(cy(j2)))/(y(cy(j))-y(cy(j1)))/(y(cy(j))-y(cy(j2))); %插值多项式 end end

fz = subs(f,'[t s]',[x0 y0]);

7.FCZ

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) i2 = 3; end for j=1:3

j1 = mod(j+1,3); if(j1 == 0) j1 = 3; end

j2 = mod(j+2,3); if(j2 == 0) j2 = 3; end

f = f+Z(cx(i),cy(j))*((t-x(cx(i1)))*(t-x(cx(i2)))/(x(cx(i))-x(cx(i1)))/(x(cx(i))-x(cx(i2))))* ... (s-y(cy(j1)))*(s-y(cy(j2)))/(y(cy(j))-y(cy(j1)))/(y(cy(j))-y(cy(j2))); %插值多项式 end

end

fz = subs(f,'[t s]',[x0 y0]);

8.Gauss

function f = Gauss(x,y,x0)

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

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

xx =linspace(x(1),x(n),(x(2)-x(1))); if(xx ~= x)

disp('节点之间不是等距的!'); return; end

if( mod(n,2) ==1) if(nargin == 2)

f = GStirling(x,y,n); else if(nargin == 3)

f = GStirling(x,y,n,x0); end end else

if(nargin == 2)

f = GBessel(x,y,n); else if(nargin == 3)

f = GBessel(x,y,n,x0); end end end

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

nn = (n+1)/2; f = y(nn);

for(i=1:n-1) for(j=i+1:n)

y1(j) = y(j)-y(j-1); end

if(mod(i,2)==1)

c(i) = (y1((i+n)/2)+y1((i+n+2)/2))/2; else

c(i) = y1((i+n+1)/2)/2; end

if(mod(i,2)==1) l = t+(i-1)/2; for(k=1:i-1)

l = l*(t+(i-1)/2-k); end else

l_1 = t+i/2-1; l_2 = t+i/2; for(k=1:i-1)

l_1 = l_1*(t+i/2-1-k);

l_2 = l_2*(t+i/2-k); end

l = l_1 + l_2; end

l = l/factorial(i); f = f + c(i)*l; simplify(f); f = vpa(f, 6); y = y1;

if(i==n-1)

if(nargin == 4)

f = subs(f,'t',(x0-x(nn))/(x(2)-x(1))); end end end

function f = GBessel(x,y,n,x0) syms t; nn = n/2;

f = (y(nn)+y(nn+1))/2;

for(i=1:n-1) for(j=i+1:n)

y1(j) = y(j)-y(j-1);

end

if(mod(i,2)==1)

c(i) = y1((i+n+1)/2)/2; else

c(i) = (y1((i+n)/2)+y1((i+n+2)/2))/2; end

if(mod(i,2)==0) l = t+i/2-1; for(k=1:i-1)

l = l*(t+i/2-1-k); end else

l_1 = t+(i-1)/2; l_2 = t+(i-1)/2-1; for(k=1:i-1)

l_1 = l_1*(t+(i-1)/2-k);

l_2 = l_2*(t+(i-1)/2-1-k); end

l = l_1 + l_2; end

l = l/factorial(i); f = f + c(i)*l; simplify(f); f = vpa(f, 6); y = y1;

if(i==n-1)

if(nargin == 4)

f = subs(f,'t',(x0-x(nn))/(x(2)-x(1))); end end End

9.Hermite

function f = Hermite(x,y,y_1,x0) syms t; f = 0.0;

if(length(x) == length(y))

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


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

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

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

马上注册会员

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