1)a:b 表示[a,a+1,……,b]
>> A=1:5
A =
1 2 3 4 5
2)當然如果b-a不是整數的話,則向量的最後一位數是n+a,且n=fix(b-a)
>> A=1.2: 4.9
A =
1.2000 2.2000 3.2000 4.2000
3)上面的前提是a< span>,如果a>b則會出現空值
>> A=5: 1
A =
Empty matrix: 1-by-0此時 A是空矩陣
4)a:c:b表示[a,a+c,……,a+n*c],其中n=fix((b-a)/c)
>> A=1:3: 11
A =
1 4 7 10
5) a:c:b在以下情況為空值
c>0,且a<0,< span>且a>b
>> A=11:3: 1
A =
Empty matrix: 1-by-0
6) A(:)表示以一列的方式顯示A中所有元素
>> A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> A(:)
ans =
1
4
2
5
3
6
7)b=A(i,: )表示把矩陣A的第i行存入b
>> b=A(1,:)
b =
1 2 3
8)b=A( :,j)表示把矩陣A的第j列存入b
>> b=A(:,1)
b =
1
4
9)b=A(J :K)表示把矩陣A中[A(J),A(J+1),...,A(K)]這些元素存入b中
>> b=A(3:5)
b =
2 5 3
10)b=A(:,c:d)表示把矩陣A的第c到第d列存入b中,當然c,d大於A的列數則出錯(b=A(c:d,:)表示取行)
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> b=A(:,2:3)
b =
2 3
5 6
8 9
11)
>> pic = imread('undersampling.tif'); % 讀入undersampling.tif'檔案
>> [x,y,z] = size(pic); % x = 97 y=116 z =3
>> A = [1:2:x]; % 取1, 3, 5, 7, ..., 97
12) Matlab 有一整套從浮點數取整數的函式
fix( )指令是將小數部份「無條件捨去」。
例如 fix(3.2) =3 fix(3.8)= 3
而 fix(-3.2) =-3 fix(-3.8)=-3
round( )函式是四捨五入 (rounding)
例如 round(3.2) = 3 round(3.8)=4
round(-3.2)=-3 round(-3.8)= -4。
ceil( ) 函式是「最小上界」(ceiling 天花板)
例如 ceil(3.2) =4,但是 ceil(-3.2) = -3
floor( )函式是「最大下界」(floor 地板)。
例如 floor(3.2) = 3,但是 floor(-3.2)= -4
如果 x 本來就是個整數,那麼 fix(x), round(x), ceil(x) 和 floor(x) 都是 x 本身,不會改變。
sin(x) Sine of argument x in radians
sind(x) Sine of argument x in degrees
help sin 查詢命令sin( )
help sind 查詢命令sind( )
clc
clear
13) 次方
計算次方的符號就是常用的 ^ 記號 。指數部份可以是任意數,例如
2^2 或 2^(-1) 或 2^(1/2) 或 2^(1.25) 或 10^6 或 10^(-6) = 10e-6如果指數很小,科學記數法就會自動出現,例如
2^(-1074)但是如果指數太小,計算的結果會自動「遜位」 (underflow) 成為 0,例如
2^(-1075)如果指數很大,科學記數法也會自動出現,例如
2^1023但是如果指數太大,計算的結果會「溢位」 (overflow) 成為 Inf,這就是「無限大」(infinity) 的意思,例如
2^1024順便說另一個有趣的符號:NaN 就是 Not a Number 的意思 (不是個數)。譬如不小心計算了
0/0就會得到 NaN。
但是,要執行負數的次方運算,可就要小心了。如果是負數的整數次方,都還可以理解,例如
(-2)^3 或(-2)^(-3)14) 複數。
負數的非整數次方以"複數"來表示EX: (-2)^(3.13) = -8.0343 - 3.4768i
(-4)^(1/2) = 0.0000 + 2.0000i (表示"-4" 被開平方)
(-8)^(1/3) = 1.0000 + 1.7321i (表示"-8" 被開3次方)
譬如我們要 Matlab 計算
sqrt(-1)而以為他不會,但是他回答 0 + 1.0000i
Matlab 能夠在計算中自動產生複數,使用者也可以直接輸入複數。譬如
1 + 2i注意,上面的 2 與 i 之間,可以不寫一個 * 號,寫了也可以。Matlab 的所有運算符號、所有函式,都懂得如何做複數計算。例如
(1+2i) - (1-2i)或者
3* (1+2i)而此刻 abs( ) 計算的是複數的「長度」,例如
abs(3+4i)根據畢氏定理,我們知道答案的確是 5。
複數的平方根是由「比較係數」法求得,例如要找 1+2i 的平方根,就計算 (a + bi)2 = 1+2i 然後比較係數得到聯立方程式
a2 - b2 = 1Matlab 可以代勞,只要說
2ab = 2
sqrt(1+2i)就行了。
最後,我們談談
(-1)^(1/3)這是 -1 開三次方根的意思,我們一般會認為答案是 -1,但是 Matlab 說是 0.5000 + 0.8660i。稍加檢查,發現這個數是
它也就是複數平面單位圓上角度為 60 度的點。而 -1 的三次方根其實是 x3 = -1 的根,我們知道三次多項式在複數中必有三個根 (其中一個實根,兩個共軛複根), -1 只是其中一個根,而 Matlab 計算出來的另是一個複根。
假設某向量R=3+4j,則:
>>R=3+4j
R = 3.0000 + 4.0000i
由此可以利用計算其絕對值abs(R)、夾角angle(R):
>>abs(R)
ans = 5
>>angle(R)*180/pi
ans = 53.1301
後者之角度已轉換為度數。利用同一複數量R亦可求其實數、虛數及共軛複數:
>>real(R) %實數部份
ans = 3
>>imag(R) %虛數部份
ans = 4
>>conj(R) %共軛複數
ans = 3.0000 - 4.0000i
根據尤拉公式,虛數之自然對數可以與正、餘弦作轉換,其基本型式為:
eix=cos(x)+ i sin(x)
此時,x之值為弧度值。因此利用這種轉換亦可將自然對數之型式轉換為三函數之關係:例如,設theta=[ 20 60 80]度,則
>>theta=[20 60 80]/180*pi %先轉換為弧度
theta = 0.3491 1.0472 1.3963
>>eix=exp(i*theta)
eix = 0.9397 + 0.3420i 0.5000 + 0.8660i 0.1736 + 0.9848i
>>cos(theta)+i*sin(theta)
ans = 0.9397 + 0.3420i 0.5000 + 0.8660i 0.1736 + 0.9848i
由此可以證明三個不同角度下,其演算結果相同。
就超函數之定義而言,其值與指數間具確定的關係,依照前述之cosh(x)與sinh(x)之定義,兩者相加可以得到如下之如果:
ex=cosh(x)+sinh(x)
>>cosh(1:5)+sinh(1:5)
ans = 2.7183 7.3891 20.0855 54.5982 148.4132
>>exp(1:5)
ans = 2.7183 7.3891 20.0855 54.5982 148.4132
兩者對應之結果一致。
15) MATLAB中怎麼把小數轉換為分數(小數轉分數,最簡分數)
MATLAB中,有些計算的結果是小數。怎麼把小數轉換為分數?
如計算a=1/3。計算出的結果是a=0.333333,怎麼將此結果轉為1/3?
Answer : 使用 1) rats(a) 2) format rat;a
EX:
a=1/3;
format rat;
a=1/3
EX:
rats(199.981/9)
ans = 3533/159
16) MATLAB中怎麼把小數轉換為分數,並且取出分子,分母
Answer: 使用 numden 函數
EX:
a=199.996
b=9
c=a/b
str_a= num2str(rats(c)); %轉換為分數,並將分數轉為字串
[n,m]=numden(sym(rats(c))) %將分子取出為n 分母取出為m
r=double(n); %Convert symbolic matrix to MATLAB numeric form%
s=double(m); %Convert symbolic matrix to MATLAB numeric form%
disp (['n(分子)=' num2str(r)]);
disp (['m(分母)=' num2str(s)]);
二、矩陣運算的範例 (download)
補充 : 陣列,矩陣差異
陣列的運算是“對應位置”的元素做運算,與矩陣運算差異甚大,請小心分辨使用時機。
二維陣列又稱為矩陣,行列數相等的矩陣稱變方陣
ex: 陣列乘法
>> a=(0:9)
a = 陣列
0 1 2 3 4 5 6 7 8 9
>> b=(9:-1:0)
b = 陣列
9 8 7 6 5 4 3 2 1 0
>> a.*b % 陣列乘法, a陣列中的元素分別與b陣列中的元素相乘
ans =
0 8 14 18 20 20 18 14 8 0
>> a*b (矩陣乘法)
??? Error using ==> mtimes
Inner matrix dimensions must agree.
??? Error using ==> mtimes
Inner matrix dimensions must agree.
note:矩陣乘法中a的列數必需等於b的行數
ex: 矩陣乘法
>> a
=
1 2 3
4 5 6
4 5 6
>> b
b =
5 6
7 8
9 10
7 8
9 10
>> a*b
ans =
46 52
109 124
109 124
>> a
a =
1 2 3
4 5 6
7 8 9
4 5 6
7 8 9
>> b
b =
4 5 6
7 8 9
1 2 3
7 8 9
1 2 3
>> a*b
ans =
21 27 33
57 72 87
93 117 141
57 72 87
93 117 141
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。