MATLAB实现分段线性插值
程序员文章站
2022-07-05 17:00:19
...
问题描述:
在解决实际问题时,但我们遇到大区间、高次插值的情况时,往往会出现Runge现象,插值结果往往偏差较大。下面我们通过一个例子来了解一下分段线性插值,具体的原理可自行百度。
代码基于Matlab 2014a
function fenduan(L,b1,b2)
%当在区间内取i个等距节点时对应的小区间的中点值Si并绘制出图形
%b1代表左边界,b2代表右边界
%L可以是一个数组,也可以是一个数字
%插值绘图
n=length(L);
for i=1:n
s=L(i);
L1=linspace(b1,b2,s+1);
for j=2:s+1
X(j-1)=(L1(j-1)+L1(j))/2; %寻找两端点中点值
Sn(j-1)=(((X(j-1)-L1(j))/(L1(j-1)-L1(j)))/(1+25*L1(j-1)^2))+(((X(j-1)-L1(j-1))/(L1(j)-L1(j-1)))/(1+25*L1(j)^2)) %中点值函数值
end
plot(X,Sn,'b-');
hold on
Z=Sn;
%绘制f=1/(1+25*x^2)图形
sym x;
hs='1/(1+25*x^2)';
h=ezplot(hs,[b1,b2]);
set(h,'color','r');%设置原函数曲线颜色为红
grid on %添加网格
bt=strcat('当i=',num2str(L(i)));% 字符串连接
title(bt);
hold on
end
在命令行中输入
fenduan([10,20,40,60],-1,1)
即可绘制出图形
对不同的区间设置,只需更改相应参数即可
上一篇: 二分法 | matlab 实现
下一篇: P2119 魔法阵