2014-03-14 2 views
2
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 루프 '에서 구문 분석 오류 및 구문 분석 오류가 elseif 말할 오류가 있습니다.Matlab IF 및 ELSEIF 루프

+0

센서 1> 고해상도 + sensor2'과'센서 2> 고해상도 + sensor3''말한다면 어떻게해야하는지? 이 사건을 생각해 봤어? – Dan

+0

그렇다면 두 조건을 모두 고려하여 값을 제외해야합니다. 나는 그것들 중 어느 하나보다 더 큰 경우 그것을 제외시키고 싶다. 하지만 고마워. – user3419155

답변

2

당신은 if과 같은 라인에 귀하의 조건이 있어야합니다. 그리고 조건 뒤에는 세미콜론 : 당신이 스칼라을 취급하고 있기 때문에

. 
. 
. 
if sensor1 > res+sensor2 || sensor1> res+sensor3 
    value1 = ((sensor2+sensor3)/2); 

elseif sensor2 > res+sensor1 || sensor2> res+sensor3 
    value1 = ((sensor1+sensor3)/2); 
. 
. 
. 

BTW이 경우 ||를 사용해서는 안된다.

+0

그게 효과. 감사 – user3419155

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