Domanda

Ho una semplice funzione che assume un valore

Questo valore è contrassegnato da una serie di istruzioni if o elseif per calcolare un altro valore.

Il problema è che sembra trovare un errore durante il tentativo di esecuzione che dice

Errore durante l'utilizzo di / Le dimensioni della matrice devono concordare.

Errore in abc (riga 9) a= 5000 / g;

il codice è il seguente

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

Quindi, sto passando abc 100 e mi aspetto che a sia 1 ma invece passa attraverso ogni if / elseif e genera un errore su a= 5000 / g

Dovrei anche menzionare che inizialmente ho provato a usare && negli elseif, ma questo ha anche dato un errore che diceva

Operandi per ||Gli operatori e && devono essere convertibili in valori scalari logici.

Errore in abc (riga 6) elseif (g <= 99 && g>= 50)

Qualcuno ha idea di cosa stia succedendo qui? Grazie

È stato utile?

Soluzione

Probabilmente stai passando una matrice alla tua funzione, ad es. quando chiami

abc(yourdata)

yourdata in realtà non è un numero, ma una matrice. Se hai chiamato direttamente

abc(100)

non dovresti vedere il tuo problema (o lo fai?).

In altre parole, il tuo problema principale non è all'interno della tua funzione , ma quando la chiami!

Data la tua descrizione, sembra che tu abbia impostato yourdata(1) sul valore 100 che vuoi testare, ma qualche altro elemento della matrice ha un valore diverso, motivo per cui il costrutto if si ramifica nel caso else. Lì, è necessario ./ invece di / se si desidera eseguire la divisione in termini di elementi invece di divisione della matrice .

Ma in realtà probabilmente devi solo assicurarti che yourdata sia scalare quando chiami la tua funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top