Matlab插值算法程序集(3)

2018-12-02 14:02

else

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

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

for i=1:n h = 1.0; a = 0.0; for j=1:n if( j ~= i)

h = h*(t-x(j))^2/((x(i)-x(j))^2); a = a + 1/(x(i)-x(j)); end end

f = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));

if(i==n)

if(nargin == 4)

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

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

10.Language

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

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

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

end

f = 0.0; for(i = 1:n) l = y(i);

%检错 for(j = 1:i-1)

l = l*(t-x(j))/(x(i)-x(j)); end;

for(j = i+1:n)

l = l*(t-x(j))/(x(i)-x(j)); %计算拉格朗日基函数 end;

f = f + l; %计算拉格朗日插值函数 simplify(f); %化简

if(i==n)

if(nargin == 3)

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

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

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

11.Neville

function f = Neville(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) if(j==2)

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

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

end y = y1; if(i==n-1)

if(nargin == 3)

f = subs(y(n-1),'t',x0);

else

f = vpa(y(n-1),6); end end end

12.Newton

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

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

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

f = y(1); y1 = 0; l = 1;

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

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

c(i) = y1(i+1); l = l*(t-x(i)); f = f + c(i)*l; simplify(f); y = y1;

if(i==n-1)

if(nargin == 3)

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

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

%将插值多项式展开

13.Newtonback

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

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

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

f = y(n); y1 = 0;

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

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

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

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

c(i) = y1(n); l = t;

for(k=1:i-1) l = l*(t+k); end;

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

if(i==n-1)

if(nargin == 3)

f = subs(f,'t',(x0-x(n))/(x(2)-x(1))); else

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

end

14.Newtonforward

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

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

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

f = y(1); y1 = 0;

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

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

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

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

c(i) = y1(1); l = t;

for(k=1:i-1) l = l*(t-k); end;

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

if(i==n-1)

if(nargin == 3)

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

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


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

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

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

马上注册会员

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