无法弄清楚" if else"代码正确?

时间:2014-04-12 11:36:56

标签: matlab

if APC<-2.9079
     BUYz='z'
     SELLy='y'
elseif APC>0.44
     BUYy='y'
     SELLz='z'
else
end

x和y都是单列矩阵。

我希望系统检查APC列是否高于或低于上述值,如果是,则从x和y中选取相应的值。

你认为我输入的是正确的吗? 当我尝试代码时,它不会创建BUYy或任何其他代码。

感谢您的帮助。

澄清:

我使用xlsread在Matlab中加载了一个excel文件。它有诸如x,y,APC,Date等列。

我正在使用&#34; if else&#34;加载文件后在命令窗口中的语句。

1 个答案:

答案 0 :(得分:2)

首先简要介绍ifelseif的矢量。

假设A = [1 2 3],则以下内容不会产生B = 5

if A > 2
   B = 5;
end

原因是if看到的是(A > 2) == [0 0 1]。第一个0将导致该语句为假,因此它将跳过其余的。

同样,以下内容也不会产生B = 5

if A < 2
   B = 5;
end

原因是if现在看到了(A < 2) == [1 0 0]if要求所有元素都为真,以便“跳入它”。以下两个是等价的:

if A < x

if all(A < x)

elseif表现完全相同。

假设y = [1 2 3]x = 'y'不会给你x = [1 2 3]而是x = y(字符“y”,而不是变量。如果你想要x }变量等于您y的{​​{1}}变量。

那么,你能做什么?

如果我理解正确,你有一个类似的向量(可能是小数,但这没关系)。

x = y

您需要APC = [1, -3, 4, -2, 0]; x = [1 2 3 4 5]; y = [6 7 8 9 10]; BUYx = x(2),因为第二个元素是APC中唯一一个小于SELLy = y(2)的元素。

您还需要-2.9079BUYy = [y(1), y(3)],因为APC的第一个和第三个元素大于SELLx = [x(1), x(3)]

你能做的是:

0.44

返回:

BUYx = x(APC < -2.9079)
SELLy = y(APC < -2.9079)
BUYy = y(APC > 0.44)
SELLx = x(APC > 0.44)

如果您只想要第一个元素而不是所有元素,可以像这样使用find

BUYx =
     2
SELLy =
     7
BUYy =
     6     8
SELLx =
     1     3

BUYx = x(find(APC < -2.9079,1,'first')) SELLy = y(find(APC < -2.9079,1,'first')) BUYy = y(find(APC > 0.44,1,'first')) SELLx = x(find(APC > 0.44,1,'first')) 找到find(x < y, 5, 'first')的前5个元素。 x < y只找到find(APC < -2.9079, 1, 'first')的第一个元素。

只是作为第一种方法,然后:APC < -2.9079只获取第一个元素。

可能是我误解了你的问题,但我认为这会让你顺利通过。祝你好运!