1樓:匿名使用者
哈哈,我用的是"遞增進製數法"(方法源自網上)**如下:
%%%%%%%%%%%%以下計算出新的排列%%%%%%%%%%%%%%% author by wacs5
%% 排列的總個數為n!
%% 在指定位置插入**即可
%clc
%clear
n=3;
n_1=prod(1:n);
allorder_k=zeros(1,n-1);
ticfor allorder_m=1:n_1 %產生n!個排列
allorder_flag=zeros(1,n);
allorder_p=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_k(allorder_i);
allorder_j=n;
while(allorder_j>=position)if (allorder_flag(allorder_j)==1)position=position-1;
endallorder_j=allorder_j-1;
endallorder_p(position)=n+1-allorder_i;
allorder_flag(position)=1;
endfor allorder_i=1:nif (allorder_flag(allorder_i)==0)allorder_p(allorder_i)=1;
break;
endend
%%%%以下更新k
for allorder_i=1:n-1
allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);
if (allorder_k(n-allorder_i)~=0)break;
endend
%%%下面,可以引用allorder_p進行相關處理allorder_p
endtoc
matlab中全排列的問題 10
2樓:功誠蹉燕
perms
產生所有可能的排列語法p
=perms(v)p=
perms(v),這裡v是乙個長度為n的行向量,此函式產生v中這n個元素的全排列矩陣,每行為乙個排列。矩陣p包含有n!
3樓:真
clear;clc
n=4;
m=3;
x=nchoosek(1:n,m);
y=cell2mat(arrayfun(@(k)perms(x(k,:)),1:nchoosek(n,m),'uniformoutput',0)')
z=nchoosek(n,m)*prod(1:m)
matlab 全排列問題
4樓:匿名使用者
用笨辦法直接程式設計的 不知道有沒有現成的函式 你可以再查一下 陣列b就是你要求的結果
a=[1 2 3 4];
e=1;
for i=1:4
for j=1:4
for l=1:4
b(e)=a(i)*100+a(j)*10+a(l);
e=e+1;
endend
endb
matlab 排列組合問題 ,**等~
5樓:匿名使用者
這是最容易理解的方法了,雖然複雜點
a =[3 0 1 1 2 3 0;
4 3 6 3 1 6 6;
5 6 3 7 3 2 2];
b=for i1=1:3
for i2=1:3
for i3=1:3
for i4=1:3
for i5=1:3
for i6=1:3
for i7=1:3
b=[b;[a(i1,1) a(i2,2) a(i3,3) a(i4,4) a(i5,5) a(i6,6) a(i7,7)]];
endend
endend
endendend
6樓:匿名使用者
依照下面的方法,你可以實驗一下。
matlab做排列組合:比如要abcd的全排列,可以用perms函式
perms(['abcd'])執行結果
dcba
dcab
dbca
dbac
dabc
dacb
cdba
cdab
cbda
cbad
cabd
cadb
bcda
bcad
bdca
bdac
badc
bacd
acbd
acdb
abcd
abdc
adbc
adcb
以下是幾個常用的排列、組合與階乘等函式。
1、***bntns(x,m)
列舉出從n個元素中取出m個元素的組合。其中,x是含有n個元素的向量。
2、perms(x)
給出向量x的所有排列。
3、nchoosek(n,m)
從n各元素中取m個元素的所有組合數。 nchoosek(x,m)從向量x中取m個元素的組合
4、factorial(n)
求n的階乘。
5、prod(n:m) %求排列數:m*(m-1)*(m-2)*…*(n+1)*n prod(1:2:2n-1)或prod(2:2:2n) %
求(2n-1)!!或(2n)!!
6、cumprod(n:m)
輸出乙個向量[n n*(n+1) n(n+1)(n+2) … n(n+1)(n+2)…(m-1)m]
7、gamma(n)
求n!8、v='n!';
vpa(v)
更詳細資料如下:
nchoosek
binomial coefficient or all ***binations
syntax:
c = nchoosek(n,k)
函式描述: 從 n 個元素中 一次選 k 個元素的所有組合數 c(注意,c是乙個數值)。
c = n!/((n–k)! k!);
c = nchoosek(v,k)
函式描述: 從 向量 v 中 一次選其中 k 個元素 的所有組合 c (注意:c是乙個矩陣,列
數 為 k )
用matlab 解決m=[-1,-1......,1,1...]的全排列問題,其中1和-1等概率 10
7樓:匿名使用者
n=8;
n_1=prod(1:n);
allorder_k=zeros(1,n-1);
ticfor allorder_m=1:n_1 %產生n!個排列
allorder_flag=zeros(1,n);
allorder_p=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_k(allorder_i);
allorder_j=n;
while(allorder_j>=position)
if (allorder_flag(allorder_j)==1)
position=position-1;
endallorder_j=allorder_j-1;
endallorder_p(position)=n+1-allorder_i;
allorder_flag(position)=1;
endfor allorder_i=1:n
if (allorder_flag(allorder_i)==0)
allorder_p(allorder_i)=1;
break;
endend
%%%%以下更新k
for allorder_i=1:n-1
allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);
if (allorder_k(n-allorder_i)~=0)
break;
endend
%%%下面,可以引用allorder_p進行相關處理,你的原始陣列為data,你可以用data進行引用
%%如果輸出的話,比較耗時間,如果不輸出的話,10!大約是30秒左右
allorder_p;
endtoc
matlab排列組合問題
8樓:匿名使用者
1、資料都是[n1 n2]這種形式?比如n=10,對應的就是[101 102]?
2、最後這句話【從這些數列中選取4個然後從選取的4個數列中任選乙個列出所有的排列組合】不明確,詳細說明一下。
matlab全排列 急!!
9樓:匿名使用者
你的這個是2行11列,要全排列方式為;首先要定義這個矩陣才行。
perms(a(1,:))和perms(a(2,:)),舉個例子吧:
a=[1 2 3;4 5 6]
a =1 2 3
4 5 6
>> perms(a(1,:))
ans =
3 2 1
3 1 2
2 3 1
2 1 3
1 2 3
1 3 2
>> perms(a(2,:))
ans =
6 5 4
6 4 5
5 6 4
5 4 6
4 5 6
4 6 5
我相信你明白了,呵呵。
10樓:廖鮮于白霜
function strc=funstr2(str1,str2)clc,
%檢驗引數是否是字串
ls1=length(str1);
for i=1:ls1
if ~ischar(str1(i))
error('input must be string');
endend
ls2=length(str2);
for i=1:ls2
if ~ischar(str2(i))
error('input must be string');
endend
slen=ls1+ls2;
a=nchoosek(1:slen,ls1);
[m,n]=size(a);
a1=zeros(m,slen);
for i=1:m
for j=1:n
a1(i,a(i,j))=1;
endend
strc=cell(m,1);
for ir=1:m
ic=1;
i1=0;
i2=0;
output=;
while ic<=slen;
if(i1<=ls1)&(a1(ir,ic)==1);
i1=i1+1;
output(ic)=str1(i1);
else if (i2<=ls2)&(a1(ir,ic)==0)i2=i2+1;
output(ic)=str2(i2);
endendic=ic+1;
endstrc=char(output);end
在matlab中、如何進行全排列
11樓:匿名使用者
a=perms([1 2 3 4 5 0 0]);
a1=find(a(:,1)==0);a2=find(a(:,7)==0);
aa=union(a1,a2);
a(aa,:)=;
da=diff(a,1,2);
[i,j]=find(da==0);
a(i,:)=;
關於matlab畫雙曲線的問題,關於matlab的問題,畫三個曲線
y5 到 y8 都有問題 比如y5吧,你的x是x 8 0.1 16 我們把 8帶入 y5 sqrt 負數 這個時候y5就是乙個複數啦,在圖上面表現出來就是零點那裡,其他的幾個是一樣的問題 你可以把這裡x改一下,不要從 8開始 從 7 3 0.5 x 0 開始 懂了沒?關於matlab的問題,畫三個曲...
matlab裡,特定位置的排列組合問題
這個問題可以這樣解決,增加乙個meshgrid 函式,即 x linspace 0,3,6 y linspace 0,3,6 x,y meshgrid x,y z 4 x 1 2 y 1 2 執行結果 1 資料都是 n1 n2 這種形式?比如n 10,對應的就是 101102 2 最後這句話 從這些...
排列組合問題,排列組合的問題
這麼理解把三男先綁在一起把三女也綁在一起這樣,就有2種組合然後三男,有p33排列方式即 3 2 1 6種三女也是一樣所以,最後答案為 2 6 6 72種 小豬儲錢罐有相同的100個5角硬幣,相同的80個1元硬幣,從中選出8個硬幣有9種方式 8個1元硬幣,1個5角7個1元,2個5角6個1元3個5角5個...