我已经写了一个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。我如何从其他功能中调用它?
答案 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;