1.1.1 數值矩陣的生成
1.實數值矩陣輸入
MATLAB的強大功能之一體現在能直接處理向量或矩陣。當然首要任務是輸入待處理的向量或矩陣。
不 管是任何矩陣(向量),我們可以直接按行方式輸入每個元素:同一行中的元素用逗號(,)或者用空格符來分隔,且空格個數不限;不同的行用分號(;)分隔。 所有元素處於一方括號([ ])內;當矩陣是多維(三維以上),且方括號內的元素是維數較低的矩陣時,會有多重的方括號。如:
>> Time = [11 12 1 2 3 4 5 6 7 8 9 10]
Time =
11 12 1 2 3 4 5 6 7 8 9 10
>> X_Data = [2.32 3.43;4.37 5.98]
X_Data =
2.43 3.43
4.37 5.98
>> vect_a = [1 2 3 4 5]
vect_a =
1 2 3 4 5
>> Matrix_B = [1 2 3;
>> 2 3 4;3 4 5]
Matrix_B = 1 2 3
2 3 4
3 4 5
>> Null_M = [ ] %生成一個空矩陣
2.複數矩陣輸入
複數矩陣有兩種生成方式:
第一種方式
例1-1
>> a="2".7;b=13/25;
>> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1]
C=
1.0000 5.4000 + 0.5200i 0.8544
0.7071 5.3000 4.5000
第2種方式
例1-2
>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16]
R =
1 2 3
4 5 6
M =
11 12 13
14 15 16
>> CN="R"+i*M
CN =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i
4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i
1.1.2 符號矩陣的生成
在MATLAB中輸入符號向量或者矩陣的方法和輸入數值類型的向量或者矩陣在形式上很相像,只不過要用到符號矩陣定義函數sym,或者是用到符號定義函數syms,先定義一些必要的符號變量,再像定義普通矩陣一樣輸入符號矩陣。
1.用命令sym定義矩陣:
這時的函數sym實際是在定義一個符號表達式,這時的符號矩陣中的元素可以是任何的符號或者是表達式,而且長度沒有限制,只是將方括號置於用於創建符號表達式的單引號中。如下例:
例1-3
>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!],')
sym_matrix =
[a b c]
[Jack Help Me! NO WAY!]
>> sym_digits = sym('[1 2 3;a b c;sin(x)cos(y)tan(z)]')
sym_digits =
[1 2 3]
[a b c]
[sin(x)cos(y)tan(z)]
2.用命令syms定義矩陣
先定義矩陣中的每一個元素爲一個符號變量,而後像普通矩陣一樣輸入符號矩陣。
例1-4
>> syms a b c ;
>> M1 = sym('Classical');
>> M2 = sym(' Jazz');
>> M3 = sym('Blues')
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =
[ a b c]
[Classical Jazz Blues]
[ 2 3 5]
把數值矩陣轉化成相應的符號矩陣。
數值型和符號型在MATLAB中是不相同的,它們之間不能直接進行轉化。MATLAB提供了一個將數值型轉化成符號型的命令,即sym。
例1-5
>> Digit_Matrix = [1/3 sqrt(2) 3.4234;exp(0.23) log(29) 23^(-11.23)]
>> Syms_Matrix = sym(Digit_Matrix)
結果是:
Digit_Matrix =
0.3333 1.4142 3.4234
1.2586 3.3673 0.0000
Syms_Matrix =
[ 1/3, sqrt(2), 17117/5000]
[5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)]
注意:矩陣是用分數形式還是浮點形式表示的,將矩陣轉化成符號矩陣後,都將以最接近原值的有理數形式表示或者是函數形式表示。
1.1.3 大矩陣的生成
對於大型矩陣,一般創建M文件,以便於修改:
例1-6 用M文件創建大矩陣,文件名爲example.m
exm=[ 456 468 873 2 579 55
21 687 54 488 8 13
65 4567 88 98 21 5
456 68 4589 654 5 987
5488 10 9 6 33 77]
在MATLAB窗口輸入:
>>example;
>>size(exm) %顯示exm的大小
ans=
5 6 %表示exm有5行6列。
1.1.4 多維數組的創建
函數 cat
格式 A="cat"(n,A1,A2,…,Am)
說明 n="1和n"=2時分別構造[A1;A2]和[A1,A2],都是二維數組,而n=3時可以構造出三維數組。
例1-7
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A4=cat(3,A1,A2,A3)
A4(:,:,1) =
1 2 3
4 5 6
7 8 9
A4(:,:,2) =
1 4 7
2 5 8
3 6 9
A4(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
或用另一種原始方式可以定義:
例1-8
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3
A5(:,:,1) =
1 2 3
4 5 6
7 8 9
A5(:,:,2) =
1 4 7
2 5 8
3 6 9
A5(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
1.1.5 特殊矩陣的生成
命令 全零陣
函數 zeros
格式 B = zeros(n) %生成n×n全零陣
B = zeros(m,n) %生成m×n全零陣
B = zeros([m n]) %生成m×n全零陣
B = zeros(d1,d2,d3…) %生成d1×d2×d3×…全零陣或數組
B = zeros([d1 d2 d3…]) %生成d1×d2×d3×…全零陣或數組
B = zeros(size(A)) %生成與矩陣A相同大小的全零陣
命令 單位陣
函數 eye
格式 Y = eye(n) %生成n×n單位陣
Y = eye(m,n) %生成m×n單位陣
Y = eye(size(A)) %生成與矩陣A相同大小的單位陣
命令 全1陣
函數 ones
格式 Y = ones(n) %生成n×n全1陣
Y = ones(m,n) %生成m×n全1陣
Y = ones([m n]) %生成m×n全1陣
Y = ones(d1,d2,d3…) %生成d1×d2×d3×…全1陣或數組
Y = ones([d1 d2 d3…]) %生成d1×d2×d3×…全1陣或數組
Y = ones(size(A)) %生成與矩陣A相同大小的全1陣
命令 均勻分佈隨機矩陣
函數 rand
格式 Y = rand(n) %生成n×n隨機矩陣,其元素在(0,1)內
Y = rand(m,n) %生成m×n隨機矩陣
Y = rand([m n]) %生成m×n隨機矩陣
Y = rand(m,n,p,…) %生成m×n×p×…隨機矩陣或數組
Y = rand([m n p…]) %生成m×n×p×…隨機矩陣或數組
Y = rand(size(A)) %生成與矩陣A相同大小的隨機矩陣
rand %無變量輸入時只產生一個隨機數
s = rand('state') %產生包括均勻發生器當前狀態的35個元素的向量
rand('state', s) %使狀態重置爲s
rand('state', 0) %重置發生器到初始狀態
rand('state', j) %對整數j重置發生器到第j個狀態
rand('state', sum (100*clock)) %每次重置到不同狀態
例1-9 產生一個3×4隨機矩陣
>> R="rand"(3,4)
R =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
例1-10 產生一個在區間[10, 20]內均勻分佈的4階隨機矩陣
>> a="10";b=20;
>> x="a"+(b-a)*rand(4)
x =
19.2181 19.3547 10.5789 11.3889
17.3821 19.1690 13.5287 12.0277
11.7627 14.1027 18.1317 11.9872
14.0571 18.9365 10.0986 16.0379
命令 正態分佈隨機矩陣
函數 randn
格式 Y = randn(n) %生成n×n正態分佈隨機矩陣
Y = randn(m,n) %生成m×n正態分佈隨機矩陣
Y = randn([m n]) %生成m×n正態分佈隨機矩陣
Y = randn(m,n,p,…) %生成m×n×p×…正態分佈隨機矩陣或數組
Y = randn([m n p…]) %生成m×n×p×…正態分佈隨機矩陣或數組
Y = randn(size(A)) %生成與矩陣A相同大小的正態分佈隨機矩陣
randn %無變量輸入時只產生一個正態分佈隨機數
s = randn('state') %產生包括正態發生器當前狀態的2個元素的向量
s = randn('state', s) %重置狀態爲s
s = randn('state', 0) %重置發生器爲初始狀態
s = randn('state', j) %對於整數j重置狀態到第j狀態
s = randn('state', sum(100*clock)) %每次重置到不同狀態
例1-11 產生均值爲0.6,方差爲0.1的4階矩陣
>> mu="0".6; sigma="0".1;
>> x="mu"+sqrt(sigma)*randn(4)
x =
0.8311 0.7799 0.1335 1.0565
0.7827 0.5192 0.5260 0.4890
0.6127 0.4806 0.6375 0.7971
0.8141 0.5064 0.6996 0.8527
命令 產生隨機排列
函數 randperm
格式 p = randperm(n) %產生1~n之間整數的隨機排列
例1-12
>> randperm(6)
ans =
3 2 1 5 4 6
命令 產生線性等分向量
函數 linspace
格式 y = linspace(a,b) %在(a, b)上產生100個線性等分點
y = linspace(a,b,n) %在(a, b)上產生n個線性等分點
命令 產生對數等分向量
函數 logspace
格式 y = logspace(a,b) %在( )之間產生50個對數等分向量
y = logspace(a,b,n)
y = logspace(a,pi)
命令 計算矩陣中元素個數
n = numel(a) %返回矩陣A的元素的個數
命令 產生以輸入元素爲對角線元素的矩陣
函數 blkdiag
格式 out = blkdiag(a,b,c,d,…) %產生以a,b,c,d,…爲對角線元素的矩陣
例1-13
>> out = blkdiag(1,2,3,4)
out =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
命令 友矩陣
函數 compan
格式 A = compan(u) %u爲多項式系統向量,A爲友矩陣,A的第1行元素爲 -u (2:n)/u(1),其中u (2:n)爲u的第2到第n個元素,A爲特徵值就是多項式的特徵根。
例1-14 求多項式的友矩陣和根
>> u=[1 0 -7 6];
>> A="compan"(u) %求多項式的友矩陣
A =
0 7 -6
1 0 0
0 1 0
>> eig(A) %A的特徵值就是多項式的根
ans =
-3.0000
2.0000
1.0000
命令 hadamard矩陣
函數 hadamard
格式 H = hadamard(n) %返回n階hadamard矩陣
例1-15
>> h="hadamard"(4)
h =
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
命令 Hankel方陣
函數 hankel
格式 H = hankel(c) %第1列元素爲c,反三角以下元素爲0。
H = hankel(c,r) %第1列元素爲c,最後一行元素爲r,如果c的最後一個元素與r的第一個元素不同,交叉位置元素取爲c的最後一個元素。
例1-16
>> c="1:3",r=7:10
c =
1 2 3
r =
7 8 9 10
>> h="hankel"(c,r)
h =
1 2 3 8
2 3 8 9
3 8 9 10
命令 Hilbert矩陣
函數 hilb
格式 H = hilb(n) %返回n階Hilbert矩陣,其元素爲H(i,j)=1/(i+j-1)。
例1-17 產生一個3階Hilbert矩陣
>> format rat %以有理形式輸出
>> H="hilb"(3)
H =
1 1/2 1/3
1/2 1/3 1/4
1/3 1/4 1/5
命令 逆Hilbert矩陣
函數 invhilb
格式 H = invhilb(n) %產生n階逆Hilbert矩陣
命令 Magic(魔方)矩陣
函數 magic
格式 M = magic(n) %產生n 階魔方矩陣
例1-18
>> M="magic"(3)
M =
8 1 6
3 5 7
4 9 2
命令 Pascal矩陣
函數 pascal
格式 A = pascal(n) %產生n階Pascal矩陣,它是對稱、正定矩陣,它的元素由Pascal三角組成,它的逆矩陣的所有元素都是整數。
A = pascal(n,1) %返回由下三角的Cholesky係數組成的Pascal矩陣
A = pascal(n,2) %返回Pascal(n,1)的轉置和交換的形式
例1-19
>> A="pascal"(4)
A =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>> A="pascal"(3,1)
A =
1 0 0
1 -1 0
1 -2 1
>> A="pascal"(3,2)
A =
1 1 1
-2 -1 0
1 0 0
命令 託普利茲矩陣
函數 toeplitz
格式 T = toeplitz(c,r) %生成一個非對稱的託普利茲矩陣,將c作爲第1列,將r作爲第1 行,其餘元素與左上角相鄰元素相等。
T = toeplitz(r) %用向量r生成一個對稱的託普利茲矩陣
例1-20
>> c=[1 2 3 4 5];
>> r=[1.5 2.5 3.5 4.5 5.5];
>> T="toeplitz"(c,r)
T =
1 5/2 7/2 9/2 11/2
2 1 5/2 7/2 9/2
3 2 1 5/2 7/2
4 3 2 1 5/2
5 4 3 2 1
命令 Wilkinson特徵值測試陣
函數 wilkinson
格式 W = wilkinson(n) %返回n階Wilkinson特徵值測試陣
例1-21
>> W="wilkinson"(4)
W =
3/2 1 0 0
1 1/2 1 0
0 1 1/2 1
0 0 1 3/2
>> W="wilkinson"(7)
W =
3 1 0 0 0 0 0
1 2 1 0 0 0 0
0 1 1 1 0 0 0
0 0 1 0 1 0 0
0 0 0 1 1 1 0
0 0 0 0 1 2 1
0 0 0 0 0 1 3
from:http://hi.baidu.com/hxk622/blog/item/10723f21cbd3ee4aad34dea0.html