利用MATLAB进行数据的批量拟合和预测
问题简介
首先,我得到了这样一组数据,横坐标是温度,纵坐标是位置,数据内容是某一变量随温度和位置的变化,如下:
我需要得到的是变量与温度和位置的具体关系,即输入某一个温度以及位置,能够得到变量的数值
初步判断
在进行具体的数据预测之前,我要首先确定这组数据应该用什么方式拟合。
- 变量随温度的变化 ,如果数据量较小,Origin是一个不错的选择,因此,采用Origin进行绘图拟合来判断应该用什么样的方法预测。拟合结果如下:
这个时候就可以看出来,温度和变量之间为线性关系,而位置和变量之间明显是非线性关系。 - 利用Origin进行初步拟合 Origin作为一款优秀的数据处理软件,很适合作为数据的初步拟合,线性拟合较为简单,在此不进行赘述,在选择非线性拟合的时候,软件会根据我们选择的函数来提供预览,这里选择的函数是
这个函数的拟合效果非常好,对-40 -20 0 20 40 60 温度下位置和变量值分别进行非线性拟合,从而在报表中得到拟合函数,这样,在特定温度下,就可以根据位置求出变量的数值
3.接下来我们想要在每个温度下根据位置求出变量的数值,要知道,我们并不知道温度的数据间隔,因此是不可能在Origin中输入特定数据的,所以转用matlab进行计算。思路是:根据温度和变量之间的线性关系,得到特定温度间隔下的温度(温度间隔自定义)。然后对每一列数据进行拟合,就得到了某一温度下位置和变量的关系。此时输入位置,便可得到软件预测的变量。
4.相关代码如下
代码段1:
// position.m
%数据分析,可以得到特定温度下的变量随位置的关系(根据实验拟合数据编程)
T_up=input('温度上限:\n');T_down=input('温度下限:\n');T_bet=input('温度间隔:\n');%输入温度上下限,温度间隔
L=T_down:T_bet:T_up;T_long=length(L);
Data=zeros(11,T_long);
for i=1:11
j=630+70*i;
Data(i,1)=j;
end
for i=1:T_long
T=T_down+(i-1)*T_bet;
Data(1,i)=1023.54603-1.26571*T;
Data(2,i)=1016.76825-0.88238*T