我想在matlab中定义一个函数,它给出一个向量作为输入,并以矩阵的形式给出局部最小值作为输出。但我给出了这个错误:输出参数太多。 这是我的代码
function [index, value] = localminima(x)
N = length(x);
a = [];
b = [];
% at first a & b witch are index and value, respectively are empty
% then, in the for loop indexes and values of local minimal are added
% to a & b.
for k = 2:N-1,
if((x(k) < x(k+1)) && (x(k) < x(k-1)))
a = [a; k];
b = [b; x(k)];
end
end
[index, value] = [a, b]
答案 0 :(得分:2)
当您尝试将值a
和b
分配给index
和value
时,MATLAB实际上将它们连接成一个无法分配的向量到两个输出变量。相反,您可以使用index = a; value = b
或仅使用a
和b
替换变量名称index
和value
。
此外,如果不使用循环而是使用MATLABs内置函数和逻辑索引,性能可能会提高,例如。
function [index, value] = localminima(x)
dx = diff(x);
logicalIndex = [ false dx < 0 ] & [ dx > 0 false ];
index = find(logicalIndex);
value = x(logicalIndex);
end
答案 1 :(得分:2)
我认为这可以做你想要的,没有循环:
d = diff(x);
ind = [false d<0] & [d>0 false];
a = find(ind);
b = x(ind);
答案 2 :(得分:1)
[index, value] = [a, b]
不正确。您应该有两个单独的作业:
index = a;
value = b;
要将index
和value
向量作为函数的输出,您应该在MATLAB命令窗口中调用该函数
>> [index, value] = localminima(x)
一点解释:[index, value] = [a, b]
的两面看起来很相似,但它们意味着不同的东西。
[a, b]
通过连接nx2
向量nx1
和a
来构建b
矩阵。[index, value]
正在尝试将=
符号右侧的结果分配给两个变量:index
和value
。由于[a,b]
是单个变量(即矩阵),[index, value] = [a, b]
是无效操作:没有任何内容可以分配给变量value
。[index, value] = localminima(x)
并将函数中的index=...
和value= ...
定义为两个单独的变量时,您的函数将返回两个输出。因此[index, value] = localminima(x)
将是有效的操作。