畢設(shè)ing, 最近每天除了看論文就是matlab仿真。
MATLAB編程強(qiáng)調(diào)"vectorization''侠坎,對(duì)矩陣進(jìn)行操作(畢竟人家名字就叫Mat Lab本涕,矩陣的實(shí)驗(yàn)室)
對(duì)于排列組合問(wèn)題舶吗,按照C語(yǔ)言的思路肯定就用for循環(huán)赃份。但是在matlab里,for循環(huán)是不吃香的铜秆。一個(gè)一個(gè)for循環(huán)嵌套淹真,又沒(méi)有括號(hào)...看著挺暈的 。更簡(jiǎn)便连茧、效率更高的方法就是 using vector operations instead of loops核蘸。詳見(jiàn): Improving the Speed of MATLAB Calculations
下面是幾個(gè)我自己用到的有關(guān)排列組合的函數(shù),啊真的很簡(jiǎn)單啸驯。
向量x中重復(fù)選取y個(gè)元素
我在百度上找的然后改了一下客扎,可以重復(fù)選取元素(也就是包括111,222這種)罚斗。缺點(diǎn)是輸入只能是向量徙鱼,不能輸入矩陣
function Y = perm_comb(x,y)
[Y{y:-1:1}] = ndgrid(x);
Y = reshape(cat(y+1,Y{:}),[],y);
二維坐標(biāo)下選取n個(gè)坐標(biāo)點(diǎn)
x,y是X,Y軸最大值,NP表示要選幾個(gè)點(diǎn),函數(shù)輸出所有坐標(biāo)點(diǎn)
function co = Choosecoord(x,y,NP)
[a b] = meshgrid(1:x,1:y);
co = [reshape(x,NP,1) reshape(y,NP,1)];
meshgrid函數(shù)是用來(lái)生成坐標(biāo)網(wǎng)格點(diǎn)矩陣的,輸出兩個(gè)矩陣,一個(gè)是所有點(diǎn)的x坐標(biāo)袱吆,另一個(gè)是所有點(diǎn)的y坐標(biāo)厌衙。這個(gè)坐標(biāo)系上所有點(diǎn)就用這倆矩陣?yán)锏乃性乇硎?比如第一行第一列的坐標(biāo)就是(a(1,1), b(1,1)), 第二行第一列(a(1,2), b(1,2))...)
還有就是nchoosek(a,b): a可以是向量也可以是一個(gè)數(shù)字。向量的話绞绒,輸出b列的矩陣婶希,表示從a向量里選b個(gè)元素的所有可能組合;a是數(shù)字的話蓬衡,輸出C(a,b)的計(jì)算結(jié)果饲趋。