我在迭代几个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
答案 0 :(得分:2)
本声明:
if [1 2 3] > [1 1 1]
disp('hello');
end
永远不会打印&#34;你好&#34;即使2
和3
都大于1
。这是因为if
语句需要评估为标量true
或false
。如果使用向量,则仅使用第一个元素来确定语句是否为真(忽略其他元素之间的比较)。如果要对所有元素应用条件,可以使用any
和all
。
如果Forecast_WS
和Observed_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;