---
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)