Matlab 入門篇

Similar documents
0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

Microsoft PowerPoint - C_Structure.ppt

投影片 1

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

CHAPTER VC#

CU0594.pdf

iziggi

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

表二 105 年國中教育會考英語科閱讀與聽力答對題數對應整體能力等級加標示對照表 閱讀答 對題數 聽力答對題數 待加強待加強待加強待加強待加強待加強待加強待加強待加強待加強待加強待加強


Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Microsoft Word - ACI chapter00-1ed.docx

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Excel VBA Excel Visual Basic for Application

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc)

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Microsoft Word - ACL chapter02-5ed.docx

資料結構之C語言重點複習

Microsoft PowerPoint _cp02_設定 R 與 RStudio.pptx

( )... 5 ( ) ( )

C/C++ Programming

2016 勒索軟體白皮書

封面-12

######## First set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else y <- 2 ######## Second set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else ###

投影片 1

C/C++ Basics

國立北斗家商 107 學年度第 2 學期第二次期中考科目 : 計算機應用 計算機概論 IV 班級 : 商二 1 2 貿二 資二 綜二 1 作答方式 : 答案卡 選擇題共 33 題, 除第 1 題 4 分, 其餘每題 3 分, 注意作答時間 1. ( ) 使用 Visual Basic 程式語言 (

書面

The golden pins of the PCI card can be oxidized after months or years

第三篇 第 10 章 - 管理者登入第 11 章 - 更改網路商店 Logo 第 12 章 - 系統設定第 13 章 - 商品上架第 14 章 - 付款方式設定第 15 章 - 出貨方式設定第 16 章 - 特價商品 oscommerce 103

Microsoft PowerPoint - VB14.ppt

Microsoft PowerPoint - 遊戲企劃

<img>

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲

現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度, 進而獲得地底物質密度與深度的關係 地下世界知多少 km/s g/cm 3 P Gpa km S P S 3,000 3,000 ak K 透視地底 Percy Bridgma

LCD模組之應用

AutoCAD 用戶如何使用 ArchiCAD

Matlab簡介

Microsoft Word C-A卷.docx

Microsoft Word - ACG chapter00c-3ed.docx

PowerPoint 簡報

4

Microsoft Word - _m30.doc

p-2

Microsoft PowerPoint - VB3

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

第 15 章遞迴呼叫 本章學習目標 說明遞迴函式呼叫概念 透過範例介紹遞迴函式呼叫與應用 本章重點概述 本章主要介紹如何使用遞迴函式呼叫進行計算 1

基本數學核心能力測驗_行為觀察記錄紙_G2版本

穨matlab教學範例ccc.doc

選擇學校午膳供應商手冊適用於中、小學 (2014年9月版)

新・明解C言語入門編『索引』

繪圖前的準備工作 1. 調配 Scilab 存取的記憶體與 Swap 空間 ( 因為繪圖這個動作是很吃資源的 ) 2. 學習簡單的存取外部的資料檔 3.rand() 的使用 (rand 是取隨機亂數, 常被拿來作教學範例使用 ) 4.linspace() 的使用 ( 要繪出一個圖, 常需要宣告一個範


Microsoft PowerPoint - CH02 Introduction to C++ Programming_輸入與輸出 [相容模式]

C/C++ - 文件IO

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

新・解きながら学ぶC言語

<4D F736F F D DA5BFA6A1C476C1C92DBEC7ACECB8D5A8F728B57BB35D292E646F63>

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

使用手冊

, 10, (Poincare) dθ, ( ) 2 1 dθ cos θ = E 2 dt K V V = cos θ E

四川省普通高等学校

Java 程式設計入門

Python_02

新版 明解C言語入門編

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

プログラムの設計と実現II

_汪_文前新ok[3.1].doc

2019_LINE POINTS EXTERNAL BANNER GUIDELINE ver3.0

翁秉仁教授 本著作除另有註明, 所有內容取材自作者翁秉仁教授所著作的微積分講義, 採用創用 CC 姓名標示 - 非商業使用 - 相同方式分享 3.0 台灣授權條款釋出

Microsoft Word - ok翁志文、張佳音...doc

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Microsoft Word - Delta Controller ASCII_RTU_TC

01 用 ActionScript 3.0 開始認識 Flash CS3 Flash 是應用在網路上非常流行且高互動性的多媒體技術, 由於擁有向量圖像體積小的優點, 而且 Flash Player 也很小巧精緻, 很快的有趣的 Flash 動畫透過設計師的創意紅遍了整個網際網路 雖然很多人都對 Fl

SW cdr

X5-05_How_to_use_specified_timer_to_realize_real-time_operation_tc

1-2 二元一次聯立方程式 21 例 1 代入法判斷二元一次聯立方程式的 { x3y5 2xy3 x1y2 x3y3 x2y1 xy 二元一次式 x y x+3y x-y x2y1 x2y1 { x3y5 2xy3 { 2x3y1 xy3 x2y1

C/C++基礎程式設計班

上海市教育考试院关于印发新修订的


Microsoft PowerPoint - chap3

Transcription:

Matlab 入門篇 2017/7/23 林崇聖

Matlab- 介紹 Matlab 為一種高階的程式語言, 可用於資料分析 資料視覺化 數值模擬與計算等, 對於科學的理論分析有很大幫助 例如 : 現在有量測物體隨時間的位置資料, 此時需要得到該物體的速度 加速度, 即可以利用此軟體將位置的資料讀取後, 進行速度 加速的計算, 接著將時間對位置 速度 加速度作圖, 可以快速的得到分析的結果並且以圖形化的方式呈現結果

量測的位置座標 計算速度 加速度, 並畫圖顯示

開啟程式 OR 搜尋程式 : matlab 找尋此圖案的程式開啟

Matlab- 運算符號 可輸入運算方程式或是函數等功能 ( 後面將此處輸入的內容稱為程式碼 ) 數學運算 : 遵守四則運算 4/2+3 4/(2+3) 運算結果不同 * 刮號皆使用小刮號 輸入方程式後按下 Enter 將會顯示結果

Matlab- 數學運算元 https://www.mathworks.com/help/matlab/matlab_prog/matlab-operators-and-special-characters.html

Matlab- 運算符號 關係運算 : 邏輯比較時 : 正確 (True) 傳回 1 不正確 (False) 傳回 0

Matlab- 運算符號 邏輯運算元 : 邏輯運算 : http://1.bp.blogspot.com/-l7ondvqwnum/vafcpqfq5di/aaaaaaaacc0/dtbpx9a5g9k/s1600/bitwiseops%2bcopy.gif

Matlab- 關係與邏輯運算元 https://www.mathworks.com/help/matlab/matlab_prog/matlab-operators-and-special-characters.html

常用運算 科學符號 10^3 = 1E3 = 1e3 = 1000 三角函數 π: pi = 3.1415926535 cosd(90) = cos(pi/2)

顯示格式 style

https://www.mathworks.com/help/matlab/ref/format.html

符號使用, 若在一行中想要輸入兩段程式碼, 則可以使用逗號隔開, 如 1+1, 2+2 ; 若執行後不想顯示結果則可以在程式碼最後加上分號, 如 1+1; 若一行內無法結束程式碼時, 接在符號後面可以達成分行的動作, 如 1+ 1

符號使用

函數使用 函數為特定名稱的指令, 例如輸入 mod(3,2) 將會得到 3 2 的餘數 1

函數查詢 help 函數名可以執行對此函數的說明, 但是說明本身很簡短, 因此有時不易瞭解該函數的使用, 這時候建議到網路上或是官網查詢函數, 將會有詳細的說明和範例

函數查詢 官網查詢 : 輸入函數名即可搜尋 https://www.mathworks.com/?s_tid=gn_logo

函數查詢 https://www.mathworks.com/help/matlab/ref/mod.html?s_tid=srchtitle

開啟 New Script

開啟 New Script

檔案編輯 在這裡輸入要執行的程式碼後, 可以一次全部執行

點擊可以存檔副檔名為.m * 無法使用中文且需要英文開頭 檔案編輯

檔案編輯 點擊 Run 可以執行程式 執行也可以使用快捷鍵 Ctrl+Enter

符號使用 % 程式的註解可以用 % 來分隔程式碼,% 後面的部分將不會被視為程式碼的一部份, 所以不會被執行 %{%} 若想使用不只一行的註解, 則可以用 %{ 想要輸入的註解 %} 來達成

符號使用 %% 在編寫一整段程式碼的時候, 可以使用 %% 來分隔不同部分, 在執行程式碼的時候, 如果使用快捷鍵 Ctrl+Enter 就可以只執行被 %% 隔出來的區域, 但是使用 Run 就不會區分

變數的使用 可以將計算的結果儲存到自己定義名稱的符號中, 但是宣告名稱的時候需要注意 : 1. 第一個字母必須是英文 2. 後續英文 數字和底線 _ 可混和使用 3. 字母的大寫和小寫不同 4. 避免與其他函數的名稱相同 5. 最長只能使用 31 個字母 ( 後面忽略 )

變數的型態 使用的變數型態, 主要有兩種 : 1. 數字型態 (int/double) 2. 文字型態 (char/string) 因此在使用上 1 和 2 不可以視為相同的變數, 在 Matlab 上直接輸入的數字, 將會成為數字的型態, 而字母則會被視為變數的存在 所以想要宣告文字型態的變數, 則需要將想要使用的字母用 想要儲存的字母 隔開來, 如此就可以建立文字的變數

而執行的過程則會顯示在此 清除顯示和變數使用了變數後, 其結果會顯示於此

清除顯示和變數 因此想清除儲存的變數時, 可以使用 clear 清除顯示的結果則可以使用 clc 有時候設計程式時, 變數沒有考慮到重複執行的問題, 因此會導致執行結果出錯, 此時可以在最開頭的地方加入 clear 和 clc 確保重複執行程式時不會出錯

矩陣的使用 想要將同一組的資訊放在同一個變數中, 這時候矩陣就是一個儲存方式 儲存的方式為使用 [A,B,C;D,E,F], 其中英文字母表示不同的變數 ( 當然也可以直接輸入數字或 文字 ), 而, 表示將資訊存在不同行 ( 也可以使用空白隔開 [A B]), 而 ; 則表示將資訊存在不同列, 因此上面的存放方式為 A B C D E F

矩陣的使用 但是再儲存矩陣時需要特別注意每個文字型態變數的長度相同, 以及每個矩陣之間如果要存放時兩者之間的長度也需要相同 例如說 [ str, s ] 是不能儲存成矩陣 只要出現這些紅字就表示矩陣間的長度有不同導致錯誤

矩陣的使用 變數想要呼叫矩陣中特定位置的資料時, 則是使用 X(1,1) 或是 X(1) 來呼叫第一個儲存的資料, 因此輸入兩個以上的數字時 (A,B)A 是指第幾列,B 是指第幾行 只輸入一個數字時, 則是會由列的方向開始排序, 排到第幾個就是對應第幾個數字 行增加的方向 列增加的方向 1 (1,1) 2 (2,1) 3 (1,2) 4 (2,2) 5 (1,3) 6 (2,3)

矩陣的使用 若想要呼叫大於一個資訊時, 則可以使用 : 來呼叫 如 X(1:2,1) 表示第一列第二列的第一行元素同時被呼叫

矩陣的使用 此外也可以利用 : 來建立矩陣, 例如說想要創立以 2 為間隔, 數字由 5 到 11 的矩陣, 可以輸入 5:2:11

矩陣的使用 若不知道此矩陣的大小時, 但是想要呼叫最後一個元素, 則可以利用 end 來達成, 如 X(end,1) 表示第一行最後一列的元素 單獨使用 : 則可以表示全部的元素

矩陣的使用 也可以使用 size(x) 這個函數來得到 X 矩陣的大小, 顯示的結果會是 [ 列行 ] 的矩陣 也可以直接 size(x,1) 來得到 X 有幾列, size(x,2) 則是有幾行

矩陣的使用 也可以直接利用 X(3,4)=2 來建立矩陣的元素, 但是沒有定義元素的部分,Matlab 在數字形式會自動補 0, 而文字形式則會補 null, 表示這個地方沒有文字存在

矩陣的使用 加減乘除的部分則是符合矩陣運算的方式, 因此需要注意矩陣的大小是否可以符合矩陣運算 另一方面, 如果只是想要矩陣間的元素做運算, 則可以使用.* 的方式達成 例如想要 X 和 Y 的每一個元素互相相乘, 則 X.*Y 即可 ( 但是 X 和 Y 的大小要相同, 否則會無法相乘 )

顯示特定文字 若想顯示計算完, 特定格式的文字和數字在指令區, 則需要使用 fprintf fprintf( 需要顯示的格式, 變數 1, 變數 2, ) 當我們不明白計算後的結果是多少時, 沒辦法直接將數字變成文字顯示, 此時可以使用這個函數, 將計算存放的變數指定至函數中, 依照需要的文字格式將變數顯示 例如現在想要輸入學生 A 的成績 :

顯示特定文字 fprintf 特殊符號 : 如同前面的文字格式變數, 內容表示的即是文字 % 後面接序格式, 對應變數的形式, 詳細的對照請參照下一頁 \ 後面接續特定的字母,\n 表示換行 \t 表示 Tab \r\n 則是另外一種換行 所以如果需要使用 \ % 這幾個特殊符號到文字中, 則同時輸入兩次即可 未使用也不影響結果

顯示特定文字 fprintf 特殊符號 : %s 將變數顯示文字的時候 %d 將變數顯示整數的時候 %f 將變數顯示浮點數的時候 ( 小數點 ) %g 比 %f 或 %e 顯示簡潔 ( 可能沒有差異 ) %e 科學記號表示

格式參考 https://www.mathworks.com/help/matlab/ref/sprintf.html?s_tid=srchtitle

建立文字的相似函數 sprintf : 與 fprintf 相似, 但是 sprintf 是建立文字格式的字串輸出, 因此可以將 sprintf 建立的結果儲存至變數中

函數使用 Matlab 彩蛋, 可以執行結果 : vibes teapotdemo logo fifteen xpbombs why

Matlab 程式流程控制篇 2017/7/7 林崇聖

條件選擇 一般在執行的過程中, 會需要利用條件去選擇要執行的動作, 此時就需要使用條件選擇的功能 第一種選擇的方法 : if( 第一個判斷的條件 )%True or False 若第一個判斷成立則執行這裡的程式碼 elseif( 第二個判斷的條件 ) 若第二個判斷成立則執行這裡的程式碼 elseif( ) %elseif 可以使用很多次 else % 不需要輸入判斷條件上述的判斷皆未成立時則執行這裡的程式碼 end % 判斷結束的地方需要加入 end * 可以只使用 if-end 或 if-elseif-end 或 if-else-end

條件選擇 判斷的條件一旦成功, 則後面的條件不會判斷就會結束這個結構

條件選擇 另一種選擇的方法 : switch-case-otherwise-end switch 變數 case 數值 / 文字 * 大於一種選擇時用 { 選擇 1, 選擇 2, } otherwise end 比對變數存放的數值或文字, 尋找是否有符合的 case 存在, 若都不存在時則執行 otherwise, 且與 if 相同由上而下執行, 若已找到符合的 case 則下面的 case otherwise 皆不會執行 * 與 if 相似可以只放一個 case,otherwise 並非必要

條件選擇

條件選擇 條件選擇需注意存放的變數是否皆存在, 由於執行至某個符合的項目就會跳出, 後面選項中的變數可能不會被執行, 後續若還是需要使用到此變數, 就會出現變數未使用的錯誤, 因此注意每個選項的變數使用, 是否符合後續的程式執行

迴圈 有時候我們會需要執行重複的動作, 或是每次動作與上次動作類似, 此時若需要不斷重複寫入近乎相同的程式碼, 則會使整體的程式碼變長 變複雜且耗費時間, 迴圈即可處理這類行的動作 例如 : 計算 1+2+ +50 若是要自行輸入 1+~+50, 則會使程式碼變的很長, 而且很花時間 若是要加到更多的數字, 或是減少數字, 也是非常耗費時間去修改

迴圈 for-end 迴圈 : for 變數名稱 = 起使數值 :( 間隔 ): 結束數值執行程式 end 如同前面建立矩陣 1:2:8 的用法, 由 1 開始計算, 以 2 為間隔, 加到不大於 8 為止 所以對應迴圈會執行的數值為 : 1 3 5 7 這四個數值會對應到定義的變數中, 每次迴圈依序改變變數的數值

迴圈 while-end 迴圈 : while 變數執行程式 end 當變數是數值 1(True) 時,while 將會執行, 因此可用來判別當某數值發生之前仍然繼續執行

迴圈 * 需注意給予的迴圈條件, 有可能導致無法離開 while 迴圈, 造成程式卡住的情形, 此時只要在 Matlab 的指令區按下 Ctrl+C 即可強制停止程式執行 * 使用 break 的函數可以強制跳出迴圈,continue 則可以跳過此次迴圈

迴圈 - 練習 不同數值之加總, 可以快速更改

迴圈 - 練習 不同數值之加總, 可以快速更改

Matlab 繪圖篇 2017/7/7 林崇聖

繪圖指令 Matlab 有許多的繪圖指令, 這裡將只會挑選一小部分的繪圖方式來介紹 使用到的指令 : plot plotyy semilogy semilogx loglog plot3

繪圖指令 首先是最主要的 plot, 大部分的繪圖需求, 使用這個指令即可完成 plot(x 座標,y 座標, 繪圖形式, 選擇格式設定, 格式設定輸入值, ) 想要畫在 x 軸 y 軸的哪一點就分別輸入數字形式的矩陣至座標中, 若只想畫一點, 也可只輸入兩個數值 接著後面的繪圖形式 格式設定若無給予, 則會使用預設值, 若要設定則可以針對線的形式 顏色 大小等做調整

繪圖指令 繪圖形式可分為 : -*b - 第一項表示線條形式 (line style) * 第二項表示點的形式 (marker) b 第三項表示顏色的形式 (color) 所以 - 是實線, 點用 * 的形式,b 表示使用藍色

其他線的形式可參考 : 繪圖指令

其他點的形式可參考 : 繪圖指令

其他顏色的形式可參考 : 繪圖指令

繪圖指令 選擇的格式 : 若要調整線的寬度,0.5 是預設值 LineWidth, 大小如 plot(x, y, linewidth,0.5) 若要調整點的的大小,6 是預設值 : MarkerSize,6 其他可參考 : https://www.mathworks.com/help/matlab/ref/plot.html?searchhighlight=plot&s_tid=doc_srchtitle

繪圖指令 另外可以輸入多組 x,y 座標來繪圖 :

繪圖指令 並且可以同時調整多組的繪圖形式 :

繪圖指令 plotyy 則是用來建立兩個 y 軸的圖, 因此輸入的形式必須是兩組 x,y plotyy(x1,y1,x2,y2,funciton1,function2) 但是這裡要控制圖的線寬或顏色等, 則不能直接使用 plotyy 達成, 後面所輸入的是不同 y 軸的圖案類別, 所以 funcion 是指可以達成 function(x,y) 的函數, 如 plot(x,y), 這樣一來第一組 x1,y1 就是使用這個 function 來繪圖 plotyy(x1,y1,x2,y2, plot, loglog )

plotyy 的繪圖 : 繪圖指令

繪圖指令 semilogy semilogx loglog 屬於對數繪圖, 也就是座標軸的刻度是使用過 log() 處理, 刻度分布不是等比例的變化, 因此適用於數值變化極大的情況, 例如數值一開始在 10^-3 附近的變化, 可是卻突然攀升到 10^5 次方時, 要將在小範圍的變化表現出來,plot 會有困難, 這時候使用對數圖就有幫助 semilogy/x 是指對數的座標軸只有 x 軸或 y 軸 loglog 則是兩個座標軸皆為對數做圖 使用的形式幾乎等同於 plot 的用法 loglog(x,y, 繪圖形式, ) semilogy(x,y, 繪圖形式, )

對數的繪圖 : 繪圖指令

繪圖指令 plot3 則是用來繪製 3D 線圖, 如果想要使用 x,y,z 的座標軸, 就需要用這個函數, 其餘的用法等同於 plot *grid on 則是開啟背景網格 ( 虛線 )

其他繪圖指令 如果要調整的不是繪圖的線, 而是標題或是座標軸, 這時候需要用到不同的指令 xlabel: 可以給予 x 座標軸名稱 ylabel: 可以給予 y 座標軸名稱 title: 可以給予圖的名稱 legend: 可以給予圖例 axis: 可以調整座標軸的範圍

其他繪圖指令

其他繪圖指令 若想要將每次使用的 plot 都繪製在同一張圖上時可以使用 hold on, 輸入 hold off 就可以關閉這個功能

其他繪圖指令 若需要繪製兩張以上的圖在同一張影像上時, 則使用 subplot subplot( 數字 1, 數字 2, 擺放位置 ), 將會由數字 1 2 依照矩陣的切割方式, 切割出可以擺放的區域, 接著對應擺放位置的編號, 放入對應的區域中 例如使用 subplot(2,3,5), 則繪圖後會被放置在 (2,3) 切割的區域中編號第五格的位置 1 2 3 4 5 6

其他繪圖指令 1 2 3 4

繪圖視窗 放大 縮小 移動 * 不改變圖 旋轉視角 資料點 存檔 移動 * 會改變圖

繪圖 - 練習

繪圖 - 練習

Matlab 寫檔與讀檔篇 2017/7/7 林崇聖

寫 讀檔指令 Matlab 同樣有許多的讀寫檔指令, 因此不會全部做介紹 一般在處理資料時, 不可能自己手動不斷輸入資料, 因此資料會以檔案的方式儲存, 接著才用程式讀取檔案內的資料, 讀取以後再進行處理, 處理完畢後又需要將這些資料再次儲存, 因此就需要使用寫檔的方式建立處理完資料的檔案 主要的指令有 fopen fclose fprintf fscanf fseek ftell dlmwrite dlmread

寫 讀檔指令 不論要讀取檔案或是寫入檔案, 一開始必須先指定路徑開啟 / 建立目標檔案, 才能使用後續部分的指令 開啟 / 建立的指令為 fopen( 儲存的路徑, 開啟檔案的權限設定 ) 儲存路徑 如絕對路徑 C:\matlab\data\Data.txt 開啟檔案的權限 如 w+

寫 讀檔指令 * 可注意若非絕對路徑, 單純輸入檔案名稱時如 Data.txt 則此時 Matlab 會搜尋程式本身已經選擇的路徑做搜尋 程式已經選擇的路徑在此

寫 讀檔指令 開啟檔案的權限設定 : 如果未設定則預設為 r 常使用的有 : r 僅讀取檔案, w 僅寫入檔案 ( 若無存在檔案會自動建立檔案, 若有存在檔案則會覆蓋 ), a 與 w 只差別在不會覆蓋檔案, 而是會將新資料接著寫入檔案最後面, r+ w+ a+ 與原本的功能多加讀取 / 寫入的功能,

寫 讀檔指令 [ 開啟檔案的編號, 錯誤訊息 ]=fopen( 檔案路徑, 權限設定 ) fopen 還有同時輸出兩個資訊的形式, 每個開啟的檔案皆會建立一個指定的數值, 後面再使用時即是這個編號 若開啟 / 建立失敗時則檔案編號固定會回傳 -1, 且會說明為何失敗

寫 讀檔指令 且使用完檔案後, 必須要使用 fclose( all ) 的指令, 釋放讀取檔案的指令, 若一直開啟檔案, 則會佔用系統資源, 若使用大量的讀寫檔案時, 容易造成應用程式終止等問題 因此完整的讀檔方式為 : fid=fopen( 檔案路徑, 存取權限 ); 利用 fid 使用其他指令達成檔案處理的過程 fclose( all ); * 也可針對特定開啟的檔案執行關閉 fclaose( fid )

寫 讀檔指令 寫入檔案的指令 : fprintf 這個指令除了能將特定文字顯示於指令區以外, 同樣也能寫入特定文字至檔案中, 並且使用方式與顯示於指令區時相同, 僅需要多加一個開啟檔案編號的變數輸入即可 fprintf( 開啟檔案之編號, 需要顯示的格式, 變數 1, 變數 2, ) 開啟檔案之編號, 為前面使用 fopen 後輸出的變數開啟檔案之編號 =fopen( 檔案路徑, 存取權限 )

寫 讀檔指令 fprintf: * 若讓 fprintf 輸出時, 則會說明特定文字的大小為多少, 這裡的 5 表示 1+1=2 這串文字大小為 5 位元組 (bytes)

寫 讀檔指令 讀取檔案的指令 : fscanf( 開啟檔案之編號, 讀取資料之特定格式 ) 將檔案內容依照特定的格式讀出, 特定格式與 fprintf 使用上相同

寫 讀檔指令 fseek ftell 指令的使用, 與寫入後的游標位置有關, 當 fprintf 寫入完畢後, 檔案若未使用 fopen 重新開啟, 也未使用 fclose( all ), 則此時游標位置將停留在檔案最後 若想要繼續使用其他指定, 如 fscanf 就會發生讀不到東西的狀況 ftell 則會回傳現在的游標位置, 因此使用 fseek 移動位置後 ftell 就改變了

寫 讀檔指令 結果 =fseek( 開啟檔案之編號, 游標移動的距離, 游標起使位置 ) 若指令執行成功, 則結果會得到 0, 反之失敗時, 會得到 -1 開啟檔案之編號為 fopen 的結果游標移動的距離則是根據游標起使位置改變 負的方向 -1-2 游標位置 正的方向 1 2 游標起使位置則以 -1 為檔案開頭,0 為當前位置,-1 為檔案最後 前面使用的 fseek(fid,0,-1) 表示將游標移動至 : fid 開啟的檔案的開頭位置且額外移動 0 的距離所以才會使游標回到檔案開頭的位置

寫 讀檔指令 讀寫檔案時需要注意的地方是特殊符號也會包含在一個字中, 所以移動幾個位置是以幾個字計算, 若存在空白 Tab( \t ) 換行 ( \n ), 都會計算為一個字 * 要特別注意換行的使用, 在 windows 的作業系統時, 是以 \r\n 兩個字來完成的 這是使用 \n 換行的結果, 利用文字文件開啟後並沒有換行 使用 \r\n 後, 才有真正的使 10 11 之間換行

寫 讀檔指令 dlmwrite( 檔案路徑, 資料, 間隔方式,R,C) 為利用特定間隔方式將資料儲存的指令, 可以不使用 fopen 的指令來達成寫檔案的動作 * 也因此不需要 fclose 檔案路徑為需要存檔的檔案位置 資料則是將要寫入的數值或文字 間隔方式則是決定以矩陣儲存的每個元素之間的間隔方式, 若未填入時則預設為, ( 逗號為間隔方式 ) R C 則是決定開始寫檔的位置要平移多少距離, 並且 R 是以列的方式移動,C 則是以行的方式移動

寫 讀檔指令 * 若是以行區隔的數值會以間隔方式隔開, 但是列區隔的數值會用 \n 的換行方式間隔

寫 讀檔指令 若是需要使用其他的設定時, 則形式與前面將不同每種設定前需要用文字來指定 dlmwrite( 檔案路徑, 資料, 指定格式敘述, 指定格式 ) 將換行的方式改為 windows 的格式 coffset 0 1 0 1 2 3 roffset 間隔為 Tab( \t ) * 有確實換行 -apeend 所以不會覆蓋掉原本的檔案

寫 讀檔指令 dlmread( 檔案路徑, 間隔方式,R,C) 為利用特定間隔方式將資料讀入, 一樣不需 fopen 的指令

寫 讀檔指令 dlmread( 檔案路徑, 間隔方式,[R1,C1,R2,C2]) 如果讀取的檔案也要限制結束的位置, 則要改由矩陣的形式輸入

迴圈 條件選擇 - 作業 費式數列 : 1+1+2+3+5+8+13+ +1346269 1. 請問 1346269 為第幾項? 2. 請問加到此項目時總和為多少?

繪圖 - 作業 1. 將下列位置座標輸入至矩陣中, 並繪製成圖 ( 每一個位置點間隔時間為 0.5 秒 ) 後來的位置 原來的位置 2. 計算 = 後來的時間 原來的時間並繪製成圖 後來的時間 原來的時間的速度 2 3. 利用相同的方式計算加速度並繪製成圖 4. 將三張圖合併至一起如下一頁的圖 * 以上皆須加入圖名 圖例 座標軸之說明 * 速度 加速度繪圖時需取絕對值

繪圖 - 作業

讀檔 寫檔 - 作業 1. 將繪圖題之位置寫入檔案中 2. 將繪圖題之速度寫入檔案中 3 將繪圖題之加速度寫入檔案中

進階挑戰題 - 寫檔 將讀寫檔案的位置 速度 加速度對時間的關係寫入檔案中, 若無對應時間的資料時, 寫入 NaN, 如下一頁之結果 * 建立矩陣時, 可將要儲存的值輸入 NaN

進階挑戰題 - 寫檔

進階挑戰 -IV Curve 將各位已經儲存好的檔案 ( 使用 LabVIEW 儲存的檔案 ) 將一次完整掃描電壓的資料繪製成圖並將多次掃描電壓的圖綜合成 GIF 檔案儲存

進階挑戰 -IV Curve 參考程式碼 : 加入圖標說明 即時繪圖且將 plot 得到的圖案轉換成可以輸出圖案檔案的資料 輸出 GIF 檔

進階挑戰題 - 資料處理 讀取附件的檔案 ( 請至網站上下載 ): 進階挑戰資料.txt 檔案標題時間 第三項資料 第三項資料 0.23 選擇第三項資料處理, 0.99381294964 得到新的資料後, 將新的資料寫入, 寫入時檔案標題時間保留, 並將第二項改為新資料, 第三項以後刪除 時間與資料間隔使用 Tab 且檔案標題與下方資料要再增加標籤說明, 時間 目標溫度, 之間間隔需要與下方資料對齊

進階挑戰題 - 資料處理 寫入的檔案就如下面所示 : 加入標籤 檔案標題 第三項資料計算後結果 時間保留紀錄

進階挑戰題 - 資料處理 除了寫入檔案以外還需要繪製圖, 將 x 軸為時間變化,y 軸為量測的第二項資料, 以及經過計算後的第三項資料, 利用 subplot 繪製成上下兩張圖 第二項資料需要使用 semilogy 繪製, 皆須加入圖名 圖例 座標說明並調整繪製範圍 且繪製虛線標示特定數值 第二項資料圖名 :Pressure, Start time=star_time *star_time 為進階挑戰資料內的 檔案標題 x 座標 :time (s) y 座標 :Pressure (pa) 圖例 :pressure 繪製範圍 :x 軸範圍 0~5 10 5 y 軸範圍 10 5 ~2 10 5

進階挑戰題 - 資料處理 第三項資料圖名 :Thermocouple Temparature, Start time=star_time *star_time 為進階挑戰資料的檔案標題 x 座標 :time (s) y 座標 :temparature ( ) 圖例 : 目標溫度繪製範圍 :x 軸範圍 0~5 10 5 y 軸範圍 -60~90 虛線繪製第二項資料 :y 軸 5 10 3 繪製虛線第三項資料 :y 軸 -40.5-39.5-30.5-29.5 59.5 60.5 69.5 70.5 繪製虛線

進階挑戰題 - 資料處理 最後必須在程式前後加上 tic toc 指令這兩個指令可以達成計時的功能, 因此最後的挑戰題會需要加上這兩個指令來得到執行完整體程式的時間 如果需要建立相同值特定大小的矩陣, 可以使用 ones( 列數量, 行數量 ) 可建立數值皆 1 的矩陣 zeros( 列數量, 行數量 ) 可建立數值皆 0 的矩陣

結果圖 : 進階挑戰題 - 資料處理

若加入座標軸調整則可完成此圖 進階挑戰題 - 資料處理