文档库 最新最全的文档下载
当前位置:文档库 › 数值分析matlab自编代码求插值

数值分析matlab自编代码求插值

function y=func1(x)
y=1./(1+x.^2);
end

===============

function yy=nalagr(x,y,xx)
m=length(x);n=length(y);
if m~=n,error('向量x与y的长度必须一致');end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i,
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
end


close all
clear all
clc
v=11;%不妨取等距节点, 个数为v
x1=-5:5;
mi=min(x1);ma=max(x1);
h=(ma-mi)./(v-1);
x=mi:h:ma;
yz=4.6;%取此处函数数值与差值多项式值进行比较
yy=nalagr(x,func1(x),yz);
%误差值
det=abs(yy-func1(yz))
%绘制图像:折线图为函数近似图像,
%星形为差值多项式取值。
plot(x,func1(x),'-.');hold on;
plot(yz,yy,'*');

==============

function ss=newtoncs(x,y,x0 )
m=length(x);n=length(y);
if m~=n,error('向量x与y的长度必须一致');end
a=zeros(m-1,n-1);
ss=y(1);
for k=1:n
a(k,1)=y(k);
end
for i=2:n
t=ones(1,length(x0));
for j=2:i
a(i,j)=(a(i,j-1)-a(i-1,j-1))./(x(i)-x(i-1));
t=t.*(x0-x(j-1));
end
ss=ss+t.*a(i,i);
end


close all
clear all
clc
v=11;%不妨取等距节点, 个数为v
x1=-5:5;
mi=min(x1);ma=max(x1);
h=(ma-mi)./(v-1);
z=mi:h/(2*v):ma;
x=mi:h:ma;
yz=4.6;%取此处函数数值与差值多项式值进行比较
ss=newtoncs(x,func1(x),yz)
%误差值
det=abs(yy-func1(yz))

================

function tt=fdxx(x,y,x0)
m=length(x);n=length(y);
if m~=n,error('向量x与y的长度必须一致');end
for i=1:n
if (x(i)x0)
s=(((x0-x(i+1)).*y(i))/(x(i)-x(i+1)))+(((x0-x(i)).*y(i))/(x(i+1)-x(i)));break;
end
end
tt=s;
end


close all
clear all
clc
v=11;%不妨取等距节点, 个数为v
x1=-5:5;
mi=min(x1);ma=max(x1);
h=(ma-mi)./(v-1);
x=mi:h:ma;
yz=4.6;%取此处函数数值与差值多项式值进行比较
tt=fdxx(x,func1(x),yz)
%误差值
det=abs(yy-func1(yz))
plot(x,func1(x),'-.');hold on;
plot(yz,tt,'*');

==============

function ff=Hermite(x,y,y1,x0)
m=length(x);n=length(y);
if m~=n,error('向量x与y的长度必须一致');end
ff=0;
q1=0;q2=0;
for i=1:n
if (x(i)x0)
h=x(i+1)-x(i);
q1=y(i)*(((x0-x(i+1))^2)*(1+(2*(x0-x(i))/h))/(-h)/(-h))+...
y(i+1)*(((x0-x(i))^2)*(1+(2*(x0-x(i))/(-h)))/(h)/(h));
q2=y1(i)*(((x0-x(i+1))^2)*(x0-x(i))/(-h)/(-h))+...
y1(i+1)*(((x0-x(i))^2)*(x0-x(i+1))/(h)/(h));
break;
end
break;
ff=q1+q2;
end
end


close all
clear all
clc
v=19;%不妨取等距节点, 个数为v
x1=-5:5;
mi=min(x1);ma=max(x1);
h=(ma-mi)./(v-1);
x=mi:h:ma;
yz=4.6;%取此处函数数值与差值多项式值进行比较
y1=diff(func1(x));%求导数值
ff=Hermite(x,func1(x),y1,yz)
%误差值
det=abs(ff-func1(yz))

相关文档
相关文档 最新文档