MATLAB之数据处理+公式拟合
MATLAB之数据处理+公式拟合
前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式。
试验数据背景
本次试验有三个自变量:V、M、G,因变量为F,每组试验重复5次,试验目的是探寻F与三个自变量之间的关系,先定性后定量。
数据采集格式如下:

采集值与时间曲线如下:

数据处理
(1)判断有用数据,并取出存储
有用的数据是指在采集值与时间曲线图中,因变量平稳时的取值。可截取平稳区间的数据,对其求平均值,并求方差判断其稳定性。
(2)单个试验数据处理
在单个试验中,关键问题是如何判断平稳区间。在经过对时间曲线图的认真分析后,确定如下的处理方法:
step1:先将txt文件导入数组,并从数组中提取第三列数据(前两列为时间),计算数组的大小;
step2:判断平稳区间的尾值final,将数组的最后一个数据与倒数第二个比较,看其距离是否足够大,如果足够大,则final即为该值,若不够大,继续用倒数第二个数据与倒数第三个数据进行比较,依次迭代,直到找出两个相邻数据距离足够大的位置,则能够找出final的位置。
step3:判断平稳区间的初始位置,在step2中已经确定尾值final,经观察发现,尾值对应的因变量与所求的平均值相差不大,依次,依次比较final与(fina-1)对应的因变量的距离,判断是否足够大,如其足够大,则可确定初始位置start。为加快收敛速度,将步长改为5。且又,观察可知,每组数据至少有40个,故从(final-40)处开始比较。
step4:确定平稳区间的位置后,从原始数据中提取出有用数据,计算平均值,均方差。
function [m,s] = true_data( data )
%计算平均值,均方差
data = singal(:,3); %提取对应的数据
len = length(data) ; %获取数组长度
n = len;
while ((n > 0) &(abs(data(n-1 ) - data(n )) < 0.3))
n = n-1;
end
final = n-3 ; %确定末尾位置
s = final - 40;
while((n > 0)&(abs(data( s ) - data(final)) < 0.05))
s = s - 5;
end
start = s + 10; %确定初始位置
value = data (start : final); %提取可用数据
m = mean(value); %计算平均值,均方差
s = std(value);
end
(3)处理整个文件夹:每个文件夹中的数据,单一变量为grade(volume、magnetic相同),并且每组试验重复三次。命名规则为:第一个数字表示grade,第二个数字表示试验组数,即11.txt,12.txt,13.txt,14.txt,15.txt,21t.txt,22.txt、、、55.txt。利用循环语句,依次处理每个txt文件,将所有处理结果依序存入一个数组中。
注意:如何按照文件名,依次读取文件内容? strcat函数配合load函数。可利用eval函数。
V = '5%_' ; M =0; G = 5; group =5;
dataPro = cell(G,group);
for yali = 1 : G
for zushu = 1 : group
filename = strcat(num2str(yali),num2str(zushu),'.txt'); %考虑eval函数
temp = load(filename);
[mean,sd] = singal_process(temp);
dataPro{yali,zushu} = [mean,sd]; % 存储数据
end
end
(4)处理结果存储:将处理过后的数据(存放在dataPro中)存入execl表格,并将表格根据本组试验数据的特定信息命名存入当前文件夹: 使用xlswrite函数。
filename = strcat(V,num2str(M),'H');
numPro = cell2mat(dataPro);
xlswrite(filename,numPro);
(5)误差分析:用误差棒注明所测量数据的不确定度的大小(仅参考平均值与均方差)。
Average=numPro(:,1); %平均值
Variance=numPro(:,2); %方差值
Time=1:1:5;
errorbar(Time,Average,Variance,'k') %函数调用格式 errorbar(A,B,X)
xlabel('次数');ylabel('力/N');
数据处理结果:

作图分析
主要分析M对F的影响:将相同V,G,不同M的三组组数据,将其从开始变化阶段到稳定阶段的图像进行对比分析。
step1:根据数据处理中的方法,从txt文件中提取有效数据。数据处理的不同之处在于起始点是从数据非零位置,判断更加简单。
function value = true_data( data )
%由输入的原始数据(data),输出整理之后的有效数据(value)
data = -data(:,3); %获取第三列数据,并将数据取正
len = length(data) ; %获取数组长度
n = len;
while ((n >0) &&(abs(data(n-1 ) - data(n )) < 0.3))
n = n-1;
end
final = n;
if final >5
final = final -5 ; %确定尾点
end
s = 1;
while((abs(data( s ) ) < 0.03))
s = s + 1;
end
start = s-5; %确定初始位置
value = data(start:final);
end
step2:单条曲线选择画图程序,包括不同曲线的设置。
function line_plot( value,i )
switch i
case 1 %第一条曲线 红色
plot(value,'-r','LineWidth',1.5);
case 2 %第二条曲线 黑色
plot(value,'-k','LineWidth',1.5);
case 3 %第三条曲线 蓝色
plot(value,'-b','LineWidth',1.5);
otherwise ;
end
end
step3: 将文件名写入num数组中,循环读取数据,画图
num = [0 250 450]; %文件名
for i = 1 : 3
filename = strcat(num2str(num(i)),'.txt');
temp = load(filename);
value = true_data( temp ) ; %提取数据
line_plot( value,i ); %画图
hold on
end
step4:图像后续处理,图像句柄的使用
title('xxxxx');
set(get(gca,'title'),'fontangle','normal','fontweight','normal','fontsize',16);
xlabel('Time/s');
set(gca,'xtick',[0:20:150]);
set(get(gca,'xlabel'),'fontangle','normal','fontweight','bold','fontsize',15);
ylabel('xxx/N');
set(get(gca,'ylabel'),'fontangle','normal','fontweight','bold','fontsize',15);
legend('no1','no2','no3','Location','southeast');
set(legend,'FontSize',14,'FontWeight','normal','Box','off');
作图结果:

公式拟合(拟合效果不好,本问题未完成)
依据试验处理所得的数据,分析自变量V、M、G与因变量为F之间的关系。
拟合问题可用以下思路处理:
matlab公式拟合函数:reglm,stepwise,nlinfit,regress,robustfit
SPSS软件
神经网络拟合(matlab工具箱或者其他软件,数据量要求较大)
本次试验暂时只用regress函数做了简单的拟合,效果不好,后续有进展在进行补充。
step1: 首先将各组数组整理到一个excel表格中,n行4列,每列依次为V,M,G,最后一列为因变量F
step2:读取excel表格数据,用regress函数拟合公式
step3:由拟合公式计算出期望数据,与真实数据作图比较
clear;clc;
xydata = xlsread('data1.xlsx');
y = xydata(:, 4);
x1= xydata(:, 1);
x2= xydata(:, 2);
x3= xydata(:, 3);
n=length(x1);
X=[ones(n,1) x1.^2 x1 x2.^2 x2 x3.^2 x3 ]; %不同的模型修改
%regress函数各返回值意义:
% b为变量系数,b(1)为常数项,b(2)依次为模型前面的各项系数;
% bint回归系数的区间估计;
% r为残差,越接近零越好>>>>就是误差abs(y - 估计值)
% rint为置信区间
%stats为检验回归模型的四个统计量:判定系数R^2,F统计量观测值,,,
%检验的p的值(p值很小(P<0.001),说明拟合模型有效),误差方差的估计。
[b,bint,r,rint,stats] = regress(y,X);
%regress回归误差分析,做误差图像test为预测值
testing4 = b(1) + b(2)*x1.^2+ b(3)*x1+ b(4)*x2.^2 ...
+ b(5)*x2 + b(6)*x3.^2 + b(7)*x3;
t = 1 : 180;
%图形解释:黑线表示原始数据,红线表示模型预测数据
plot(t,y,'k',t,testing4,'r');
拟合效果图:

MATLAB之数据处理+公式拟合的更多相关文章
- 基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...
- MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)
MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在MATLAB中“fitgmdis ...
- MATLAB实例:多元函数拟合(线性与非线性)
MATLAB实例:多元函数拟合(线性与非线性) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请看:随笔分类 - MATLAB作图 之前写过一篇博 ...
- Matlab之数据处理
写在前面的,软件不太强大,每次保存都需要生成rec和dark的文件,在处理是只需要一个就行了,所有网上查看了下运用批处理的命令去掉多余的文件: 解决办法:windows命令模式下CMD进入文件的目录, ...
- excel之实验数据处理线性拟合
实验前准备:设计表格项,通过设计公式,从而输入原始数据后直接得到最终的结果数据,学习常用的VBA公式及处理:Cn-$B$4,其中的$B$4表示绝对单元格位置;SUM(Xm:Yn)求范围内的和. 针对实 ...
- MATLAB cftool工具数据拟合结果好坏判断
SSE和RMSE比较小 拟合度R接近于1较好 * 统计参数模型的拟合优度 1.误差平方和(SSE) 2. R-Square(复相关系数或复测定系数) 3. Adjusted R-Square(调整自由 ...
- MATLAB多项式及多项式拟合
多项式均表示为数组形式,数组元素为多项式降幂系数 1. polyval函数 求多项式在某一点或某几个点的值. p = [1,1,1];%x^2+x+1 x = [-1,0,1];y = po ...
- MATLAB实现插值和拟合
插值问题在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值.实例:海底探测问题某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些 ...
- matlab切比雪夫拟合
matlab中没有切比雪夫拟合的现成算法,这里把我程序中的这部分抽出来,说一下. 1.首先是切比雪夫计算式 function [ res ] = ChebyShev(num,i) res=; else ...
随机推荐
- 在虚拟机中的Ubuntu搭建java开发环境
前提: 安装好虚拟机 在虚拟机中装好了Ubuntu系统 以上两步请参见我的博客(python进阶) 1 安装JDK 1.1 到官网下载jdk压缩包并保存在本地 jdk1.8:点击前往 1.2 在Ubu ...
- p4180 次小生成树
传送门 分析: 次小生成树的求法有两种,最大众的一种是通过倍增LCA找环中最大边求解,而这里我介绍一种神奇的O(nlogn) 做法: 我们先建立最小生成树,因为我们用kruskal求解是边的大小已经按 ...
- Entity Framework Code-First(11):Configure One-to-One
Configure One-to-Zero-or-One Relationship: Here, we will configure One-to-Zero-or-One relationship b ...
- Spring入门第六课
XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 ByType(根据类型自动装配):若I ...
- javascript函数自执行里的this为什么指向window
当你要确定“函数中的this是什么”的时候,永远不要到函数定义的地方去找答案!而是要到函数被调用的地方找答案! 具体说:函数里面的this的含义,是由它被调用的方式决定的. 换句话说,当你看到下面的代 ...
- 1.4 如何防止sql注入
如何防止sql注入 1.检查变量数据类型和格式 如果你的SQL语句是类似where id={$id}这种形式,数据库里所有的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型: ...
- asp.net core 邮件发送
由于core不带smpt 所以借助MimeKit 以163邮箱为例 var message = new MimeMessage ();message.From.Add (new MailboxAddr ...
- Spring基本原理模拟(IoC部分)
package ioc; import java.io.File; import java.lang.reflect.Method; import java.util.Collections; imp ...
- 《OD学hadoop》20160910某旅游网项目实战
一.event事件分析 叶子节点只计算一次 父节点的触发次数由子节点的数量节点 事件流:是由业务人员定义的一系列的具有前后顺序的事件构成的用户操作行为,至少包括两个事件以上. 目标:以事件流为单位,分 ...
- Python中list作为默认参数的陷阱
在Python中,作为默认参数的一定要是不可变对象,如果是可变对象,就会出现问题,稍不注意,就会调入陷阱,尤其是初学者,比如我(┬_┬). 我们来看一个例子. def add(L=[]): L.app ...