Hai provato ad eseguire il codice in modalità debug?
Non è chiaro se ti riferisci all'istruzione
if YSol{iDom,iInitial}(1:siz(i),3)>1.00000000001
break
end
Se è quella:
[*] hai provato a settare un breakpoint alla riga che continene l'if?
[*] hai verificato il contenuto del cellarray prima che l'istruzione "if" venga eseguita?
[*] contiene un valore ">1"?
Leggendo l'istruzione,
YSol{iDom,iInitial}(1:siz(i),3)
sembra che tu testi più di un valore contemporaneamente => (1:siz(i),3), in particolare tanti quanti "siz(i)"
Se questo è corretto, se cioè devi testare più di un valore contemporaneamente devi modificare la definizione della condizione: supponendo di voler testare, ad esempio 5 valori:
[*] se è sufficiente che anche uno solo soddisfi la condizione ">1" devi utilizzare la
funzione any
[*] se tutti devono soddisfare la condizione ">1" devi utilizzare la
funzione all
Se ad esempio, "x" è un vettore di 10 interi, l'istruzione x(1:5) > 1 verifica quali dei primi 5 elementi sia >1
Il risultato è un vettore di 5 elementi di tipo logical: 1 corrisponde al fatto che l'iesimo dei 5 elementi è > 1, 0 se <=.
Prova ad eseguire il codice che segue per vedere come l'istruzione "if" si comporta quando applicata a vettori.
x=randi([1 10],1,10)
if(x(1:5) > 5)
disp([num2str(x(1:5)) ' condizione verificata'])
else
disp([num2str(x(1:5)) ' condizione non verificata'])
end
if(any(x(1:5) > 5))
disp([num2str(x(1:5)) ' condizione verificata'])
else
disp([num2str(x(1:5)) ' condizione non verificata'])
end
if(all(x(1:5) > 5))
disp([num2str(x(1:5)) ' condizione verificata'])
else
disp([num2str(x(1:5)) ' condizione non verificata'])
end