Matlab没有解决if语句

时间:2016-03-07 00:31:51

标签: arrays matlab if-statement

我在迭代几个if语句时遇到了一些麻烦,超过八次。代码似乎适用于前几次比较,执行算术并返回/保存输出行'export_data'。但是,之后,它只返回else条件和响应。评估的变量每个有1500行。我已经添加了下面的代码和两张显示输出的照片。任何见解将非常感激。

function [export_data] = WS_Zones(Forecast_WS, Observed_WS)
if (Forecast_WS > Observed_WS)
    WS_Zone_1 = Observed_WS.*1.24;
    WS_Zone_2 = Observed_WS.*1.28;
elseif (Forecast_WS < Observed_WS)
    WS_Zone_1 = Observed_WS.*0.76;
    WS_Zone_2 = Observed_WS.*0.72;
else
   WS_Zone_1 = Observed_WS;
   WS_Zone_2 = Observed_WS;
end
export_data=[Forecast_WS Observed_WS WS_Zone_1 WS_Zone_2];
filename = 'testdata.xlsx';
sheet = 1;
xlRange = 'A1';
xlswrite(filename,export_data,sheet,xlRange) 
end

1 个答案:

答案 0 :(得分:2)

本声明:

if [1 2 3] > [1 1 1]
    disp('hello');
end

永远不会打印&#34;你好&#34;即使23都大于1。这是因为if语句需要评估为标量truefalse。如果使用向量,则仅使用第一个元素来确定语句是否为真(忽略其他元素之间的比较)。如果要对所有元素应用条件,可以使用anyall

如果Forecast_WSObserved_WS不是标量,那么您需要将if语句包装在for循环中,例如:

WS_Zone_1 = Observed_WS;
WS_Zone_2 = Observed_WS;
for i = 1:numel(Forecast_WS)
    if Forecast_WS(i) > Observed_WS(i)
        WS_Zone_1(i) = Observed_WS(i).*1.24;
        WS_Zone_2(i) = Observed_WS(i).*1.28;
    elseif Forecast_WS(i) < Observed_WS(i)
        WS_Zone_1(i) = Observed_WS(i).*0.76;
        WS_Zone_2(i) = Observed_WS(i).*0.72;
    end
end

或使用logical indexing对其进行矢量化:

WS_Zone_1 = Observed_WS;
WS_Zone_2 = Observed_WS;
idx  = (Forecast_WS > Observed_WS);
WS_Zone_1(idx) = Observed_WS(idx).*1.24;
WS_Zone_2(idx) = Observed_WS(idx).*1.28;
idx  = (Forecast_WS < Observed_WS);
WS_Zone_1(idx) = Observed_WS(idx).*0.76;
WS_Zone_2(idx) = Observed_WS(idx).*0.72;
相关问题