MATLAB曲线拟合,查表法,拟合法

对传感器测量参数进行数据的拟合

话不多说直接上代码

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);



 
 
 
 
 
 
 
 
 
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值