让我们一次解决一个问题:
“Subscript indices must either be real positive integers or logicals.” well, the input variable “PriceMat” is the price matrix 60×10, and “Symbols” is 10×1 string.
看看你的CointPairs变量.这是使用find命令的结果.可能存在CointPairs产生空矩阵的情况.这是因为当你运行find时,可能会出现CointMatrix中没有条目的情况,它等于1(或实际上不为零).如果是这种情况,那么CointPairs实际上将为空,因为没有符合要求的元素.
因此,您获得该错误的原因是因为您在不允许的情况下尝试对空矩阵执行操作.在执行CointPairs = [rows,cols];之前,需要移动if语句.这样,您就不会遇到任何访问错误.换句话说,这样做:
[rows, cols] = find(CointMatrix);
CointPairs = [rows, cols];
%// Move here
if(isempty(CointPairs))
warning('No Cointegrated Pairs Found');
out = []; %// Make output empty - Must return something or you get an error
return
end
%// Continue here
cf= (CointPairs(:,1)-CointPairs(:,2))==0;
CointPairs(cf,:) = [];
%// More code here...
%// ...
我的一个小评论是你的输出变量已经输出,但你没有在代码中的任何地方分配它.这是故意的吗?
One more question 🙂 what’s exactly meant by “subscript indices”?
下标索引是您用于访问数组/矩阵中元素的值.例如,假设您的矩阵是:
A = [1 2 3; 4 5 6; 7 8 9];
通过做A(2,2),我们得到元素5.第2行和第2列被称为下标索引.指数意味着不止一个,因此您可以使用两个元素数组来访问矩阵的行和列,而不只是一对行和列位置.该对中的每对相应元素是下标索引.
基本上,它们是用于访问矩阵的行和列的数字.您只能使用正数(a.k.a.1,2,3,4 ……)或逻辑运算符(即true / false)访问矩阵/数组中的元素.不允许使用空矩阵,0,负整数或浮点数.
因为您使用上述两个有效输入访问矩阵,所以会出现该错误.
希望这可以帮助!