1

我有一个矩阵,其中每一行数字代表一个人的值.... =

 98   206    35   114
 60   206    28    52
100   210    31   116
 69   217    26    35
 88   213    42   100

(我在这里的数字并不是我真正拥有的数字)我想将数组person1 = [93 208 34 107] 与person的每一行进行比较。我找出哪个数组比另一个数组大,然后将较小的数组除以较大的数组。如果商大于或等于 0.85,则存在匹配,并且该人的姓名将打印到屏幕上。我应该像下面这样使用循环和几个 if/else 语句吗?我确信有更好的方法来做到这一点。

for z = 1:5
    if z == 1
        a = max(person(z,:),person1);
        b = min(person(z,:),person1);
        percent_error = b/a;
        if percent_error >= 0.85
            title('Match,its Cameron!','Position',[50,20,9],'FontSize',12);
        end
    elseif z ==2
        a = max(person(z,:),person1);
        b = min(person(z,:),person1);
        percent_error = b/a;
        if percent_error >= 0.85
            title('Match,its David!','Position',[50,20,9],'FontSize',12);
        end
    elseif z == 3
        a = max(person(z,:),person1);
        b = min(person(z,:),person1);
        percent_error = b/a;
        if percent_error >= 0.85
            title('Match,its Mike!','Position',[50,20,9],'FontSize',12);
        end
        .
        .
        .
        so on...
    end
end
4

2 回答 2

4

对于初学者,您可以通过将所有名称存储在一个单元格中来摆脱所有 if 语句。

allNames = {'Cameron'; 'David'; 'Mike'; 'Bill'; 'Joe'};

以下是您如何在循环中获取它们:

person = [98   206    35   114;
          60   206    28    52;
         100   210    31   116;
          69   217    26    35;
          88   213    42   100];

person1 = [93 208 34 107];

allNames = {'Cameron'; 'David'; 'Mike'; 'Bill'; 'Joe'};

for z = 1:5
    a = max(person(z,:),person1);
    b = min(person(z,:),person1);
    percent_error = b/a;
    if percent_error >= 0.85
        %title(['Match, its ', allNames{z} ,'!'],...
        %    'Position',[50,20,9],'FontSize',12);
        disp(['Match, its ', allNames{z} ,'!'])
    end
end

运行代码会显示:

Match, its Cameron!
Match, its David!
Match, its Mike!
Match, its Joe!
于 2012-12-11T08:20:05.400 回答
0

根据你写的,我的印象是你实际上想要这个比例

a=person(i,:)
b=person1  % i=1..5
a/b

接近一个匹配。(因为 a/b>=0.85 如果 a/b<=1 和 b/a>=0.85 如果 b/a<=1 即 0.85<=a/b<=1/0.85)

你可以这样计算:

ratio = person/person1;
idx = 1:5;
idx_found = idx(ratio>=0.85 & ratio<1/0.85);

for z=idx_found
    disp(['Match, its ', allNames{z} ,'!'])
end
于 2012-12-11T11:50:01.940 回答