助力國賽 | 第1彈 數據的讀入與寫入
來自專欄 MATLAB學習21 人贊了文章
前言
全國大學生數學建模(CUMCM
)已經成為了大學生參賽規模最大的科技競賽盛事,而MATLAB
作為當前最優秀的數學軟體之一,在數學建模中的使用是十分的廣泛的。在距離2018國賽還有一個多月之前,小編決定寫MATLAB
在數學建模中的應用這樣一個系列為各位參賽朋友助力,內容還是很豐富的。
MATLAB
基本操作系列還沒有更完(主要是小編比較「懶」),按這個系列來的朋友可能還不知道MATLAB
的基本操作與語法等,但這都是無關緊要的事情因為MATLAB
真的很容易上手,那就默認各位MATLAB
的基本操作都會了。其二,小編準備把這個系列的重點放在一些智能演算法上,畢竟在都使用常規方法的比賽大軍中,如果能合理使用一些智能演算法來求解問題是會讓人眼前一亮的,但我們還是先從常規的處理數據的方法介紹起。其三,最好修過高數、線性代數和概率論與數理統計相關課程,如果你還學過數值計算和運籌學等課程,那就太好了,因為我們會重點介紹裡面函數的使用,至於裡面包含的數學原理會提及到但不會詳細說明。最好祝各位,身體健康,建模愉快。
- 計劃安排
Excel
與MATLAB
的數據交互- 記事本與
MATLAB
的數據交互
計劃安排
先說一下,個人對數學建模的理解,首先這是一個比賽,最後提交的是一篇論文,所以負責寫作的同學任重而道遠,建議使用LaTeX
,Word
用過的人都知道那就不吐槽了。當然寫作是需要東西的,稍微胡扯點是可以的,但通篇胡扯就有點說不過去了,更何況這是科技論文,所以負責編程和建模的同學就得努力了。編程和建模是分不開的,也是不能分開的,你說你建了一個十分漂亮的模型像花一樣,但解不出來,在我看來一點價值都沒有,你說你各種演算法了如於心,一上來就是什麼BP啊,遺傳啊,支持向量機啊,但一看到題就不知道怎麼辦了,那就不知道這是「真懂」啊還是「自己懂」啊。這是一個系統的工程,是需要相互幫助的,互相配合的。合作中有分工,分工中有合作,這樣子多好啊,何必有要去破壞呢?
扯遠了,話歸正題。計劃是先從常規的方法入手,這主要包括數據的擬合和插值問題、規劃問題(這是一個很重要的模型,要好好去研究研究)還包括部分的數據可視化操作,再之進入灰色預測,然後會迎來我們的重頭戲——智能演算法。智能演算法主要包括,人工神經網路、遺傳演算法、粒子群演算法和模擬退火演算法。然後會介紹其他比較有用方法,這主要包括小波分析和計算機模擬。大概安排就是這樣,如果有所變動,以後再說。
本文主要介紹,如何在MATLAB
上進行數據的讀入與讀出,因為這是我們進行數據分析的第一步。數據處理是數學建模的基礎,我們是通過分析數據來得出結論和獲得信息的。從數學建模的角度來看,將數據反映出來的信息轉化成數學表達式是建模的基礎,通常對數據處理做的其實就是趨勢分析或者將其轉化為函數表達式。在這些方面由於MATLAB
包多,處理起來就十分的方面了。
Excel與MATLAB的數據交互
Excel
表格是比較常用的數據儲存軟體,在數模中提供的數據往往就是Excel
格式的,如何將其讀入MATLAB
中往往就成了數據分析的第一步。其實可以通過,一個一個的輸入或者複製粘貼,但這樣往往耗時較多且無法保證數據的準確傳播,誰沒有手「斗」一下的時候呢?接下來將會介紹如何在Excel
中獲取MATLAB
中的數據,或者在MATLAB
中獲取Excel
的數據。
MATLAB
中的Excel Link
工具是一個實現與Excel
進行交互的插件。通過Excel Link
工具,用戶可以在Excel
工作區和MATLAB
工作區之間進行數據交換,也可以在Excel
中調用MATLAB
的函數。
安裝
Excel Link
的安裝是在MATLAB
安裝過程中,隨其它組件一起安裝。安裝完成後,還需要在Excel
中進行一些設置和才能使用。
設置
選 Excel
「文件」菜單的 「選項」菜單項,打開「Excel
選項」對話框。
Excel
選項」對話框中,選左邊欄的「載入項」, 然後單擊右邊面板下部的「轉到」按鈕,彈出 「載入宏」對話框。在「載入宏」對話框中,單擊「瀏覽」按鈕,打開文件「瀏覽」對話框。
在文件「瀏覽」對話框,選MATLAB
的安裝文件夾的子文件夾toolboxexlink
。在文件夾exlink
中選excllink.xlam
文件,單擊「確定」按鈕返回。
「載入宏」對話框的「可用載入宏」列表中多了一個「Spreadsheet Link 3.2.5 for use with MATLAB and Excel
」選項。選中該項,返回Excel
窗口。
MATLAB命令組
載入Spreadsheet Link
後,在Excel
窗口「開始」選項卡中多了一個MATLAB
命令組。命令組中包含的一組命令項,分別用於實現啟動MATLAB
、導入和導出數據、調用MATLAB
函數等。
將Excel表格中的數據導出到MATLAB工作空間
文件「data0.xlsx
」,將其中的A~D
列的數據導出MATLAB
工作區,存入變數data0
。
namestypesxyanswerSallyType13.145YesTomType12.520NoJoyType30.511NoLilyType22.180Uncertain
操作步驟:
①在Excel
中選中5列,單擊 「開始」選項卡工具欄「MATLAB
」按鈕,從下拉列表中選「Send data to MATLAB
」 命令。
②在彈出的對話框中填入變數名data0
,單擊「確定」按鈕完成導出操作。
因為選中的各列數據類型不同,所以data0
為cell
數組。
然後就可以進行下一步操作了。
從MATLAB工作空間導入數據到Excel表格中
在Excel
表單選中要導入數據的起始單元格,單擊 「MATLAB
」按鈕,從下拉列表中選「Get data from MATLAB
」 命令,在彈出的對話框中輸入MATLAB
變數名,單擊「確定」按鈕完成導入操作。
在Excel中調用MATLAB函數進行運算
例如:調用MATLAB
的magic
函數在Excel
中生成6階魔方矩陣。
(2)設置參數
從MATLAB中導入圖片到Excel
需要先在MATLAB
繪製出圖片,然後選擇相應命令。
當然上面的方法很方便進行MATLAB
和Excel
的數據交互,但是我們有時候需要在MATLAB
代碼中讀取Excel
上的數據,就需要用到另外一個函數了。
MATLAB讀取Excel上的數據
1.使用函數xlsread
讀取單個文件
num=xlsread(filename)
filename
是單引號括起來的帶路徑的文件名,函數直接讀取filename
所指文件的sheet1
中的數據區域存儲到雙精度矩陣num
中;其中,數據區域的選取規則是:對表格前幾個含有非數值的行(列)直接忽略,不算入數據區域;另外如果在數據區域中含有非數值的單元,將其處理為nan
。(2)num = xlsread(filename, -1)
輸入後matlab
將會打開相應的exel
文件,用滑鼠選擇需要導入的數據區域,可以切換到想要的sheet
。(3)num = xlsread(filename, sheet)
其中sheet
用來指定讀入excel
文件的第幾個sheet
,此時的sheet
取值大於1的整數。(4)num = xlsread(filename,sheet, range)
其中range
指定一個矩形的區域,用單引號括起來;例如:D2:H4
代表以D2
和H4
為對角定點的矩形域;注意當excel
中有合併單元格時,任何一個合併前的單元格的名字(比如D1
)都會指代整個合併後的單元格,而將整個單元格讀入,所以為了避免麻煩,盡量避免在需要讀入的表格中合併單元格。
由於比較簡單,在此就不再演示了。
記事本與MATLAB的數據交互
在MATLAB
中可以讀取存入記事本中的數據,也可以將MATLAB
中的數據保存在記事本中,以便後續操作。
MATLAB讀取記事本中的數據
當記事本中全是數據時,可以使用load
函數,其調用格式如下:
load(filename)
其中filename
是被單引號包括的文件的名字和擴展名,運行此函數後會把記事本中的數據按矩陣的形式導入到名為filename
的變數中。
load
函數了,可以考慮使用『textread』函數,調用方式如下:[A,B,C] = textread(filename,format,N)
其中,A,B,C,...
為每一列數據將要保存的變數名;format
為讀取格式;N
為讀取次數。
format
由%加上格式符組成,常見的數值格式控制符如下:
- %d:整數。
- %f:小數形式的實數。
- %e:科學計數法形式的實數。
- %c:字元。
- %s:字元串。
在%
之後還可以加上數據寬度,例如%3d
,%10.3f
。
MATLAB
讀取該test.txt
文件:
>> [name,type,x,y,answer] = textread(test.txt,%s Type %n %f %n %s,2) name = 2×1 cell 數組 Sally Tom type = 1 1x = 3.1000 2.5000y = 45 20answer = 2×1 cell 數組 Yes No
在該程序中最後一個參數2表示讀取兩行數據。
在MATLAB
中,還有一個函數fscanf
可以讀取記事本中的文件,功能十分的強大,如果感興趣可以進行百度或者Help
幫助。
將MATLAB數據寫入記事本中
如何寫入數據?用save
函數,調用格式如下:
save file obj1 obj2.....
將個變數obj1,obj2.....
存入文件file
中(是.mat
格式)。如果我們想保存為.txt
格式,可以考慮使用函數『fprintf』。看如下一個例子:
fid = fopen(tp.txt,wt); fprintf(fid,This is the database of class 1.
); name = Sally;types = 1;x = 3.1; y = 45;answer = Yes; fprintf(fid,%s Type %u %f %u %s
,name,types,x,y,answer); name = Tom;types = 1;x = 2.5; y = 20;answer = No; fprintf(fid,%s Type %u %f %u %s
,name,types,x,y,answer); name = Joy;types = 3;x = 0.51; y = 1;answer = No; fprintf(fid,%s Type %u %f %u %s
,name,types,x,y,answer); name = Lily;types = 2;x = 2.1; y = 80;answer = Uncertain;fprintf(fid,%s Type %u %f %u %s
,name,types,x,y,answer);fclose(fid);
運行結果如下:
在程序中第一句是打開一個文件,返回一個指標fid
,第二句就是在文件中寫入一句話,然後後面就是不斷追加,如此而已,還是十分簡單的。
編輯不易,歡迎推廣
推薦閱讀:
※Excel數據可視化——熱力地圖
※國賽前如何高效率的學習
※2017年美國數學建模比賽的一點心得
※國賽需了解的模型和演算法
※HiMCM暑期集訓召集令