如何在MATLAB中正确执行if语句

时间:2017-12-03 20:47:51

标签: matlab

我遇到以下代码的问题。如果条件为真,我希望代码执行第一个语句。但是,无论条件如何,它似乎只执行第二个语句。如果delta <0.9843&#39;不正确的?

encode_entities

1 个答案:

答案 0 :(得分:3)

实际上,您正在混合矢量化(矩阵方式执行的操作)和非矢量化方法(一次对单个值执行的操作)。在您当前的配置中,如果您测试delta < 0.9843,这将是您将获得的:

ans =

  1×12 logical array

   1   1   1   0   0   0   0   0   0   0   0   0

logical数组1,其值小于阈值,否则为0。因此,if条件将在数组上执行,而不是在boolean变量上执行,从而产生不太重要的结果。

您尝试执行的计算可以按矢量化方式完成,如下所示:

D = 22.441;
W = 9.843;
P = 65.27;

delta = [0, 0.4, 0.8, 1.2, 1.6, 2, 2.4, 2.8, 3.2, 3.6, 4,4.4];
delta_min = delta < 0.9843;

delta_min_vals = delta(delta_min);
delta(delta_min) = ((P+0.08*P)*W*(W*D).^0.5)*(0.96*(delta_min_vals/W)+(0.216/0.03)*(delta_min_vals/W).^2);

delta_oth_vals = delta(~delta_min);
delta(~delta_min) = ((P+0.08*P)*W*(W*D).^0.5*(2.4*((delta_oth_vals/W)-0.03)));

% delta now represents the zdelta you were looking for

如果你想使用非矢量化计算执行相同的操作(我不鼓励你因为Matlab在使用矢量化计算时具有更好的性能),例如在for-loop内,请使用以下代码:

D = 22.441;
W = 9.843;
P = 65.27;

delta = [0,0.4, 0.8, 1.2, 1.6, 2, 2.4, 2.8, 3.2, 3.6, 4,4.4];
delta_size = size(delta);

zdelta = NaN(delta_size);

for i = 1:delta_size(2)
    delta_curr = delta(i);

    if (delta_curr < 0.9843)
        zdelta_curr = ((P+0.08*P)*W*(W*D)^0.5)*(0.96*(delta_curr/W)+(0.216/0.03)*(delta_curr/W)^2);
    else
        zdelta_curr = ((P+0.08*P)*W*(W*D)^0.5*(2.4*((delta_curr/W)-0.03)));
    end

    zdelta(i) = zdelta_curr;

    disp(zdelta_curr);
end