% 该方法是用于预测数值,比较可靠的有三次样本插值法和埃尔米特插值法,具体可以B站搜数学建模清风。
%用两种插值法预测偶数周数值
load('matlab.mat')
A = input("请输入需要插值数据:")
choice = input("请选择预测方法,1为三次样本插值,2为埃尔米特插值法:")
[x,y] = size(A)
xx = [1,3,5,7,9,11,13,15]
tit= {'','轮虫','溶氧','COD','水温','PH值','盐度','透明度','总碱度','氯离子','透明度','生物量'}
%三次样本插值法
if choice == 1
% a = CYF1(A)%互异性的行元素为0,互异性不成立则元素值为该行的行数
for i = 2:x%行数循环
% if a(i) == 0%该行数据满足互异性
yy(i,:) = A(i,:)
P1(i,:) = {spline(xx,yy,1:1:15)}
% end
%if a(i) ~= 0%该行数据不满足互异性
% b = CYF2(A,a)%返回值为每行相同元素的列
%end
end
B = P1{12,1}
for j = 2:x
subplot(3,4,j)
plot(1:15,B(j,:),'r-')
title(tit{1,j})
end
end
%埃尔米特插值法
if choice == 2
for i = 2:x%行数循环
yy(i,:) = A(i,:)
P1(i,:) = {pchip(xx,yy,1:1:15)}
% end
%if a(i) ~= 0%该行数据不满足互异性
% b = CYF2(A,a)%返回值为每行相同元素的列
%end
end
B = P1{12,1}
for j = 2:x
subplot(3,4,j)
plot(1:15,B(j,:),'r-')
title(tit{1,j})
end
end
%用这个方法的时候想复杂了,没有完全理解spline函数的意义,以为spline函数无法处理不满足互异性的样本,结果是可以的。还傻愣愣的去想怎么找到不满足互异性的样本数据,然后单独拿出来分段处理,卡了几天,最后才发现原来我是一个shabi