学习内容:
1、 插值算法基本内容
2、 Matlab实现插值算法
学习时间:
2020.12.08
学习产出:
Matlab代码:
%插值算法的课后练习-----------------------------------------------------------------
clear;clc;
load data.mat; %第一行当做x,其余当做y
format short;
%获取y的行数
y_r = size(data,1)-1;
%获取列数
c = size(data,2);
%利用三次样条插值求得2,4,6.....的值
x = data(1,:);
new_x = data(1,1)+1:2:data(1,c)-1;
newData = zeros(size(data,1),2*c-1);%初始化一个全0的矩阵
newData(1,:) = data(1,1):1:data(1,c);%第一行设置为1~15
%y标签向量
y_label = ["轮虫(10^6/L)","溶氧(mg/L)","COD(mg/L)","水温(°C)","PH值","盐度","透明度(cm)","总碱度","氯离子","透明度","生物量"];
for k=1:y_r
y = data(k+1,:);
p = pchip(x,y,new_x);%进行三次样条插值计算
temp = zeros(1,2*c-1);%暂时存储一行数据
for j=1:c %把原来的数据隔开存储到temp里
temp(2*j-1) = y(j);
if j~=c
temp(2*j) = p(j);
end
end
newData(k+1,:) = temp;%把进行三次样条插值之后的数据赋值给newData中的指定行
plot(x,y,"ro",newData(1,:),temp,"b-");
xlabel("周数");
ylabel(y_label(1,k));
subplot(4,3,k);
end
%legend('样本点','三次埃尔米特插值','Location','SouthEast');
disp(newData);%输出newData
xlswrite("E:\data.xlsx",newData);%将变量导出为表格
运行结果: