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 ...
随机推荐
- mahout 实现canopy
环境: mahout-0.8 hadoop-1.1.2 ubuntu-12.04 理论这里就不说了,直接上实例: 下面举一个例子. 数据准备: canopy.dat文件,COPY到HDFS上,文件内容 ...
- Python中使用json.loads解码字符串时出错:ValueError: Expecting property name: line 1 column 1 (char 1)
解决办法,json数据只能用双引号,而不能用单引号
- [转]成为优秀Java程序员的10大技巧
转自:http://www.codeceo.com/article/10-good-java-programmer-tips.html Java程序员有许多应遵循的守则或最佳实践方式.本文概述了每个开 ...
- hdu1072
#include <iostream> #include <cstdio> #include <cstring> #include <queue> us ...
- 实验楼Linux基础入门第一周
&&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...
- TMF大数据分析指南 Unleashing Business Value in Big Data(二)
前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Righ ...
- 某欧洲电信运营商OSS功能架构
- SQL中的union,except,intersect用法
限制:所有查询中的列数和列的数序必须相同 union all:完全整合两个结果集查出所有数据 union:查出两个表的数据并且去除重复的数据 except:去重之后只会保留第一个表中的数据,查询a表在 ...
- 【java数据类型和mysqk数据类型对照表】
java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lan ...
- Lxc的cgroup技术
你将学到什么 什么是cgroup 如何使用cgroup Cgroup简介 CGroup是Control Groups的缩写,是Linux内核提供的一种可以限制.记录.隔离进程组所使用的硬件资源的机制. ...