matlab 什么是“If-in”的Mat-lab函数?

nnt7mjpx  于 2022-12-29  发布在  Matlab
关注(0)|答案(1)|浏览(138)

问题陈述:提供执行以下操作的函数:c1)两个向量D1和D2各自具有7个元素,然后形成每个向量的对应分量之间的除法,并将结果分配给向量名称D3,放置避免被零除的语句(即,如果分母的元素为空则不除);
该问题的思想是每当向量D2的元素之一等于0时设置错误消息。
我的尝试:

D1 = [d1 d2 d3 d4 d5 d6 d7]
D2= [d21 d22 d23 d24 d25 d26 d27]
for i= 1:length(D1)
if 0 in D2
fprintf(‘error: division by 0/n’)
else
D3=D1./D2 
end

我不知道Matlab中是否存在"if-in"结构,如果不存在,那么等价的是什么呢?
提前感谢!!!

tag5nh1u

tag5nh1u1#

避免被零除的一种方法是修改D2,将任何0替换为nan。除以nan会产生nan,因此只需检查结果向量D3,就很容易判断哪种除法会导致问题。此外,几乎所有Matlab的函数都能够很好地处理nan(即,没有崩溃),或者可以通过设置某个选项来指示它们这样做。
我刚才描述的内容可以通过使用逻辑索引来完成,如下所示:

% Definition of D1 and D2
D1 = [d1 d2 d3 d4 d5 d6 d7]
D2 = [d21 d22 d23 d24 d25 d26 d27]

% Replace 0s with NaNs
D2(D2==0) = nan;

% Perform the divisions at once
D3 = D1./D2 ;

有关逻辑索引的更多详细信息,请参阅相关章节here
当OP请求一个函数来完成这项工作时,下面是一个可能的实现:

function D3 = vector_divide(D1, D2)
   % Verify that vectors are numeric
   % and have the same dimensions
   if isnumeric(D1) & isnumeric(D2) &...
      (size(D1,1) == size(D2,1)) &...
      (size(D1,2) == size(D2,2))

      % replace 0s with NaNs
      D2(D2==0) = nan;

      % Perform the divisions at once
      D3 = D1./D2 ;
   else
      disp('D1 and D2 should both be numeric and have the same size!');
      D3 = [];
end

非数值数组或大小不匹配时的错误处理可能会根据项目需求而有所不同。例如,我可以使用error(而不是disp)来显示消息并终止程序。

相关问题