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