Da matrice a vettore

di il
4 risposte

Da matrice a vettore

Salve sono uno studente universitario e avrei un dubbio su come rispondere a questo quesito utilizzando matlab. Premetto che "da esercizio" non è possibile utilizzare funzioni native del programma.
L'esercizio è il seguente:
1. Acquisisca da tastiera la dimensione di una matrice (A) quadrata di dimensione NxN, con N avente valore almeno pari a 4 e non superiore a 10.
2. Acquisisca da tastiera gli elementi della matrice A.
3. Crei il vettore V contenente gli elementi posizionati al di sopra della diagonale principale, composto dagli elementi della diagonale stessa, presi riga per righe.


Ho risolto i primi due punti e successivamente ho creato attraverso un ciclo for e if la matrice triangolare superiore.
Arrivato a questo punto, come posso inserire gli elementi della matrice triangolare superiore in un vettore, riga per riga, senza utilizzare funzioni native e quindi elemento per elemento?
Grazie per l'attenzione

4 Risposte

  • Re: Da matrice a vettore

    Con un doppio loop; quello esterno che scandisce le righe della matrice triangolare e quello interno che scandisce gli elementi di ogni riga (le colonne).
    Prima dei loop inizializzi a 0 una variabile (contatore) che userai come indice del vettore.
    Nel ciclo for interno, incrementi il contatore per ogni elemento della matrice e lo usi come indice-posizione dell'elemento del vettore al quale assegni lo "i-esimo" valore della matrice triangolare.
    Non è necessario dimensionare il vettore prima di inserirvi gli elementi della matrice perchè MatLab provvede, ad ogni iterazione, ad allocare la memoria necessaria al vettore (che si espande ogni volta che aggiungi un valore).
    Volendo, però, dal momento che conosci (o puoi ricavare facilmente) il numero di elementi della matrice triangolare, puoi inizializzare (a 0, per esempio) il vettore prima dei loop.
    Allo scopo, ci sono delle funzioni dedicate (es. "zeros"), se non puoi usarle, puoi aggirare l'ostacolo assegnando un valore qualunque (ad esempio 0) all'ultima locazione del vettore: se sai che gli elementi della matrice triangolare da inserire nel vettore sono, ad esempio 10, basterà: "v(10)=0.
  • Re: Da matrice a vettore

    Grazie, in effetti occorreva semplicemente incrementare il ciclo. Ho risolto.
  • Re: Da matrice a vettore

    Io sto cercando di risolvere lo stesso problema, dopo che ho reso la matrice come triangolare superiore, non capisco dove sbagli poi nei comandi, mi potreste individuare l'errore?
    Allegati:
    27513_9acb88415c3ff2b41a847c76717938b5.jpg
    27513_9acb88415c3ff2b41a847c76717938b5.jpg
  • Re: Da matrice a vettore

    Dovresti pubblicare direttamente il codice e non una sua immagine se vuoi che qualcuno provi ad eseguirlo per trovare eventuali errori, non puoi aspettarti che qualcuno scriva il codice copiandolo dalla tua immagine.

    Non è chiaro cosa tu voglia fare.
    Hai provato ad eseguire il codice in modalità debug?
    Cosa ti aspetti che facciano le istruzioni all'interno dei cicli "for"?
    Ad ogni iterazione, al momento semplicemente assegnano alla variabile "vet" (che è uno scalare e non un vettore) il valore della variabile "x" che viene incrementata ad ogni iterazione.

    Se vuoi estrarre i valori diversi da zero dalla matrice triangolare, ci sono diversi errori nei loop:
    [*] come puoi identificare i valori diversi da zero senza un blocco "if" nel quale effettuare la verifica^
    [*] come puoi estrarre i valori diversi da zero dalla matrice triangolare se, nei loop non usi la matrice stessa?

    Come per la risposta alla domanda precedente:
    [*] devi inizializzare un contatore da usare come indice per il vettore di output
    [*] devi inserire un blocco "if" nel ciclo for interno che verifichi se il (i,j)-esimoo valore della matrice triangolare sia diverso da zero
    [*] in caso la condizione sia verificata, devi assegnare il valore al vettore di output ed incrementare il contatore
Devi accedere o registrarti per scrivere nel forum
4 risposte