--- title: 數學軟體實作 - Matlab-02 tags: 2020 Fall - 數學軟體實作 GA: G-77TT93X4N1 --- # `Matlab` 基礎 - Lecture 2 ## 常用向量函数 ```matlab= %% 常用向量函数 x = rand(6, 1) %生成一個 6x1 的隨機向量, 其元素在(0,1) max(x) % 最大值 min(x) % 最小值 length(x) % 元素個数 sort(x) % 向量排列 sum(x) % 各元素之和 prod(x) % 各元素之積 mode(x) % 眾數 median(x) % 中位数 mean(x) % 平均值 std(x) % 標準差 ``` > 常用數學函数皆可作用在向量, 只是會作用在個別元素 ```matlab= %% 常用数学函数 - examples sin(x) exp(x) ``` ## 元素運算 ```matlab= %% 元素運算 x.^2 % 將每個元素值平方 x.^(2/3) % 每個元素值的三分之二次方 y = rand(6,1) % 生成另一個隨機向量 x.*y % 求兩向量個別元素相乘, !兩向量需要大小完全一樣! ``` ## Exercise 2 1. 給定全班70位同學分數 (分數為介於0-100之間整數) 2. 試求以下五標 * 頂標:該科成績位於第88百分位數之考生級分 * 前標:該科成績位於第75百分位數之考生級分 * 均標:該科成績位於第50百分位數之考生級分 * 後標:該科成績位於第25百分位數之考生級分 * 底標:該科成績位於第12百分位數之考生級分 3. 試列出前五名分數 > 請自己生成 70 位同學的分數 (0-100這範圍內的整數). --- ## M 檔案 > M 檔案可再細分為底稿(Scripts)及函數(Functions). > > 底稿的效用和將個別 MATLAB 的指令或運算式,在 MATLAB 的命令視窗內逐一輸入完全一樣,因此在底稿執行時,可以直接使用儲存於工作空間的變數,而且在底稿中設定的變數,也都在工作空間中看得到 > > 至於函數則需要用到輸入引數(Input Arguments)和輸出引數(Output Arguments)來傳遞資訊. 函數長相如下: ```matlab = function output = function_name(input) ``` ```matlab= %% 求向量平均值的函數 % 輸入為一向量 x % 輸出為其平均值 function avg = average1(x) % input: x, a vector % output: avg, the average value of x avg = sum(x)/length(x); end ``` > 以上請存成一個 `average1.m` 檔案. 接著可以在 command windows 裡呼叫它 ```matlab= > x = [1 2 3 4 5]; > avg = average1(x); > avg ``` ## 在 command window 顯示文字或變數內容 ```matlab= disp('頂標=') % 在 command window 顯示文字 disp(x) % 在 command window 顯示變數內容 ``` ```matlab= %% 求向量平均值的函數 % 輸入為一向量 x % 無輸出, 不過會在 command windows 顯示平均值 function average2(x) % input: x, a vector disp('全班平均') sum(x)/length(x) end ``` > 以上請存成一個 `average2.m` 檔案. 接著可以在 command windows 裡呼叫它 ```matlab= > x = [1 2 3 4 5]; > average2(x) ``` ### Rules 1. 需有詳盡的註解 2. 檔名, 函數, 變數等名稱皆需有意義, 禁止使用無意義的名稱 3. 勿使用與內建函數或變數相同的名稱 > 舉例來說, 請在 command windows 照以下輸入, 並解釋為什麼會有這結果 ```matlab= > sin(pi) > pi = 3 > sin(pi) ``` > 第二個例子 ```matlab= > x = rand(6, 1); > sum = sum(x) > y = rand(6, 1); > sum(y) ``` > 以上皆為錯誤使用名稱的例子. 所以務必避免. ## Assignment 1 試寫一函數, `input` 為學生分數, `output` (輸出並顯示出)五標以及前五名成績 1. 給定全班70位同學分數 (分數為介於0-100之間整數) 2. 試求以下五標 * 頂標:該科成績位於第88百分位數之考生級分 * 前標:該科成績位於第75百分位數之考生級分 * 均標:該科成績位於第50百分位數之考生級分 * 後標:該科成績位於第25百分位數之考生級分 * 底標:該科成績位於第12百分位數之考生級分 3. 試列出前五名分數 ## References * [LearnXinYminutes - Matlab](https://learnxinyminutes.com/docs/zh-cn/matlab-cn/) * [MATLAB程式設計:入門篇 - 張智星](http://mirlab.org/jang/books/matlabProgramming4beginner/) * [15-1 底稿](http://mirlab.org/jang/books/matlabProgramming4beginner/15-1_script.asp?title=15-1%20%A9%B3%BDZ) * [15-2 函式](http://mirlab.org/jang/books/matlabProgramming4beginner/15-2_function.asp?title=15-2%20%A8%E7%A6%A1)