2013-04-23 21 views
-1

我有一個基於以下函數的問題。如果條件爲false,如何返回NaN或空矩陣。如何在條件爲假的情況下返回NaN或空矩陣

下面的函數實際檢查Anchor ID和Source ID是否存在,如果存在這樣的組合,它會在循環內部進一步檢查Anchor Channel和Source Channel是否存在(如果存在),那麼它將計算「y」上。但是如果Anchor Channel和Source Channel不存在這種情況呢?還要考慮Anchor ID和源ID不存在的情況!如果它不存在,那麼我希望它返回到NaN或者只是零。

如何修改此功能符合我的要求?

function [rssi_dBm1]= sampletrue(BlinkSetList,AnchorID,SourceID) 

for i=1:length(BlinkSetList) 
    S=cell2mat(BlinkSetList(i));         
    for j=1:length(S) 
     if S(j).AnchorID==AnchorID && S(j).SourceID==SourceID  
      if S(j).AnchorChan==0 && S(j).SourceChan==0    
       y=S(j).agc;            
       rssi_dB1(i)= -(33+y*(89-33)/(29-1)); 
      else 
       rssi_dB1(i)=NaN;    
      end 
     end 
    end 
end 

rssi_dB1(rssi_dB1==0)=[]; 
rssi_dBm1=sum(rssi_dB1(:))/length(rssi_dB1); 
disp([sprintf('The rssi value with A-Chan 0 and S-Chan 0 is %0.0f',rssi_dBm1)]); 

注意:這只是條件的一部分,錨點通道和源通道還有三個組合需要評估。

如果問題仍然不清楚,請發表您的疑問,我會盡力更準確地解釋它。

非常感謝您的幫助。提前致謝。

+0

什麼是函數聲明行('function ...'語句)? – Shai 2013-04-23 09:44:19

+0

@Shai看看編輯過的版本。現在有意義 – 2013-04-23 09:58:00

回答

3

返回楠

function ret = retNan(value) 
if value == true 
    ret = 1; 
else 
    ret = NaN; % set returned value to Nan 
end 

返回一個空矩陣

function ret = retEmpty(value) 
if value == true 
    ret = 1; 
else 
    ret = []; % set returned value to an empty matrix 
end 

編輯功能的函數的一個例子:
底線,可變ret的任何的值(或在case,rssi_dBm1)在函數的結尾 - 返回此值。因此,如果ret爲空或NaN該函數只返回空值/ NaN值。
您可以在函數的開頭將rssi_dBm1設置爲空矩陣,並且只在條件滿足時才更改它。在這種情況下,如果所有條件都失敗,函數將返回默認值 - 一個空矩陣。

PS,
1.最好是not to use i and j as variable names in Matlab
2.您可以使用mean而不是sum()/length()
3.代替disp(sprintf(...))你可以使用fprintf(1, ...)

+2

不是它影響答案,但肯定只是'如果價值'?爲什麼'== true'? – Dan 2013-04-23 09:51:28

+0

@丹 - 我想明確「價值」的含義。它僅用於演示。 – Shai 2013-04-23 09:54:30

+0

@Shai我現在編輯了代碼。那麼它現在如何工作? – 2013-04-23 10:11:14

相關問題