搜索
 找回密码
 立即注册
查看: 312|回复: 1

实验数据的分析预处理及使用

[复制链接]
  • TA的每日心情

    2018-1-5 16:21
  • 签到天数: 101 天

    [LV.6]常住居民II

    106

    主题

    342

    帖子

    3173

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3173

    灌水之王荣誉会员

    发表于 2016-12-30 13:01:59 | 显示全部楼层 |阅读模式
    最近百纳知识推出的MATLAB应用型案例系列公益课中的第一讲:实验数据的分析预处理及使用。
    我们的系列公益课以一个完整的应用型案例贯穿式教学,通过学习,能够独立的完成一项应用型工作的程序编写,能够独立的调试程序。
    多数学生学习MATLAB都只了解具体的函数功能,当面对实际遇到的科研或工程问题,就显得手足无措。为解决这一问题,我们特别推出MATLAB应用型案例系列公益课。每节视频时间在30-60分钟之间,从实战应用的角度,本视频以刹车油耗的实验数据为例,以MATLAB程序分析为基础,详细介绍实验数据的分析、可视化、预处理及使用,等等。通过视频学习,帮助学员掌握实验数据的的读取、预处理、显示、函数拟合重构实验数据、以及重构函数在Simulink中的调研等的一系列应用流程,使学员掌握实验数据处理中常用的MATLAB分析流程。
    下面是我们MATLAB应用型案例系列公益课中的第一讲的PPT。




    附一:
    如需要本期讲课的相关文件(Engine_Data_SI_NA_2L_I4电子表格、 .m源文件等),请到 http://pan.baidu.com/s/1mhT59aw 自行下载

    m源文件程序
    %% 清除Workspace中的所有变量
    clear %清除变量
    clc %清除命令行
    %% 读取引擎数据
    Engine = readtable(\'Engine_Data_SI_NA_2L_I4.xlsx\');
    % Engine = readtable(\'Engine_Data_SI_NA_2L_I4.xls\');
    % Engine = readtable(\'Engine_Data_SI_NA_2L_I4.txt\');
    % readtable命令的适用范围很广,例如txt, dat, csv, xls, xlsb, xlsm, xlsx, xltm, xltx, ods
    % 我们还可以使用其他命令,注意载入数据的格式将不是table而是矩阵
    % xlsread( \'Engine_Data_SI_NA_2L_I4.xls\', \'SI NA 2L I4\', \'\', \'basic\' );
    %% %% 提取我们关心的数据:引擎速度、期望引擎载荷、实际引擎载荷、引擎能耗
    SP_TMP = Engine.SPEED;
    LDC_TMP = Engine.LOAD_CMD;
    LD_TMP = Engine.LOAD;
    FC_TMP = Engine.BSFC;
    %% 数据预处理
    % 去掉第一行文字项
    SPEED = zeros(length(SP_TMP)-1,1);
    LOAD_CMD = zeros(length(LDC_TMP)-1,1);
    LOAD = zeros(length(LD_TMP)-1,1);
    BSFC = zeros(length(FC_TMP)-1,1);
    % 转换格式:每一行从chars->double
    % 并行计算加快速度
    parfor i = 2:length(SP_TMP)
        TMP1 = SP_TMP(i);
        SPEED(i-1) = str2double(TMP1{:}); % str2num比较慢
        TMP2 = LDC_TMP(i);
        LOAD_CMD(i-1) = str2double(TMP2{:});
        TMP3 = LD_TMP(i);
        LOAD(i-1) = str2double(TMP3{:});
        TMP4 = FC_TMP(i);
        BSFC(i-1) = str2double(TMP4{:});
    end
    % 去掉NaN项
    SPEED = SPEED(~isnan(SPEED));
    LOAD_CMD = LOAD_CMD(~isnan(LOAD_CMD));
    LOAD = LOAD(~isnan(LOAD));
    BSFC = BSFC(~isnan(BSFC));
    %% 数据预处理-处理多次重复实验数据:速度和实际载荷取平均值,能耗取最小值
    LDC_UNQ = unique(LOAD_CMD);
    nRuns = size(LDC_UNQ, 1);
    minBSFC  = zeros(nRuns, 1);
    Load     = zeros(nRuns, 1);
    Speed    = zeros(nRuns, 1);
    for i = 1:nRuns
        idx = LOAD_CMD == LDC_UNQ(i);
        minBSFC(i) = min(  BSFC(idx) );
        Load(i)    = mean( LOAD(idx) );
        Speed(i)   = mean( SPEED(idx) );
    end
    %% 研究一下引擎速度、引擎载荷、引擎能耗这三个变量中每两个变量之间的对应关系
    [~,AX,~,~,~] = plotmatrix([Speed,Load,minBSFC]);
    xlabel(AX(3),\'Speed\');xlabel(AX(6),\'Load\');xlabel(AX(9),\'minBSFC\');
    ylabel(AX(1),\'Speed\');ylabel(AX(2),\'Load\');ylabel(AX(3),\'minBSFC\');
    %% 剔除错误数据并重新分析变量关系
    TMP_IDX = minBSFC>0;
    Speed = Speed(TMP_IDX);
    Load = Load(TMP_IDX);
    minBSFC = minBSFC(TMP_IDX);
    [~,AX,~,~,~] = plotmatrix([Speed,Load,minBSFC]);
    xlabel(AX(3),\'Speed\');xlabel(AX(6),\'Load\');xlabel(AX(9),\'minBSFC\');
    ylabel(AX(1),\'Speed\');ylabel(AX(2),\'Load\');ylabel(AX(3),\'minBSFC\');
    %% 曲面拟合
    cftool(Speed, Load, minBSFC);
    % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    % 自定义曲面函数为f(x,y) = k+a*exp(b*y)+c*exp(d*y)+e*x*y+f*x
    % 导出拟合结果为SurfObj
    % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    %% 使用导出结果
    SurfObj(3000,0.5)
    plot(SurfObj)
    %% 建立2D表格用于Simulink中的插值模块
    speedbreakpoints = linspace( 1000, 5500, 17 );
    loadbreakpoints =  linspace( 0.2, 0.8, 13 );
    [tSpeed, tLoad] = meshgrid( speedbreakpoints, loadbreakpoints );
    tBSFC = SurfObj(tSpeed, tLoad);
    surface(tSpeed, tLoad, tBSFC);
    %%


    来源: 实验数据的分析预处理及使用
  • TA的每日心情

    2017-5-21 22:18
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    6

    主题

    55

    帖子

    226

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    226
    发表于 2017-4-5 20:15:45 | 显示全部楼层
    文件木有了……这个板块发现的太晚

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    1