Matlab差值计算
现有两组数据
ori_x = [0.2100,0.217338,0.218559,0.21978,0.223443,0.239316,0.261294,0.279609,0.324786,0.361416,0.421245,0.51684,0.554335,0.634921,0.713086,0.7827,0.8242];
ori_y = [0,11.46,13.67,21.60,26.05,34.84,44.36,54.04,66.44,80.13,103.42,125,133.34,141.09,159.41,170.36,199.71];
通过给出任意的x得到想要的y值,并且x的初始值会漂移(0点漂移),x小于初始值时强制y为最小值,x大于最大值时,通过线性差值拟合。
构造一个函数,函数的输入值为x值和x的初始值,输出为y值。
function flowrate= Data_Fitting(Measuring_Voltage,Initial_Voltage)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
%第一个参数是测量电压,第二个参数是初始0点电压
x = Initial_Voltage-0.2100;
%0.2100是原始拟合数据x的0点,是个固定值,计算0点漂移的大小
Fit_Voltage = Measuring_Voltage-x;
%测量值减去漂移值大小
ori_x = [0.2100,0.217338,0.218559,0.21978,0.223443,0.239316,0.261294,0.279609,0.324786,0.361416,0.421245,0.51684,0.554335,0.634921,0.713086,0.7827,0.8242];
ori_y = [0,11.46,13.67,21.60,26.05,34.84,44.36,54.04,66.44,80.13,103.42,125,133.34,141.09,159.41,170.36,199.71];
if Fit_Voltage<0.2100
flowrate = 0;
%x小于下边界,强制为0(根据需求也可以采取线性拟合或其他拟合方式)
elseif Fit_Voltage>0.7827
flowrate =ori_y(length(ori_y-1))*(Fit_Voltage-ori_x(length(ori_x)))/(ori_x(length(ori_x)-1)-ori_x(length(ori_x)))+ori_y(length(ori_y))*(Fit_Voltage-ori_x(length(ori_x)-1))/(ori_x(length(ori_x))-ori_x(length(ori_x)-1));
%x大于上边界,采取线性拟合
else
flowrate =interp1(ori_x,ori_y,Fit_Voltage);
%边界内数据采取线性差值计算
end
end
%x = [0.2100,0.217338,0.218559,0.21978,0.223443,0.239316,0.261294,0.279609,0.324786,0.361416,0.421245,0.51684,0.554335,0.634921,0.713086,0.7827,0.8242];
%for i = 1:16
% yy(i) = Data_Fitting(x(i),0.2100);
%end
%测试代码
检验代码
x = [0.2100,0.217338,0.218559,0.21978,0.223443,0.239316,0.261294,0.279609,0.324786,0.361416,0.421245,0.51684,0.554335,0.634921,0.713086,0.7827,0.8242];
for i = 1:17
yy(i) = Data_Fitting(x(i),0.2100);
end
检验结果为
测试代码
Data_Fitting(0.3,0.2100);
Data_Fitting(0.1,0.2100);
Data_Fitting(0.85,0.2100)
测试结果为