2012-10-04 4 views
7

Quería calcular la derivación estándar de los elementos de una matriz. Así que primero transformé mi matriz con el comando reshape en un vector, y luego usé std.El estándar de Matlab funciona en REPL pero no en el programa

Sin embargo, recibí un mensaje de error:

Error using var (line 59) 
First argument must be single or double. 

Error in std (line 32) 
y = sqrt(var(varargin{:})); 

Error in reducenoise2>standabw (line 112) 
      s = std(B); 

Error in reducenoise2 (line 36) 
D = standabw(n,m,r,fu,D); 

Así imprimí mi vectorial B, justo antes de pasarla a std. Lo asigné a una variable x en REPL intenté llamar al std(x) manualmente.

Curiosamente, esto funciona bien.

Entonces, ¿cómo puede llamarse a la función std – con los mismos argumentos – un error cuando se utiliza dentro de mi código, pero funciona bien en REPL?

Aquí es la función de Matlab:

function [D] = standabw(n,m,r,fu,D) 
    for i = 1+r:n-r 
     for j = 1+r:m-r 
      C = D(i-r:i+r,j-r:j+r); 
      B = reshape(C,(2*r+1)^2,1) 
      s = std(B); 
      if s > fu 
       D(i,j) = 255; 
      end 
     end 
    end 
end 

Este es el vector B, justo antes de que el mensaje de error:

B = 

    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    1 
    0 
    0 
    0 
    0 
    0 
    0 
    0 

Respuesta

6

Lo más probable es que su vector B de su algún tipo int. Trate de llamar a esta forma

std(double(B)) 

La declaración anterior arroja primera B de tipo doble, y luego llama std.

Para verificar, ¿cuál es el tipo de variables tipo whos en el símbolo del sistema?

+0

¡Muchas gracias! Ahora funciona. Pero todavía no entiendo por qué. ¿Te importaría explicar esto? – milli

+0

Simple: está esperando dobles como entrada. –

Cuestiones relacionadas