function final = fcn(sensor1, sensor2, sensor3)
% resolution = res
res = 10;
% value1 = ((sensor1+sensor2+sensor3)/3);
% | is used for 'or' command
if
sensor1 > res+sensor2 | sensor1> res+sensor3;
value1 = ((sensor2+sensor3)/2);
elseif
sensor2 > res+sensor1 | sensor2> res+sensor3;
value1 = ((sensor1+sensor3)/2);
elseif
sensor3 > res+sensor1 | sensor3> res+sensor2;
value1 = ((sensor1+sensor2)/2);
else
value1 = ((sensor1+sensor2+sensor3)/3);
end
final = value1;
我希望它根据平均值显示最终值。如果任何单个值大于其他两个值中的任何一个(在这种情况下为分辨率),那么它应该忽略该数字并仅使用其他两个的平均值。在matlab上,我的IF和ELSEIF循环有一个错误,表示'解析错误,并在其他地方解析错误。
答案 0 :(得分:2)
你应该让if
和你的条件在同一条线上。条件之后没有半结肠:
.
.
.
if sensor1 > res+sensor2 || sensor1> res+sensor3
value1 = ((sensor2+sensor3)/2);
elseif sensor2 > res+sensor1 || sensor2> res+sensor3
value1 = ((sensor1+sensor3)/2);
.
.
.
顺便说一句,在这种情况下你应该使用||
,因为你正在处理标量。
答案 1 :(得分:0)
你可以用一些矢量化的方法去掉几乎所有的条件语句。此外,如果您有许多传感器作为具有相同条件的输入,它将自动缩放。
<强>代码强>
function value = fcn(sensor1, sensor2, sensor3)
res = 10;
sensor = [sensor1;sensor2;sensor3];
ind_first_cond_met = find(any(bsxfun(@gt,sensor,(res+sensor)'),2),1,'first');
if isempty(ind_first_cond_met)
value = mean(sensor);
else
sum_mat = bsxfun(@plus,sensor,sensor');
mean_every_other_two = [sum_mat(1,2) sum_mat(2,3) sum_mat(3,1)]./2;
value = mean_every_other_two(ind_first_cond_met);
end