对传感器测量参数进行数据的拟合
话不多说直接上代码
clc;
clear;
Num = 15;%总共十一个数据
data = zeros(Num,2,'double');%传感器数据,2行N列;
data_chabiao = zeros(Num,2,'double');%查表模型
wendu = zeros(Num,2,'double');%逆模型数据;
wucha = zeros(Num,2,'double');%误差拟合数据
t = 0;
%data(Num,1)为系统输入温度,data(Num,2)系统输出,电阻
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将输入输出的数据存入data中;
data(1,1)=0.00; data(1,2)= 100.00;
data(2,1)=50.00; data(2,2)= 119.40;
data(3,1)=100.00; data(3,2)= 138.51;
data(4,1)=150.00; data(4,2)= 157.33;
data(5,1)=200.00; data(5,2)= 175.86;
data(6,1)=250.00; data(6,2)= 194.10;
data(7,1)=300.00; data(7,2)= 212.05;
data(8,1)=350.00; data(8,2)= 229.72;
data(9,1)=400.00; data(9,2)= 247.09;
data(10,1)=450.00; data(10,2)= 264.18;
data(11,1)=500.00; data(11,2)= 280.98;
%%%%%%把数据保存到表格中
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\data.csv',data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);
for i = 1:1:Num
hold on
plot(data(i,1),data(i,2),'r.','MarkerSize',14);
xlabel('传感器函数自变量');
ylabel('传感器因变量');
title('智能传感器特性');
grid on
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%假设反曲线拟合方程为
%X(u)=a + bu + cu^2 + du^3 + ----- aau^n;
%假设n = 3,求a b c d 待定系数
%由书上4-6式得
H = 0;
I = 0;
J = 0;
K = 0;
L = 0;
M = 0;
D = 0;
E = 0;
F = 0;
G = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%处理得到数据
%data(Num,1)为系统输入,data(Num,2)系统输出
for i = 1:1:Num
H = H + data(i,2);
I = I + data(i,2)^2;
J = J + data(i,2)^3;
K = K + data(i,2)^4;
L = L + data(i,2)^5;
M = M + data(i,2)^6;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
D = D + data(i,1);
E = E + data(i,1)*data(i,2);
F = F + data(i,1)*data(i,2)^2;
G = G + data(i,1)*data(i,2)^3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%解线性方程组方程求出,求a b c d 待定系数
A = [Num H I J;H I J K;I J K L;J K L M]
B = [D;E;F;G]
X = A\B
A0 = -247.6880;
A1 = 2.4043;
A2 = 0.00062026;
A3 = 0.000001043;
figure(2);%拟合曲线
%data(Num,1)为系统输入,data(Num,2)系统输出
for i = 1:1:Num
T = A0 + A1*data(i,2) + A2*data(i,2)^2 + A3*data(i,2)^3;
wendu(i,1) = T;
wendu(i,2) = data(i,2);
plot(data(i,2),T,'r.','MarkerSize',14);
xlabel('拟合-传感器函数因变量');
ylabel('拟合-传感器自变量');
title('拟合-智能传感器特性');
hold on
grid on
end
%%%%%%把误差数据保存到表格中
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\wendu.csv',wendu);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(3);%误差拟合曲线
for i = 1:1:Num
wucha(i,1) = data(i,1);
wucha(i,2) = data(i,2) - wendu(i,2);
plot(wucha(i,1),wucha(i,2),'r.','MarkerSize',14);
hold on
grid on
end
%%%%%%把误差数据保存到表格中
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\wucha.csv',wucha);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最小二乘法的数据初始化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sun_x = 0;
sun_y = 0;
sun_xy = 0;
sun_x_squ = 0;
wu_1 = zeros(Num,2,'double');%给定空间
data_zuixiaoerc = zeros(Num,2,'double');%给定空间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最小二乘法算法
%y = b + kx
%进行最小法二乘法拟合算法
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%data(Num,1)为系统输入温度,data(Num,2)系统输出,电阻
for i = 1:1:Num
sun_x = sun_x + data(i,1);
sun_y = sun_y + data(i,2);
sun_xy = sun_xy + data(i,1)*data(i,2);
sun_x_squ = sun_x_squ + data(i,1)^2;
end
b = (sun_x_squ*sun_y-sun_x*sun_xy)/(Num*sun_x_squ-sun_x*sun_x)
k = (Num*sun_xy-sun_x*sun_y)/(Num*sun_x_squ-sun_x^2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最小二乘法数据进行处理
for i = 1:1:Num
data_zuixiaoerc(i,1) = data(i,1);
data_zuixiaoerc(i,2) = k*data(i,1)+b;
wu_1(i,1) = data(i,1);
wu_1(i,2) = data(i,2)-(k*data(i,1)+b); %对最小二乘法误差进行处理
end
%对数据进行保存
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\wu_1.csv',wu_1');
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\data_zuixiaoerc.csv',data_zuixiaoerc');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(3) %最小二乘法画出拟合直线
for i = 1:1:Num
plot(data(i,1),k*data(i,1)+b,'r*',wu_1(i,1),wu_1(i,2),'r.')
legend('最小二乘法','最小二乘法误差');
xlabel('最小二乘法_温度');
ylabel('最小二乘法_电阻');
title('最小二乘法拟合程度');
hold on
grid on
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%查表法
figure(4) %查表法
for i = 1:1:3
data_chabiao(i,1) = data(i,2);
data_chabiao(i,2) = data(i,2)*2.5967-259.6728;
plot(data(i,2), data(i,2)*2.5967 -259.6728,'r.','MarkerSize',14);
grid on
hold on
end
for i = 3:1:5
data_chabiao(i,1) = data(i,2);
data_chabiao(i,2) = data(i,2)* 2.6774-270.8434;
plot(data(i,2),data(i,2)* 2.6774-270.8434,'r.','MarkerSize',14);
grid on
hold on
end
for i = 5:1:7
data_chabiao(i,1) = data(i,2);
data_chabiao(i,2) = data(i,2)* 2.7632-285.9353;
plot(data(i,2),data(i,2)* 2.7632-285.9353,'r.','MarkerSize',14);
grid on
hold on
end
for i = 7:1:9
data_chabiao(i,1) = data(i,2);
data_chabiao(i,2) = data(i,2)* 2.8539-305.1655;
plot(data(i,2),data(i,2)* 2.8539-305.1655,'r.','MarkerSize',14);
grid on
hold on
end
for i = 9:1:11
data_chabiao(i,1) = data(i,2);
data_chabiao(i,2) = data(i,2)* 2.9507-329.0941;
plot(data(i,2),data(i,2)* 2.9507-329.0941,'r.','MarkerSize',14);
xlabel('电阻');
ylabel('温度');
title('查表法');
grid on
hold on
end
csvwrite('C:\Users\ZHANGTAO\Documents\MATLAB\data_chabiao.csv',data_chabiao);