---
title: 數學軟體實作 - Matlab-01
tags: 2020 Fall - 數學軟體實作
GA: G-77TT93X4N1
---
# `Matlab` 基礎 - Lecture 1
## 程式註解
> 在開始寫程式之前要先學會寫註解. 這是一個好的程式所必備的, 也是個非常重要的習慣.
> 寫程式最重要是能夠用(而不只是交作業而已), 而且要能夠一直不斷地被使用.
> 好的註解能幫助我們在使用時很快地進入狀況.
以下是 `matlab` 程式註解的方式:
```matlab=
%% 程式段落為兩個百分符號
% 以百分符號作為註釋符號
%{
多行註釋
可以
這樣
表示
%}
```
## 基本指令
> 以下指令都可在 `matlab` 的 command window 中直接執行:
```matlab=
%% 指令
% 指令可以随意跨行,但需要在跨行處用 '...' 標明:
a = 1 + 2 + ...
+ 4
who % 顯示内存中的所有變量
whos % 顯示内存中的所有變量以及他們的類型
clear % 清除内存中的所有變量
clear('A') % 清除指定的變量
clc % 清除命令窗口中顯示的所有指令
help command % 在命令窗口中顯示指定命令的帮助文件
```
> 以下是對初學者最有用的一個指令!
若有時想要終止當前運算, 比如某個程式執行很久了還沒結束似乎寫錯了, 可以在 command window 按 `ctrl+c`.
## 基本運算
```matlab=
%%
(1 + 0.5*3)/8
x = (1 + 0.5*3)/8; %不想讓 MATLAB 顯示運算結果,需在運算式最後加上分號 (;)
x^2 % 算平方
x^0.5 % 開根號的兩種方法 - 1
sqrt(x) % 開根號的兩種方法 - 2
x^(1/3) % 三次根號
pi % 圓周率為內定常數
% 常用数学函数
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
exp(x)
sqrt(x)
log(x)
log10(x)
```
## 複數運算
通常以 i 或 j 代表單位虛數 $\sqrt{i}$
```matlab=
%%
z = 1+2i
real(z) % 實部
imag(z) % 虛部
conj(z) % 共軛複數
exp(z) % Euler's formula
```
## 向量及矩陣運算
> `matlab` 中向量索引是由 $1$ 開始, 跟一般數學常用的 notation 一樣.
```matlab=
%% 向量
x = [4 32 53 7 1] % 行向量
x(2) % ans = 32,MATLAB中向量的索引從1開始
x(2:3) % ans = 32 53
x(2:end) % ans = 32 53 7 1
x = 1:10 % x = 1 2 3 4 5 6 7 8 9 10
x = 1:2:10 % x = 1 3 5 7 9
x = 10:-1:1 % x = 10 9 8 7 6 5 4 3 2 1
x = [4; 32; 53; 7; 1] % 列向量
```
```matlab=
%% 矩阵
A = [1 2 3; 4 5 6]
% 以分号分隔不同的行,以空格或逗号分隔同一行中的不同元素
% A =
% 1 2 3
% 4 5 6
A(2,3) % ans = 6,A(row, column)
A(2,3) = 5 % 將矩陣 A 第二列、第三行的元素值,改變為 5
% A =
% 1 2 3
% 4 5 5
B = A(1:2,2:3) % 取出矩陣 A 的一部分
% B =
% 2 3
% 5 5
C = [A, B] % 將兩矩陣組在一起
% C =
% 1 2 3 2 3
% 4 5 5 5 5
C(:, 3) = [] % 將第三列設為空集合(刪除第三列)
% C =
% 1 2 2 3
% 4 5 5 5
```
## Exercise 1
Given a matrix
$$
A=
\begin{bmatrix}
2 & 1 & 0 & 1 & 4 & 5\\
1 & 2 & 1 & 2 & 3 & 6\\
\end{bmatrix}.
$$
Perform SVD using command `svd` to find $U$, $S$ and $V$ such that $A = USV'$ and check the error of decomposition as
```matlab=
norm(A - U*S*V')
```
> Hint: 先 `help svd` 看一下 `svd` 的用法.
## References
* [LearnXinYminutes - Matlab](https://learnxinyminutes.com/docs/zh-cn/matlab-cn/)
* [MATLAB程式設計:入門篇 - 張智星](http://mirlab.org/jang/books/matlabProgramming4beginner/)