输出大小未知的函数

时间:2014-03-13 14:15:52

标签: matlab matlab-guide matlab-compiler

我想在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]

3 个答案:

答案 0 :(得分:2)

当您尝试将值ab分配给indexvalue时,MATLAB实际上将它们连接成一个无法分配的向量到两个输出变量。相反,您可以使用index = a; value = b或仅使用ab替换变量名称indexvalue

此外,如果不使用循环而是使用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;

要将indexvalue向量作为函数的输出,您应该在MATLAB命令窗口中调用该函数

>> [index, value] = localminima(x)

一点解释:[index, value] = [a, b]的两面看起来很相似,但它们意味着不同的东西。

  • [a, b]通过连接nx2向量nx1a来构建b矩阵。
  • [index, value]正在尝试将=符号右侧的结果分配给两个变量:indexvalue。由于[a,b]是单个变量(即矩阵),[index, value] = [a, b]是无效操作:没有任何内容可以分配给变量value
  • 当您调用函数[index, value] = localminima(x)并将函数中的index=...value= ...定义为两个单独的变量时,您的函数将返回两个输出。因此[index, value] = localminima(x)将是有效的操作。