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;加载文件后在命令窗口中的语句。
答案 0 :(得分:2)
首先简要介绍if
和elseif
的矢量。
假设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.9079
和BUYy = [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
只获取第一个元素。
可能是我误解了你的问题,但我认为这会让你顺利通过。祝你好运!