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