Pergunta

Tenho uma função simples que leva um valor

Este valor é marcado em uma série de instruções if ou elseif para calcular outro valor.

O problema é que parece encontrar um erro ao tentar executar que diz

Erro ao usar / As dimensões da matriz devem concordar.

Erro em abc (linha 9) a= 5000 / g;

o código é o seguinte

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

Então, estou passando abc 100 e espero que a seja 1, mas em vez disso, ele passa por cada if / elseif e gera um erro em a= 5000 / g

Também devo mencionar que inicialmente tentei usar && nos elseifs, mas isso também deu um erro que dizia

Operandos para o ||e os operadores && devem ser conversíveis em valores escalares lógicos.

Erro em abc (linha 6) elseif (g <= 99 && g>= 50)

Alguém tem ideia do que está acontecendo aqui? Obrigado

Foi útil?

Solução

Você provavelmente está passando uma matriz para sua função, por exemplo, quando você liga

abc(yourdata)

yourdata na verdade não é um número, mas uma matriz. Se você ligou diretamente

abc(100)

você não deve ver o seu problema (ou vê?).

Em outras palavras, seu principal problema não está dentro da sua função , mas quando você a chama!

Dada a sua descrição, parece que você definiu yourdata(1) com o valor 100 que deseja testar, mas algum outro elemento da matriz tem um valor diferente, razão pela qual a construção if se ramifica para o caso else. Lá, você precisa ./ em vez de / se quiser fazer a divisão por elemento em vez de divisão de matriz .

Mas, na verdade, você provavelmente só precisa ter certeza de que yourdata é escalar ao chamar sua função.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top