我有一个矩阵,每行数字代表一个人的价值.... 人 =
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]与人的每一行进行比较。我发现哪个数组比另一个更大,然后我将较小的数除以较大的数组。如果商大于或等于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
答案 0 :(得分: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!
答案 1 :(得分:0)
根据你所写的,我的印象是你实际上想要比率
a=person(i,:)
b=person1 % i=1..5
a/b
接近一场比赛。 (如果a / b&lt; = 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