MATLAB是什么想必大家都知道,MATLAB是怎么一回事呢?
解方程想必大家都知道,解方程是怎么回事呢?就是这样。
考虑R(x) = 1/(1+x²)
用等距节点xi=-5+i,i = 0:10,给出分段线性插值函数的图像;
用等距节点xi=-5+i,i = 0:10,给出三次样条插值函数的图像;
用等距节点xi=-5+i,i = 0:10,给出分段三次Hermit插值多项式的图像。
分段线性插值
clc;clear;
syms t;
fx=1/(1+tˆ2) ;
fx1=@(x)1/(1+xˆ2);
y=zeros(10,1);
x=zeros(10,1);
for i=1:10
x( i )=5+i;
y( i )=fx1(x( i ) ) ;
end
x0=linspace(4,5,100);
f1=subs(fx,'t',x0);
plot(x0,f1 ,'b',x,y,'r',x,y,'o')
三次样条插值
function f = SplineThree(x,y,dy1,dyn)
%x,y为输入的已知点
%dy1,dyn为端点处的一阶导数值
n=length(x);
for j=1:n-1
h(j)=x(j+1)-x(j);
end
%得到式子右边的结果矩阵
d(1,1)=6*((y(2)-y(1))/h(1)-dy1)/h(1); %等式(11)的结果矩阵的上端点值
d(n,1)=6*(dyn-(y(n)-y(n-1))/h(n-1))/h(n-1); %等式(11)的结果矩阵的下端点值
for i=2:n-1
u(i)=h(i-1)/(h(i-1)+h(i));
d(i,1)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1))/(h(i-1)+h(i));
end
%得到系数矩阵
A(1,1)=2;
A(1,2)=1;
A(n,n-1)=1;
A(n,n)=2;
for i=2:n-1
A(i,i-1)=u(i);
A(i,i)=2;
A(i,i+1)=1-u(i);
end
%解方程
M=A\d;
syms t;
%得到每个区间的式子
for i=1:n-1
a(i)=y(i+1)-M(i+1)*h(i)^2/6-((y(i+1)-y(i))/h(i)-(M(i+1)-M(i))*h(i)/6)*x(i+1);
b(i)=((y(i+1)-y(i))/h(i)-(M(i+1)-M(i))*h(i)/6)*t;
c(i)=(t-x(i))^3*M(i+1)/(6*h(i));
e(i)=(x(i+1)-t)^3*M(i)/(6*h(i));
f(i)=a(i)+b(i)+c(i)+e(i);
end
%化简
f=collect(f);
f=vpa(f,6);
end
clear;
syms t;
fx=1/(1+tˆ2) ;
fx1=@(x)1/(1+xˆ2);
for i=1:10
x( i )=5+i;
y( i )=fx1(x( i ) ) ;
end
gx=diff(fx ) ;
dy1=subs(gx,'t',x(1));
dyn=subs(gx,'t',x(10));
f = SplineThree(x,y,dy1,dyn)
xx=4:0.1:5;
y1=subs(fx,'t',xx);
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy,'r',xx,y1,'b')
Hermit插值
function f = Hermite( x,y,y 1 )
%Hermite.插值求已知数据点的插值多项式mHermite
%为数据点的坐标向量xx
%为数据点的坐标向量yy
%为求得的插值多项式fHermite
syms t;
f=0.0;
if (length(x)==length(y))
if (length(y)==length(y 1))
n=length(x);
else
disp('和的导数不相等!yy');
return;
end
else
disp('和的维数不相等!xy');
return;
end
for i=1:n
h=1.0;
a=0.0;
for j=1:n
if ( j˜=i )
h=h(tx(j)) ˆ2/(( x( i )x(j)) ˆ2) ;
a=a+1/(x(i)x(j)) ;
end
end
f=f+h((x( i )t)(2ay(i)y 1(i))+y(i ) ) ;
end
clear;
x=zeros(10,1);
y=zeros(10,1);
y1=zeros(10,1);
syms t;
fx=1/(1+tˆ2) ;
gx=@(x)2x/(1+xˆ2)ˆ2;
fx1=@(x)1/(1+xˆ2);
for i=1:10
x( i )=5+i;
y( i )=fx1(x( i ) ) ;
y1(i )=gx(x(i ) ) ;
end
f=Hermite(x,y,y1);
f=collect ( f ) ;
f=vpa(f,6)
x0=linspace(4,5,100);
f0 = subs(f,'t',x0);
f1=subs(fx,'t',x0);
plot(x0,f0 ,'b',x0,f1,'r',x,y,'o')
clear;
syms t;
fx=1/(1+tˆ2) ;
fx1=@(x)1/(1+xˆ2);
for i=1:10
x( i )=5+i;
y( i )=fx1(x( i ) ) ;
end
x0=linspace(4,5,100);
yy = interp1(x,y,x0,'pchip');
f1=subs(fx,'t',x0);
plot(x0,yy,'b',x0,f1,'r',x,y,'o');