#matlab code
sort(a) 預設公升序,列優先
sort(a,'descend') 降序
sort(a,1) 對每一列中的元素公升序排列
sort(a,2) 對每一行中的元素公升序排列
[a_sort,idx] = sort(a) a_sort表示排序後的結果,idx表示a_sort元素在a中的位置索引。a_sort(idx) = a
sortrows(a,n) n:大於0,表示公升序排列;n:小於0,表示降序排列。表示將第n列公升序(降序排列),其他列跟著動。
%舉兩個例子:
data =13
2765
498sortrows(data,1)
ans =
1324987
65sortrows(data,-1)
ans =
7654981
32
rand()
均勻分布的隨機數或矩陣
語法y = rand(n)
y = rand(m,n)
y = rand([m n])
y = rand(m,n,p,...)
y = rand([m n p...])
y = rand(size(a))
rand
s = rand('state')
描述rand函式產生由在(0, 1)之間均勻分布的隨機數組成的陣列。
y = rand(n) 返回乙個n x n的隨機矩陣。如果n不是數量,則返回錯誤資訊。
y = rand(m,n) 或 y = rand([m n]) 返回乙個m x n的隨機矩陣。
y = rand(m,n,p,...) 或 y = rand([m n p...]) 產生隨機數組。
y = rand(size(a)) 返回乙個和a有相同尺寸的隨機矩陣。
1,rand(3)*-2 rand(3)是乙個3*3的隨機矩陣(數值範圍在0~1之間)
然後就是每個數乘上-2
2 ,用matlab隨機產生60個1到365之間的正數 1+fix(365*rand(1,60));
3,用rand函式隨機取100個從-1到1的數x1,x2,...,x = rand(1,100) * 2 - 1
randn()
說明:由於產生的是隨機數序列,這裡所說的均值為0,只是說這寫隨機數的分布期望值為0
而不是說這個序列的平均值就一定為0。
功能:產生標準正態分佈的隨機數或矩陣的函式。
用法:y = randn(n)
返回乙個n*n的隨機項的矩陣。如果n不是個數量,將返回錯誤資訊。
y = randn(m,n) 或 y = randn([m n])
返回乙個m*n的隨機項矩陣。
y = randn(m,n,p,...) 或 y = randn([m n p...])
產生隨機數組。
y = randn(size(a))
返回乙個和a有同樣維數大小的隨機數組。
randn
返回乙個每次都變化的數量。
舉個例子:
(1)產生均值為0.6,方差為0.1的乙個5*5的隨機數方式如下:
x = 0.6 + sqrt(0.1) * randn(5)
randperm()
函式功能:隨機打亂乙個數字序列。
語法格式:
y = randperm(n)
y是把1到n這些數隨機打亂得到的乙個數字序列。生成的數字不會重複。
y = randperm(n,k)
產生隨機數,並返回前k個。
1、randperm
根據matlab文件,randperm最常用的用法是是返回乙個從1
-n的包含n個數的隨機排列(每個數字只出現一次)——以行向量的形式.
如果希望從1
-n的數字序列裡面隨機返回k個數,則可以使用
p = randperm(n,k)
其中,這k個數之間彼此也是不相同的。可見,randperm能夠產生不重複的隨機排列,結合原資料,可寫成類似下面的形式:
new= old( randperm( size(old,1) ) , : );
這樣新陣列中的各行就被重排了。如果各列也需要重排,則可以巢狀使用。
matlab文件中還說,randperm完成的是不重複的重排取樣(k-permutations),如果結果中的數需要重複多次出現的情況,則可以用:
randi(n,1,k)
randperm和rand、randi、randn一樣,其隨機數的生成是收到rng命令控制的,因此,可通過該命令影響隨機資料流rand stream的情況。
randsample()
randsample(n,k)和randperm(n,k)的功能一樣,都是產生k個不相同的數(1-n)。
randsample(array,k),事實上就是randperm和原陣列結合使用的形式,從array陣列裡面隨機取出k個不相同的數。
replacement是乙個bool變數,為1的時候,取出的數可能是重複的,為0的時候,可能不重複。
很顯然,看到這裡,會發現randsample和randperm很相似,譬如,之前舊陣列隨機排序的需求可寫成下面的樣式:
new = old( randsample( 1:length(matrix) , length(matrix) ,0),: );
ornew = randsample( old, length(old), 0 ); <-- i preferred this.
第四種情形,多出來乙個w,是權重係數,能夠根據此權重係數在原陣列(或1-n陣列)裡面選出可能重複的k個數。典型用法譬如:
r = randsample('acgt',48,true,[0.15
0.35
0.35
0.15])
上面的語句能夠產生48個內容為atcg的隨機字串,且a出現的權重為0.15,其餘類推。這個顯然在生物資訊學中很有用。atcg也就是dna的鹼基序列。
第五種情形,可以用自己提供的隨機數stream替換系統預設的隨機數,s必須派生自matlab的randstream類。
小結通過對比,我們很容易的發現randperm比randsample更直接更底層,而randsample則是對各種使用的情形進行了封裝。randsample最有用的優勢是可以很方便的實現隨機數的權重分布。
1.
fix() 結尾取整
2.round() 四捨五入
3.floor() 向下取整
4.ceil() 向上取整
Matlab函式備忘
1.利用matlab在矩陣裡找每一列的最小值時用min a 函式 利用matlab在矩陣裡找每一行的最小值時用min a,2 函式 2.矩陣裡兩個元素互換可以用 binminheap 1 3 binminheap 3 1 這種表達方式,即將矩陣的第三個元素和第乙個元 素互換成功 3.比較兩個數的較小...
matlab 基本數學函式(2)
函式 convhull 凸殼函式 cumprod 累計積 cumsum 累計和 cumtrapz 累計梯形數值積分 delaunay delaunay 三角化 dsearch 求最近點 這是兩個有趣的函式 factor 質數分解 inpolygon 搜尋多邊形內的點 max 最大元素 mean 平均...
matlab 的優化函式2 整理
1 繼續上一次的,補充2 個方面,乙個是二維的變數 乙個是遺漏的函式 2 二維函式,或者說多維函式,看中了乙個,如下 z 20 x.2 10 cos 2 pi x y.2 10 cos 2 pi y 分析 明顯的是非凸的 3 先上遺漏的函式。patternsearch 模式搜尋,不需要導數的相關資訊...