首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化以下代码的方法

简化以下代码的方法
EN

Stack Overflow用户
提问于 2014-04-27 05:30:35
回答 2查看 70关注 0票数 1

我有下面的代码,用Matlab编写,可以找到三台机组的组合MW : 1、2和3。逻辑如下:

合并单元1的总数,存储它。

合并单元2的总数,存储它。

合并单元3的总数,存储它。

合并单元1和单元2的总数,存储它。

将单元1、单元2和单元3的总数合并起来,存储它。

合并单元1和单元3的总数,存储它。

合并单元2和单元3的总数,存储它。

程序,我在做这件事,他没有:

代码语言:javascript
复制
%Max MW for each unit
maxMW = [200 60 50];

%Min MW for each unit
minMW = [50 15 15]


%Load Pattern in MW
              %1-2      3-4     5-6     7-8
loadPattern = [250      320     110     75]

%Full load production cost for each unit
productionCost = [15.4  16.0062 16.800  18.060  18.900]  

combination(1) = maxMW(1)
combination(2) = maxMW(2)
combination(3) = maxMW(3)
combination(4) = maxMW(1)+maxMW(2)
combination(5) = maxMW(1)+maxMW(2)+maxMW(3)
combination(6) = maxMW(2)+maxMW(3)
combination(7) = maxMW(1) + maxMW(3)

有没有办法简化组合(I)块?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-27 06:22:15

如果顺序不重要,则此代码:

代码语言:javascript
复制
M=[1 2 3];
S=0;
for i=1:length(M)
S=S+nchoosek(3,i);
end
combinations=sum((arrayfun(@str2num,num2str(dec2bin(1:S))).*repmat(M,S,1))');

给出如下内容:

代码语言:javascript
复制
combinations(1)=M(3)
combinations(2)=M(2)
combinations(3)=M(2)+M(3)
combinations(4)=M(1)
combinations(5)=M(1)+M(3)
combinations(6)=M(1)+M(2)
combinations(7)=M(1)+M(2)+M(3)
票数 2
EN

Stack Overflow用户

发布于 2014-04-27 06:53:19

你也可以试试-

代码语言:javascript
复制
combination(1:3) = maxMW(nchoosek(1:3,3));
combination([4 7 6]) = sum(maxMW(nchoosek(1:3,2)),2)'; %%//'
combination(5) = sum(maxMW(nchoosek(1:3,1)))

如果有人感兴趣的话,可以为更多的输入提供一个更一般的输入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23319777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档