如何编写程序实现排列组合合问题的MATLAB程序一般式,n 和 m是待附值的

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
数学建模中常用的30个matlab程序和函数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数学建模中常用的30个matlab程序和函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口9被浏览1,455分享邀请回答function results = binGenerator(n)
% BINGENERATOR output all the possible permutations of n digits
% consisted of 0 and 1.
results = repmat('0', 2^n, n); %初始化结果矩阵,每一行(代表一种可能情况)为n个零
for i = 0:n
iCns = nchoosek(1:n, i); %nchoosek 从n个元素中无顺序选出k个,穷尽所有可能情况
for j = 1:size(iCns, 1)
results(idx, iCns(j, :)) = '1';
idx = idx + 1;
&& binGenerator(4)
------------------------------------------------------------------------------------------------------------------------------------------「但我真正想说的还是换个角度思考问题]个位置,每个位置插入,最后每一种结果都和一个二进制数唯一对应(再显然不过了),比如排列结果若为(假设),其对应的二进制数就是,所以我们只需要将转码为二进制形式就能得到结果:&& dec2bin(0:(2^4-1), 4)
% dec2bin可以将十进制数转为二进制字符串,还能定制输出长度
简单一行就能输出第一种方案的结果,而且还很好理解,对于位的操作,只需将替换为即可。102 条评论分享收藏感谢收起abs(dec2bin(0:(2^n-1), n))-48 % 其中n为长度
&& C = abs(dec2bin(0:(2^4-1), 4))-48, whos
Attributes
在此基础上我也做了相应的拓展:如果你想用0,1,...,a-1,进行排列组合,并且其长度为n,为了方便描述,以0,1,2 进行排列组合,其长度为4:首先:确定转化的进制数,进制数为a = 3;其次:确定长度在a进制数下的最大值,并将其转换成10进制,进制为3长度为4的最大值为2222,其相应10进制数为80再次:生成在10进制数下0到最大值间隔为1的数组,0,1,2,...,80;然后:将生成的10进制数组转换成a进制数的数;最后:将其转换成ASCII码并减去48,就可以获得想要的排列组合了。优点:长度n在a进制数下的最大值可以确定将要进行组合的个数,避免了不会用排列组合数的公式进行计算组合的个数。 说明:1. 本方法仅用于a & n ;
2. 最后一步-48主要是为了将ASCII码转换成对应的数字值。 abs(dec2base(0:base2dec(repmat(num2str(a-1),1,n),a), a,n))-48
% 0,1 进行排列组合,其长度为4:
&& a = 2;n = 4;
&& C = abs(dec2base(0:base2dec(repmat(num2str(a-1),1,n),a), a,n))-48,whos
Attributes
21 条评论分享收藏感谢收起写回答排列组合问题在MATLAB中的实现方法大全_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
排列组合问题在MATLAB中的实现方法大全
&&排列组合问题在MATLAB中的实现方法大全
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢只需一步,快速开始
扫一扫,访问微社区
查看: 6051|回复: 10|关注: 0
matlab中排列组合问题,求指教
<h1 style="color:# 麦片财富积分
新手, 积分 12, 距离下一级还需 38 积分
关注者: 1
小弟不才,希望能从1:10中随机选取6个数组合,挑选出满足一定条件的组合,如下示例:
function C=li1_1
A=combntns(1:11,6);& & %表示创建从1到11中随机选取6个数的全部组合
B=randperm(16,1)
H=size(A,1);
for&&k=1:H;
C{k}=A(k,:);
D{k}=mean(C{k});& && &&&不知道这里的均值是对某一个C{k}中的元素求均值,还是对所有的C{k}求均值啊?
E{k}=(5-C{k}).^2;
F{k}=sum(E{k});
a=input('下限');
b=input('上限');
c=input('下限2');
d=input('上限2');
if a&D{k}&b & c&F{k}&d
G{k}=disp('无有效组合')
小弟本意是把满足条件的组合选出来,但是红色标示部分代码错误,返回的结果仍然是所有的组合而不是满足条件的组合,不知道怎么办?求指教(代码写的太冗余,见谅)
论坛优秀回答者
帖子最佳答案
关注者: 266
if a&D{k} && D{k}&b && c&F{k} && F{k}&d
<h1 style="color:# 麦片财富积分
关注者: 1
B=randperm(16,1):没这种用法;
RANDPERM Random permutation.
& & RANDPERM(n) is a random permutation of the integers from 1 to n.
& & For example, RANDPERM(6) might be [2 4 5 6 1 3].
& & Note that RANDPERM calls RAND and therefore changes RAND's state.
论坛优秀回答者
帖子最佳答案
关注者: 266
tzjlcs217 发表于
B=randperm(16,1):没这种用法;
RANDPERM Random permutation.
p = randperm(n,k) returns a row vector containing k unique integers selected randomly from 1 to n inclusive.
<h1 style="color:# 麦片财富积分
关注者: 1
honglei.chen 发表于
p = randperm(n,k) returns a row vector containing k unique integers selected randomly from 1 to n&&...
其实是可以的,不过就是冗余了些
<h1 style="color:# 麦片财富积分
关注者: 1
honglei.chen 发表于
即使改成版主这样,运行返回的结果仍然是全部组合,而不是满足特定条件的组合啊
论坛优秀回答者
帖子最佳答案
关注者: 266
敲石问路 发表于
即使改成版主这样,运行返回的结果仍然是全部组合,而不是满足特定条件的组合啊 ...
那就单步跟踪一下吧
<h1 style="color:# 麦片财富积分
关注者: 1
本帖最后由 tzjlcs217 于
12:04 编辑
最后一个if只执行了一次,没有循环;改为以下的
A=combntns(1:11,6);& & %表示创建从1到11中随机选取6个数的全部组合
H=size(A,1);
for&&k=1:H;
C{k}=A(k,:);
D{k}=mean(C{k});& && &&&
E{k}=(5-C{k}).^2;
F{k}=sum(E{k});
a=input('下限');
b=input('上限');
c=input('下限2');
d=input('上限2');
for&&k=1:H;
if a&D{k}&&D{k}&b && c&F{k}&&F{k}&d
C{k}='无有效组合';
<h1 style="color:# 麦片财富积分
关注者: 1
tzjlcs217 发表于
最后一个if只执行了一次,没有循环;改为以下的
A=combntns(1:11,6);& & %表示创建从1到11中随机选取6个数 ...
a=combntns(1:4,3);
b{k}=a(k,:)
c{k}=sum(b{k});
d=input('下限')
e=input('上限')
for k=1:4;
if d&c{k}&e
disp('无有效组合')
大哥这是我简化的一个小例子,按照您所说的,可是返回的结果仍然是全部组合啊,不信,您试试
<h1 style="color:# 麦片财富积分
关注者: 1
disp('无有效组合')
b{K}='无有效组合'
站长推荐 /3
车辆动力学工具箱介绍:一款集成3D虚拟环境的汽车仿真产品
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区1,排列的公式:
A(m,n) m在上,n在下,
A(m,n)=n!/(n-m)!
组合的公式:
C(m,n) m在上,n在下,
C(m,n)=n!/m!(n-m)!
A(m,n)=C(m,n)*m!中,m!怎么算?n!呢?
!是阶乘的符号
n!中n必须是自然数
n!=1*2*3*...*(n-1)*n
注意:0!=1
其他答案(共4个回答)
乘积的表达符号,
m!=1×2×3×...×(m-1)×m
n!=1×2×3×...×(n-1)×n
也就是说A(m,n)=n!(n-m)!=n×(n-1)×(n-2)×...×(n-m+2)×(n-m+1)
答: 户主是一家的主人(户囗本上有写),而房主是房子的主人(拥有房产证的人)
比如说,你结婚后,你和你妻子是一个户口本,上面写有你为户主,而你们买房子的时候,登...
答: 那是肯定没有问题的啊,拓维教育跟长郡中学网站合作,这对你孩子进名校提供了一个门槛哦
答: 2)英国的科学教育:在英国“全国学校课程”中,科学和数学并列为三大核心课程,所有5—16岁的儿童都必须接受法定的科学教育
答: 在这里你可以找到.
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415}

我要回帖

更多关于 java排列组合m取n 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信