matlab数值拟合r2_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数值拟合r2_MATLAB之数据处理+公式拟合相关推荐
- matlab中离开网格的流量,数学建模【数据处理方法(一维、二维插值方法;数据拟合方法;插值and拟合的MATLAB实现)】...
[学习网址:MOOC---郑州轻工业大学---数学建模与实验]数学建模专栏 笔记01[第1.2章][概述.软件介绍] 笔记02[第3章][数据处理方法] 笔记03[第4章][规划模型] 笔记04[第5 ...
- matlab拟合空间曲线。散点拟合三维曲线
问题:已知三组数据,就是直角坐标系中的x,y,z的三个数组,要求在matlab中拟合出这条空间曲线. 帖子源数据: a= [22.77,17.13,14.37,12.98,12.34,12.12,12 ...
- [zz]用三阶贝塞尔曲线(贝兹曲线)拟合劣圆弧的公式(附伪代码)
转自:用三阶贝塞尔曲线(贝兹曲线)拟合劣圆弧的公式(附伪代码) 三阶贝塞尔曲线有四个控制点A.B.C.D, 若要用三阶贝塞尔曲线拟合劣圆弧,自然的要求是: 1)A位于圆弧的起点,D位于圆弧的终点: 2 ...
- 多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合
matlab的应用-多项式函数及多项式拟合 Matlab 的应用- 多项式函数及多项式拟合 本节将向大家简要介绍 matlab 在多项式处理方面的应用. 多项式函数主要有: roots 求多项式的根 ...
- 数学建模最小二乘法拟合_MATLAB最小二乘法拟合曲线公式
假设 y = f(x),那么每个x应该会对应一个y.对一个未知公式的 f(x)系统,在科学实验中,常常需要测量两个变量的多组数据,然后找出他们的近似函数关系.通常,我们把这种处理数据的方法称之为经验配 ...
- MATLAB实现多峰高斯函数拟合/多峰高斯分布函数拟合(MATLAB全代码)
基于MATLAB实现多峰高斯函数拟合/多峰高斯分布函数拟合,提供三类多峰函数拟合方法,分别为双峰函数.三峰函数和自定义高斯函数. 1 原理 2 MATLAB代码实现 MATLAB函数如下: funct ...
- 基于Matlab平台的BP神经网络进行数据拟合
基于Matlab平台的BP神经网络进行数据拟合 上次讨论了基于Hopfield神经网络的数字识别,BP(Back Propagation)神经网络也可以进行相关的数字识别如手写数字识别等,由于BP神经 ...
- MATLAB中的一维插值与函数拟合
本文主要记录Matlab中常用的一维插值与函数拟合的使用方法 文章目录 前言 一.一维插值 二.函数拟合 2.1 多项式拟合 2.1.1多项式拟合指令 2.1.2 图形窗口的多项式拟合 2.2 指定函 ...
- 【智能控制实验】基于MATLAB的BP神经网络实现非线性函数拟合设计
基于MATLAB的BP神经网络实现非线性函数拟合设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理,掌握matlab工具箱设计BP神经网络拟合非线性模型的方法(m文件):掌握在图形用户界面下设 ...
最新文章
- Centos修改系统语言
- BF法-字符模式匹配
- xenserver PXE安装系统错误的解决
- vuex mysql_Vue插件---Vuex(仓库,数据库)
- 深度学习发展与机器学习
- 荣耀30S首销全平台夺冠 赵明:满足消费者对5G的所有需求和想象
- 日志查看_实时查看容器日志
- Flink + Iceberg,百亿级实时数据入湖实战
- 几大经典算法c语言cnds,各种算法的性能分析.docx
- Java输出菱形图案
- Python 根据图片url,批量下载图片
- js弹出框 确定 取消
- 半导体随机存储器(random access memory)
- 在R语言中如何打开一般方法打不开的中文xls文件?
- 华为云WeLink:让智能办公行走云端
- 心理测量学信度计算机试题,心理测量学 第三章 信度.doc
- 关于Web实现前后端分离,前后端解耦
- 应用在LED植物照明中的LED照明灯
- Class类的简单介绍
- 汇编两个十进制数相乘,以二进制和十六进制分别输出