0

我发布了一个关于比较数组的问题。我得到了帮助,它是这样的:

allNames = {'Cameron'; 'David'; 'Mike'; 'Bill'; 'Joe'};
%Here is how you then would get hold of them in a loop:

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!

现在我想做一个错误检查,因此如果将打印多个名称,则第二列将亲自打印,而person1将通过将它们彼此相除来进行比较。如果商至少为 0.98,则打印该名称且仅打印该名称。这是我尝试过的,错误检查未被识别。

person1(count,:)=[pace height build stride]
allNames = {'Kassie'; 'Keyton'; 'Cameron'; 'Joseph'; 'Josh'};
for z = 1:5
    a = max(person(z,:),person1);
    b = min(person(z,:),person1);
    percent_error = b/a;
    error_count = 0;
    if percent_error >= 0.85
        %title(['Match, its ', allNames{z} ,'!'],...
        %    'Position',[50,20,9],'FontSize',12);
        disp(['Match, its ', allNames{z} ,'!'])
        error_count = error_count+1;
        if error_count >= 2
           ah=max(person(:,2),person1(1,2));
           bh=min(person(:,2),person1(1,2));
           height_check=b/a;
           if height_check >= 0.98
               disp(['Match, its ', allNames{z} ,'!'])
               break
           end
       end
    elseif percent_error < 0.85
        disp('Person is unknown!')
    end
end

结果如下:

person1 =

    75   168     6    69

Person is unknown!
Match, its Keyton!
Person is unknown!
Match, its Joseph!
Person is unknown!
>> person

person =

    38   163    36    38
    70   162    35    73
    47   166    39    28
    70   163    39    62
    27   176    32    27

所有person1都应该是“人员未知!” 因为 Keyton 和 Joesph 在第二列中的值都小于 0.98。

4

2 回答 2

4

你真的想做a/b吗?这就是未定方程组的最小二乘解a*X = b。有关这方面的更多详细信息,请参见mrdividemldivide

难道你不想max(a./b)计算相应元素的比率,ab取其中的最大值。(错误检查中的相同内容)

顺便说一句,您的错误检查没有运行,因为您error_count在第一个循环开始时重置。把它移出那个循环,这也是固定的。

于 2012-12-13T19:50:36.153 回答
1

让我们关注这几行:

a = max(person(z,:),person1);
b = min(person(z,:),person1);
percent_error = b/a;
if percent_error >= 0.85

a将以数组的形式返回两个值中较高的值。b会做同样的事情,但更低。因此,你有这样的事情:

a=[98 208 35 114];b=[93 206 34 107];

您要做的下一步是除法。然而,这实际上是一个矩阵划分。在这种情况下,percent_error=0.97408但我不确定您为什么要进行最小二乘感知划分,正如 Guther 指出的那样。您似乎更有可能想要做类似的事情mean(a./b),以平均化这些值。\

我看到的其他一些事情:

  • height_check=b/a;似乎它应该与bh./ah
  • 我真的不确定你的整体比较方法。似乎您最好将每个值与可能值的范围进行比较,而不是进行除法运算。

我不确定您到底要做什么,但我认为您想做更多类似的事情,还需要对您的假设进行一些工作:

person1(count,:)=[pace height build stride]
allNames = {'Kassie'; 'Keyton'; 'Cameron'; 'Joseph'; 'Josh'};
for z = 1:5
    a = max(person(z,:),person1);
    b = min(person(z,:),person1);
    percent_error = mean(b./a);
    error_count = 0;
    if percent_error >= 0.85
        %title(['Match, its ', allNames{z} ,'!'],...
        %    'Position',[50,20,9],'FontSize',12);
        disp(['Match, its ', allNames{z} ,'!'])
        error_count = error_count+1;
        if error_count >= 2
           ah=max(person(:,2),person1(1,2));
           bh=min(person(:,2),person1(1,2));
           height_check=bh./ah;
           if height_check >= 0.98
               disp(['Match, its ', allNames{z} ,'!'])
               break
           end
       end
    elseif percent_error < 0.85
        disp('Person is unknown!')
    end
end
于 2012-12-13T19:52:05.010 回答