實驗數據的分析預處理及使用
最近百納知識推出的MATLAB應用型案例系列公益課中的第一講:實驗數據的分析預處理及使用。
鏈接網址為:
http://v.youku.com/v_show/id_XMTYxNjEzOTMxMg==.html?qq-pf-to=pcqq.c2c
我們的系列公益課以一個完整的應用型案例貫穿式教學,通過學習,能夠獨立的完成一項應用型工作的程序編寫,能夠獨立的調試程序。
多數學生學習MATLAB都只了解具體的函數功能,當面對實際遇到的科研或工程問題,就顯得手足無措。為解決這一問題,我們特別推出MATLAB應用型案例系列公益課。每節視頻時間在30-60分鐘之間,從實戰應用的角度,本視頻以剎車油耗的實驗數據為例,以MATLAB程序分析為基礎,詳細介紹實驗數據的分析、可視化、預處理及使用,等等。通過視頻學習,幫助學員掌握實驗數據的的讀取、預處理、顯示、函數擬合重構實驗數據、以及重構函數在Simulink中的調研等的一系列應用流程,使學員掌握實驗數據處理中常用的MATLAB分析流程。
附一:
如需要本期講課的相關文件(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);
%%
小編:三江
《百納學術》由百納公益組織創辦和運營,子斯月、王成禹、何雲飛三位熱心分享的博士生擔任主編,60餘位本碩博同學和青年老師一起帶你了解學術界發生的那些事。科研是一場美麗的冒險,《百納學術》願意做大家冒險路程中最真誠的陪伴者。
※霍金表示有些東西能夠逃脫黑洞的引力,一項實驗驗證了這一觀點
※因為這個DARPA實驗室的靈魂人物,讓人類跨步進入互聯網新紀元
※我與祖國共成長——市南區實驗幼兒園國慶節慶祝活動剪影
※馬克思·恩斯特:不知疲倦的實驗者與發明家
※世界品牌實驗室權威發布:博德四度躋身亞洲品牌500強
TAG:實驗 |