如果条件为假,如何返回NaN或空矩阵

时间:2013-04-23 09:42:45

标签: matlab

我有一个基于以下功能的问题。如果条件为假,如何返回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)]);

注意:这只是条件的一部分,还有三种组合可供锚定通道和源通道进行评估。

如果你的疑问仍然不清楚,我会尝试更准确地解释它。

非常感谢您的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:3)

返回Nan

的函数示例
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(或在您的情况下,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, ... )