2014-06-18 107 views
1

所以我有以下约束: enter image description here在MATLAB中计算总和的快速方法是什么?

如何在MATLAB中以有效的方式写这个?输入是x_mn,MN。这组B={1,...,N}和设定U={1,...,M}

我做了这样的(因为我写x作为follwoing矢量)

x=[x_11, x_12, ..., x_1N, X_21, x_22, ..., x_M1, X_M2, ..., x_MN]

%# first constraint 
function R1 = constraint_1(M, N) 

ee = eye(N); 
R1 = zeros(N, N*M); 
for m = 1:M 
    R1(:, (m-1)*N+1:m*N) = ee; 
end 

end 

%# second constraint 
function R2 = constraint_2(M, N) 

ee = ones(1, N); 
R2 = zeros(M, N*M); 
for m = 1:M 
    R2(m, (m-1)*N+1:m*N) = ee; 
end 

end 

通过上面的代码,我会得到一个矩阵A=[R1; R2]0-1,我将有A*x<=1

例如,M=N=2,我都会有这样的事情: enter image description here

而且,我将创建一个功能test(x)返回true或false根据x

我想获得一些帮助,并优化我的代码。

回答

2

您应该将您的x_mn值置于矩阵中。之后,你可以在每个维度中求和以得到你想要的。查看您的约束,您将这些值放置在M x N矩阵中,其中M是行数,N是列数。

你当然可以把自己的价值观的载体和构建你的总和在先前预期的方式,但你必须写for循环正确子集在每次迭代中,这是非常低效的正确元素。请使用矩阵,然后使用sum来合计所需的维度。

例如,假设你的价值的x_mn从1到20不等B是从1集合到5U是集合从14。因此:

X = vec2mat(1:20, 5) 

X = 

1  2  3  4  5 
6  7  8  9 10 
11 12 13 14 15 
16 17 18 19 20 

vec2mat将一个向量重新整形为矩阵。您可以指定要作为第二个元素的列数,并且它将创建适当的行数以确保构建正确的矩阵。在这种情况下,我需要5列,所以这应该创建一个4 x 5矩阵。为载体以及矩阵

first = sum(X,1) 

first = 

34 38 42 46 50 

sum作品:

第一个约束可以通过执行来实现。如果你有一个矩阵提供给sum,你可以指定第二个参数,告诉你你想要求和的方向。在这种情况下,指定1将对每列的所有行进行求和。它在维的第一个工作,这是行。

这是干什么的,它是在所有的U的值上对B集合中的所有可能值进行求和,这正是我们在这里所做的。你只是简单地总结每一列。

第二个条件可以通过执行来实现:

second = sum(X,2) 

second = 

15 
40 
65 
90 

我们在这里指定2作为第二个参数,使我们可以在总结所有列的每一行。第二维遍历。这是做什么的,它是在B的所有值上对所有可能的值集合U进行求和。基本上,你只是简单地总结每一行。

顺便说一句,你的代码没有达到你认为它实现的目标。你所做的只是将矩阵中的列组简单复制一次。您实际上没有按照约束进行任何求和。你在做什么是你只是确保这个矩阵将有你在你的帖子开头指定的条件是强制执行。这些是满足约束条件所需的理想矩阵。

现在,如果你想检查一下:第一条件或第二条件满足时,你可以这样做:

%// First condition satisfied? 
firstSatisfied = all(first <= 1); 

%// Second condition satisfied 
secondSatisfied = all(second <= 1); 

这将检查的firstsecond每个元素,看看导致款项后你做的上面的代码,我刚才展示的都是<= 1。如果他们都满足这个限制,我们将有true。否则,我们有false

请让我知道,如果你需要进一步的东西。

+0

谢谢。在我的代码中,在得到'R1'和'R2'后,我把它们放到一个矩阵A = [R1; R2]中,例如,我有两个向量'x1',它等于'x1 = [ 1 0 1 0]'和'x2'等于'x2 = [1 0 0 1]'。所以当我做'A * x1'时,我会得到'false',当我做'A * x2'时,我会得到'true'。 – npisinp

+0

这是一个错误。看到我的评论。 – npisinp

+1

没问题。我很高兴我的帮助。 – rayryeng

相关问题