三次插值法的matlab代码
时间: 2024-02-12 09:39:14 浏览: 9
以下是三次插值法的 Matlab 代码:
```matlab
function [yinterp] = cubicinterp(x, y, xinterp)
% 三次插值
% 输入:
% x: 原始数据 x 坐标向量
% y: 原始数据 y 坐标向量
% xinterp: 插值点位置向量
% 输出:
% yinterp: 插值点位置的插值结果向量
n = length(x);
h = zeros(1, n-1);
for i = 1:n-1
h(i) = x(i+1) - x(i);
end
% 差商表
delta = zeros(n, n);
delta(:, 1) = y';
for j = 2:n
for i = j:n
delta(i, j) = (delta(i, j-1) - delta(i-1, j-1)) / (x(i) - x(i-j+1));
end
end
yinterp = zeros(size(xinterp));
for k = 1:length(xinterp)
xk = xinterp(k);
% 找到最近的 x(i)
i = find(x <= xk, 1, 'last');
if isempty(i)
i = 1;
end
if i == n
i = i-1;
end
% 插值
t = (xk - x(i)) / h(i);
yinterp(k) = delta(i, 1) + t*delta(i, 2) + t*(t-1)/2*delta(i, 3) + t*(t-1)*(t-2)/6*delta(i, 4);
end
end
```
使用示例:
```matlab
% 生成测试数据
x = linspace(0, 1, 11);
y = sin(2*pi*x);
xinterp = linspace(0, 1, 101);
% 三次插值
yinterp = cubicinterp(x, y, xinterp);
% 绘制结果
plot(x, y, 'o', xinterp, yinterp, '-')
legend('原始数据', '三次插值')
```