助力國賽 | 第1彈 數據的讀入與寫入

助力國賽 | 第1彈 數據的讀入與寫入

來自專欄 MATLAB學習21 人贊了文章

前言

全國大學生數學建模(CUMCM)已經成為了大學生參賽規模最大的科技競賽盛事,而MATLAB作為當前最優秀的數學軟體之一,在數學建模中的使用是十分的廣泛的。在距離2018國賽還有一個多月之前,小編決定寫MATLAB在數學建模中的應用這樣一個系列為各位參賽朋友助力,內容還是很豐富的。

不過在此之前,先要簡單的說明幾點。其一,由於MATLAB基本操作系列還沒有更完(主要是小編比較「懶」),按這個系列來的朋友可能還不知道MATLAB的基本操作與語法等,但這都是無關緊要的事情因為MATLAB真的很容易上手,那就默認各位MATLAB的基本操作都會了。其二,小編準備把這個系列的重點放在一些智能演算法上,畢竟在都使用常規方法的比賽大軍中,如果能合理使用一些智能演算法來求解問題是會讓人眼前一亮的,但我們還是先從常規的處理數據的方法介紹起。其三,最好修過高數、線性代數和概率論與數理統計相關課程,如果你還學過數值計算和運籌學等課程,那就太好了,因為我們會重點介紹裡面函數的使用,至於裡面包含的數學原理會提及到但不會詳細說明。

最好祝各位,身體健康,建模愉快。

  • 計劃安排
  • ExcelMATLAB的數據交互
  • 記事本與MATLAB的數據交互

計劃安排

先說一下,個人對數學建模的理解,首先這是一個比賽,最後提交的是一篇論文,所以負責寫作的同學任重而道遠,建議使用LaTeXWord用過的人都知道那就不吐槽了。當然寫作是需要東西的,稍微胡扯點是可以的,但通篇胡扯就有點說不過去了,更何況這是科技論文,所以負責編程和建模的同學就得努力了。編程和建模是分不開的,也是不能分開的,你說你建了一個十分漂亮的模型像花一樣,但解不出來,在我看來一點價值都沒有,你說你各種演算法了如於心,一上來就是什麼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,單擊「確定」按鈕完成導出操作。

因為選中的各列數據類型不同,所以data0cell數組。

然後就可以進行下一步操作了。

從MATLAB工作空間導入數據到Excel表格中

Excel表單選中要導入數據的起始單元格,單擊 「MATLAB」按鈕,從下拉列表中選「Get data from MATLAB」 命令,在彈出的對話框中輸入MATLAB變數名,單擊「確定」按鈕完成導入操作。

在Excel中調用MATLAB函數進行運算

例如:調用MATLABmagic函數在Excel中生成6階魔方矩陣。

(1)選擇函數

(2)設置參數

從MATLAB中導入圖片到Excel

需要先在MATLAB繪製出圖片,然後選擇相應命令。

當然上面的方法很方便進行MATLABExcel的數據交互,但是我們有時候需要在MATLAB代碼中讀取Excel上的數據,就需要用到另外一個函數了。

MATLAB讀取Excel上的數據

1.使用函數xlsread讀取單個文件

(1)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代表以D2H4為對角定點的矩形域;

注意當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暑期集訓召集令

TAG:MATLAB | 數學建模 |