Matlab fints不喜欢我作为参数传递的字符串值

时间:2013-10-01 18:53:59

标签: string matlab

我有一个程序,它接受fints-object的列,在所有组合中成对地将它们相乘,并将结果输出到一个新的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}之类的东西。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的datanamesbnames中的MulTS)似乎包含“*”字符,根据fints documentation这是非法的:

  

datanames

     

数据系列名称的单元格数组。覆盖默认数据系列名称。默认数据系列名称为series1,series2等。

     

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

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

尝试将“*”替换为“_”或其他内容。