从其他函数访问数组元素

时间:2012-01-23 11:54:35

标签: function matlab

我已经写了一个matlab函数;现在当我模拟它时会发生以下错误

h(n) = (str.(n));

???尝试 参考领域 非结构阵列。 我无法理解。任何人都可以帮忙吗?

功能控制(varargin)

str =  {
    'violet';
    'indigo';
    'blue';
    'green';
    'yellow';
    'orange';
    'red';
    };

N = length(str);
h = zeros(N,1);
for n =1:N
    h(n) = str.(n);
end

声明h(n)有什么问题?我想在h(n)中存储str元素。我还想从另一个函数传递值到vibgyor。我如何从其他功能中调用它?

2 个答案:

答案 0 :(得分:1)

变量str不是结构,它是一个字符串数组。 您可以将其转换为如下

str =  {
    'violet';
    'indigo';
    'blue';
    'green';
    'yellow';
    'orange';
    'red';
    };

N = length(str);
h = zeros(N,6);

for n =1:N
    X=cell2mat(str(n));

    for m=1:length(X)
        h(n,m) = X(m);
    end;
end

h

答案 1 :(得分:1)

如上所述str不是一个结构,所以要引用第n个元素,你只需删除这一行上的点:

 h(n) = str(n);

然而,这会给你这个错误:

  

???从单元格转换为double时发生以下错误:错误   使用==>双重转换为从单元格翻倍是不可能的。

这是因为您将h初始化为零并且您正在尝试将其设置为单元格数组。所以你应该改为:

str =  {
    'violet';
    'indigo';
    'blue';
    'green';
    'yellow';
    'orange';
    'red';
    };

N = length(str);
h = cell(N,1);
for n =1:N
    h(n) = str(n);
end

但是,如果你所做的只是将h分配给str,为什么不跳过for循环而只是这样做

h = str;