求解方程MATLAB

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+2) ;
fx1=@(x)1/(1+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+2) ;
fx1=@(x)1/(1+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 (=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)(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+2) ;
gx=@(x)􀀀2x/(1+2)ˆ2;
fx1=@(x)1/(1+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+2) ;
fx1=@(x)1/(1+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');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值