1. 背景介绍
对1号池的属性进行建模,但由于缺少偶数周的数据,因此需要利用奇数周的数据,再进行插值操作,得到更全的数据
最终结果:
最后把生成的数据填入就行
2. 基本函数功能
1.1三次样条插值函数介绍
pchip(x,y,'b*',new_x,y,'r-');
前面的是原先的样本点,后面那个是需要的
1.2 matlab中取某行数据
p = C(1,:);
总之,取哪行,就把数字改成几,第二行就是二,因此我们很容易用到for循环对每行数据的插值
对整个矩阵进行三次样条插值
代码如下
%对1号水池进行的插值操作
clear;clc;
load mydata.mat;%这个是导入数据,mydata只是名字,要调用还是得知道里面的矩阵
[n,m] = size(C);%C的行数和列数
P = zeros(11,15);%经常用zeros函数生成一个空的矩阵
ylab={'周数','轮虫','溶氧','COD','水温','PH值','盐度','透明度','总碱度','氯离子','透明度','生物量'};
%ylab是坐标的名字,用于后面的循环调用
x = [1 3 5 7 9 11 13 15];%这个是原先x的坐标
for i = 1:n%对每行进行for循环
new_x = 1:15;%每个变量都需要插值
y = C(i,:);%对原先的数据进行一行一行的插值
p1 = pchip(x,y,new_x);%三次埃尔米特插值
subplot(4,3,i);%对于每个变量,画一张图,生成在4*3的矩阵中,并对图进行标号
plot(x,y,'b*',new_x,p1,'r');%plot函数用于把图画在subplot中
ylabel(ylab{i+1});%ylabel形成每个plot的y轴图像
P(i,:) = p1;%将每一个插值后的接到新的空白矩阵中
end
P=[1:15;P];%加上周数
legend('原样本点','三次样条插值','location','southeast');%
p = C(1,:);