Problema chiamata function in algoritmo matlab

di il
7 risposte

Problema chiamata function in algoritmo matlab

Buongiorno a tutti!!!
Sto programmando un algoritmo in matlab e sono incespicato in questo errore:
"In an assignment A(I) = B, a matrix A cannot be resized."

La parte dell'algoritmo affetta da tale errore è il programma principale... Non riesco a capire cosa intenda questo errore, potreste aiutarmi per favore?
Le variabili QBac e QBre sono lette da tabella e QBac2, QBre2, Liv, QfLiv, Codice, fail e Franco vengono ricavati nelle function.


for i = 1:length(QBac)
	aux = [0, 0, 0, 0, 0];
		if QBac(i) <= 100
			Codice(i) = 1;
			QBre2(i) = QBre(i);
			QBac2(i) = QBac(i);
			Liv(i) = 0;
			QfLiv(i) = 0;
			fail(i) = 0;
		elseif 100 < QBac(i) && QBac(i) <= 200
			Codice(i) = 2;
			[aux(1), aux(2), aux(3), aux(4), aux(5)] = CodVerde(QBac(i), QBre(i), dati_QfLiv);
			Liv(i) = aux(3);
			Franco(i) = trova_Franco(QBre(i), Liv(i), dati_Franco);
			if Franco(i) >= 1.00
				QBac2(i) = aux(1);
				QBre2(i) = aux(2);
				Liv(i) = aux(3);
				QfLiv(i) = aux(4);
				fail(i) = 1;
			else
				QBac2(i) = QBac(i);
				QBre2(i) = QBre(i);
				Liv(i) = 0;
				QfLiv(i) = 0;
				fail(i) = 0;
			end
		elseif 200 < QBac(i) && QBac(i) <= 350
			Codice(i) = 3;
			[aux(1), aux(2), aux(3), aux(4), aux(5)] = CodGiallo(QBac(i), QBre(i), dati_QfLiv);
			Liv(i) = aux(3);
			Franco(i) = trova_Franco(QBre(i), Liv(i), dati_Franco);
			if Franco(i) >= 1.00
				QBac2(i) = aux(1);
				QBre2(i) = aux(2);
				Liv(i) = aux(3);
				QfLiv(i) = aux(4);
				fail(i) = 1;
			else
				QBac2(i) = QBac(i);
				QBre2(i) = QBre(i);
				Liv(i) = 0;
				QfLiv(i) = 0;
				fail(i) = 0;
			end
		elseif 350 < QBac(i) && QBac(i) <= 500
			Codice(i) = 4;
			[aux(1), aux(2), aux(3), aux(4), aux(5)] = CodArancio(QBac(i), QBre(i), dati_QfLiv);
			Liv(i) = aux(3);
			Franco(i) = trova_Franco(QBre(i), Liv(i), dati_Franco);
			if Franco(i) >= 1.00
				QBac2(i) = aux(1);
				QBre2(i) = aux(2);
				Liv(i) = aux(3);
				QfLiv(i) = aux(4);
				fail(i) = 1;
			else
				QBac2(i) = QBac(i);
				QBre2(i) = QBre(i);
				Liv(i) = 0;
				QfLiv(i) = 0;
				fail(i) = 0;
			end
		else
			Codice(i) = 5;
			[aux(1), aux(2), aux(3), aux(4), aux(5)] = CodRosso(QBac(i), QBre(i), dati_QfLiv);
			QBac2(i) = aux(1);
			QBre2(i) = aux(2);
			Liv(i) = aux(3);
			QfLiv(i) = aux(4);
			fail(i) = aux(5);
		end
end
T = table(QBac, QBre, Codice, QBac2, QBre2, Liv, QfLiv, Franco, fail);
filename = 'risultati.xlsx';
writetable(T, filename, 'Sheet', 1, 'Range','A1')

Vi ringrazio anticipatamente del vostro aiuto!
Alessandro

7 Risposte

  • Re: Problema chiamata function in algoritmo matlab

    A quale riga del codice viene generato il messaggio di errore?
  • Re: Problema chiamata function in algoritmo matlab

    Alla riga:

    [aux(1), aux(2), aux(3), aux(4), aux(5)] = CodVerde(QBac(i), QBre(i), dati_QfLiv);

    dati_QfLiv è una matrice di dati
    QBac e QBre sono valori i-esimi tabulati
  • Re: Problema chiamata function in algoritmo matlab

    Il problema sembra legato alle variabili di output della funzione CodVerde.

    Quali sono le variabili di output della funzione CodVerde?
    Come è dichiarata la funzione CodVerde?
  • Re: Problema chiamata function in algoritmo matlab

    La mia funzione CodVerde è:
    function [QBac2, QBre2, Liv, QfLiv, fail] = CodVerde(QBac, QBre, dati_QfLiv)
    	if QBre + (QBac - 100) <= 400
    		QfLiv = QBac - 100;
    		Liv = trova_Liv(QBre, QfLiv, dati_QfLiv);
    		if Liv == 12.00
    			QBac2 = 100;
    			QBre2 = QBre + (QBac - 100);
    			fail = 1;
    			return;
    		else
    			Liv = 12.00;
    			QfLiv = trova_QfLiv(QBre, Liv, dati_QfLiv);
    			QBac2 = QBac - QfLiv;
    			QBre2 = QBre + QfLiv;
    			fail = 1;
    			return;
    		end
    	else
    		QBac2 = QBac;
    		QBre2 = QBre;
    		Liv = 0;
    		QfLiv = 0;
    		fail = 0;
    		return;
    	end
    end
    E' un problema della function?
  • Re: Problema chiamata function in algoritmo matlab

    A prima vista la funzione sembra corretta.

    Il problema sembra legato alle dimensioni di qualche vettore

    "In an assignment A(I) = B, a matrix A cannot be resized.", vedi https://www.mathworks.com/matlabcentral/newsreader/view_thread/262057

    Hai provato a debuggare il tuo programma? Dovresti analizzare il programma fino al punto nel quale viene generato il messaggio di errore e verificare le dimensioni delle variabili.

    Senza il codice completo (di tutte le funzioni) ed i dati di input, è difficile trovare l'errore.
  • Re: Problema chiamata function in algoritmo matlab

    Il debug mi segnava la riga prima della chiamata della funzione CodVerde, quella in cui dico:
    Codice(i) = 2

    Ho cambiato l'inizializzazione dei vettori soluzione e tutto funziona!
    Era un errore di forma: mancavano le parentesi quadre e il valore iniziale era unitario (pensavo si potesse mettere anche 0 o qualsiasi valore):
    Codice = ones([length(QBac),0]);

    Non avevo mai usato il debug... Grazie mille dell'aiuto!!!
  • Re: Problema chiamata function in algoritmo matlab

    Posso chiedere ancora un aiuto: volevo ottenere un output in excel (*.xlsx) e ho scritto:

    T = table(QBac, QBre, Codice, QBac2, QBre2, Liv, QfLiv, Franco, fail);
    filename = 'risultati.xlsx';
    xlswrite(T, filename, 'Sheet', 1, 'Range','A1')

    però mi viene diagnosticato il seguente errore: "Undefined function 'table' for input arguments of type 'double'."
    Come potrei risolvere questo errore?
Devi accedere o registrarti per scrivere nel forum
7 risposte