基于矩阵条件的Matlab决策输出

时间:2017-05-24 10:19:57

标签: matlab if-statement matrix

所以我有这个矩阵

A=
7

B=
0.34   0.34   0.34
0.50   0.25   0.25

和这个矩阵

C=
1
1
4
2
3
6
3

遵守这条规则:

  • 如果C = 1则输出=总和(A *(B第一行))
  • 如果C = 2则输出=总和(A *(B第2行))
  • 如果C不是1或2,则输出= C值

或一般情况下:

  • 如果第C行存在于B中则输出=总和(A *(B的第C行))
  • 否则输出= C值

所以输出应该是这样的:

output=
7.14
7.14
4
7
3
6
3

我尝试使用此代码,但它不起作用

sizeA=size(A,1)
sizeB=size(B,1)
for i=1:sizeB
    if (B(i)<=sizeA)
        Output=sum(repmat(A,1,length(C))'.*B(C,:),2)
    else 
        Output=C(i)
    end
end

2 个答案:

答案 0 :(得分:0)

正确的代码是:

sizeA=size(A,1);
sizeB=size(B,1);
sizeC=size(C,1);
Output = zeros(size(C)); % preallocate memory for efficiency
for i=1:sizeC
    if C(i)<=sizeB
        Output(i)=sum(A * B(C(i), :));
    else 
        Output(i)=C(i);
    end
end

您还可以通过以下方式避免使用for循环:

% make B of the same size as C
B_ = zeros(size(C)); 
B_(1:size(B, 1)) = sum(B, 2);
% calculate the output
output = C .* (C > size(B, 1)) + A .* B_(C)

请尝试理解代码,不要只使用它。

答案 1 :(得分:0)

我简化了一点。它有效。

for i=1:length(C)
num=C(i);
switch num
case 1
output(i)=sum(A*B(1,:))
case 2
output(i)=sum(A*B(2,:))
otherwise
output(i)=C(i);
end
end

output =

  Columns 1 through 5

    7.1400    7.1400    4.0000    7.0000    3.0000

  Columns 6 through 7

    6.0000    3.0000