Question

J'ai une fonction simple qui prend une valeur

Cette valeur est la vérification d'un nombre d'instructions IF ou Elseif pour calculer une autre valeur.

Le problème est qu'il semble trouver une erreur lorsque vous essayez de courir, ce qui dit

Les dimensions d'erreur / matrice doivent être d'accord.

Erreur dans ABC (ligne 9) a = 5000 / g;

Le code est comme suit

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

Donc, je passe dans ABC 100 et je m'attends à ce que soit 1, mais à la place, il passe par chacun si / elseif et lance une erreur sur A = 5000 / g

Je dois également mentionner que j'ai initialement essayé d'utiliser && dans les ElseIFS, mais cela a également donné une erreur qui a dit

Opérandes au || et && les opérateurs doivent être convertibles en valeurs scalaires logiques.

Erreur dans ABC (ligne 6) Elseif (g <= 99 && g> = 50)

Quelqu'un est-il une idée de ce qui se passe ici? Merci

Était-ce utile?

La solution

Vous passez probablement une matrice à votre fonction, par exemple lorsque vous appelez

abc(yourdata)

yourdata n'est en fait pas un numéro, mais une matrice. Si vous avez appelé directement

abc(100)

Vous ne devriez pas voir votre problème (ou n'est-ce pas?).

Autrement dit, Votre principal problème n'est pas à l'intérieur de votre fonction, mais quand vous l'appelez!

Compte tenu de votre description, il semble que vous vousttiez yourdata(1) à la valeur 100 que vous souhaitez tester, mais un autre élément de la matrice a une valeur différente, c'est pourquoi if Construisez des branches dans le cas Else. Là, tu as besoin ./ à la place de / Si tu veux faire Division par élément à la place de division matricielle.

Mais vraiment tu as probablement juste besoin de vous assurer que yourdata est scalaire lorsque vous appelez votre fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top