Pregunta

Tengo una función simple que toma un valor

Este valor es la marcación de una serie de declaraciones if o elseif para calcular otro valor.

El problema es que parece encontrar un error al intentar ejecutar que dice

Error al usar / Las dimensiones de la matriz deben coincidir.

Error en abc (línea 9) a= 5000 / g;

el código es el siguiente

function abc(g)


if (g == 100)
   a = 1;
elseif (g <= 99 & g >= 50)    
   a = 200 -2*g;
elseif (g <= 50 & g >= 1)
   a = 5000 / g;
else
  warning('Invalid value passed, a defaults to 1');
  a =1;
end
end

Entonces, estoy pasando abc 100 y espero que a sea 1, pero en su lugar se ejecuta en cada if / elseif y arroja un error en a= 5000 / g

También debo mencionar que inicialmente intenté usar && en los elseifs, pero esto también dio un error que decía

Operandos al ||y los operadores && deben ser convertibles a valores escalares lógicos.

Error en abc (línea 6) elseif (g <= 99 && g>= 50)

¿Alguien tiene alguna idea de lo que está pasando aquí? Gracias

¿Fue útil?

Solución

Probablemente esté pasando una matriz a su función, p. ej. cuando llamas

abc(yourdata)

yourdata en realidad no es un número, sino una matriz. Si llamaste directamente

abc(100)

No debería ver su problema (¿o no?).

En otras palabras, su problema principal no está dentro de su función , ¡sino cuando la llama!

Dada su descripción, parece que estableció yourdata(1) en el valor 100 que desea probar, pero algún otro elemento de la matriz tiene un valor diferente, por lo que la construcción if se ramifica en el caso else. Allí, necesita ./ en lugar de / si desea hacer división por elementos en lugar de división de matriz .

Pero en realidad, probablemente solo necesita asegurarse de que yourdata sea escalar cuando llame a su función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top