0

我有一个程序,它获取一个 fints 对象的列,将它们在所有组合中成对相乘,并将结果输出到一个新的 fints 对象中。我有数据的代码,但我也希望系列标签能够通过,以便 a 列和 b 列的乘积具有标签 a*b。

function tsB = MulTS(tsA)
    anames = fieldnames(tsA,1)';
    A = fts2mat(tsA);
    [i,j] = meshgrid(1:size(A,2),1:size(A,2));
    B = Mul(A(:,i(:)),A(:,j(:)));
    q = [anames(:,i(:)); anames(:,j(:))];
    bnames = strcat(q(1,:),'*', q(2,:));
    tsB=fints(tsA.dates, B, bnames);
end

我在运行它时收到警告。

tsA= fints([1 2 3]', [[1 1 1]' [2 2 2]'],{'a','b'}');
MulTS(tsA)
??? Error using ==> fints.fints at 188
Illegal name(s) detected. Please check the name(s).

Error in ==> MulTS at 10
    tsB=fints(tsA.dates, B, bnames);"

似乎 Matlab 不喜欢 bnames 的格式。我试过用谷歌搜索“将单元格数组转换为字符串 matlab”之类的东西,并尝试过 b = {bnames} 之类的东西。我究竟做错了什么?

4

1 回答 1

3

您的datanames( bnamesin MulTS) 似乎包含一个“*”字符,根据fints文档,这是非法的:

数据名

数据系列名称的元胞数组。覆盖默认数据系列名称。默认数据系列名称为 series1、series2 等。

注意:并非所有字符串都被接受为 datanames 参数。支持的数据系列名称不能以数字开头,并且只能包含以下字符:

  • 小写拉丁字母,a 到 z
  • 大写拉丁字母,A 到 Z
  • 下划线,_

尝试用“_”或其他东西替换“*”。

于 2013-10-01T20:02:00.440 回答