Creazione di una funzione che mi generi un particolare vettore dato nel problema

di il
4 risposte

Creazione di una funzione che mi generi un particolare vettore dato nel problema

Siano x, y, z tre vettori riga aventi lo stesso numero di componenti ovvero n.
Scrivere le istruzioni Matlab per assegnare al vettore riga w, di dimensione 3n, le seguenti componenti: w=[x(1) y(1) z(1) x(2) y(2) z(2) .......... x(n) y(n) z(n)].
Qualcuno potrebbe dirmi come potrei risolverlo?

4 Risposte

  • Re: Creazione di una funzione che mi generi un particolare vettore dato nel problema

    Ci sono molti modi per creare il vettore, il più semplice è quello di concatenare i tre vettori di input per creare una matrice e poi usare la funzione "reshape" trasformare la matrice nel vettore desiderato.

    Quale è il problema specifico che hai incontrato?
    Pubblica il codice che hai scritto in modo che si possa identificare eventuali errori.
  • Re: Creazione di una funzione che mi generi un particolare vettore dato nel problema

    Certo, ora allego il codice:
    main:
    clear
    clc
    n=input('Inserire la dimensione dei vettori: ');
    while n<=0
    n=input('Inserire la dimensione dei vettori: ');
    end
    for i=1:n
    x(i)=round(rand*10);
    y(i)=round(rand*10);
    z(i)=round(rand*10);
    end
    b=vettor_w(x,y,z);.
    Mentre la funzione è:
    function [w] = vettor_w(x,y,z,n)
    c=3*n;
    for j=1:3:c
    for a=1:n
    w(j)=x(a);
    w(j+1)=y(a);
    w(j+2)=z(a);
    end
    end
    disp(w);
    end.
    Ma mi sono reso conto che facendo così creo un vettore w che ha come elementi rispettivamente l'ultimo elemento di ogni singolo vettore, ripetuti ogni 3 elementi
  • Re: Creazione di una funzione che mi generi un particolare vettore dato nel problema

    Per definire dei numeri random di tipo "integer" puoi usare la funzione randi.
    Inoltre non c'è bisogno di un ciclo for, basta specificare nella chiamata alla funzione il numero di elementi che vuoi generare; nel tuo caso, per generare "n" valori (il primo parametro indica l'intervallo all'interno del quale genere i valori random):
    
    x=randi([1 100],1,n)
    y=randi([1 100],1,n)
    z=randi([1 100],1,n)
    
    Il ciclo "for" interno opera su tutti i valori dei vettori assegnandoli al vettore di output, questo fa si che vangano sovrascritti fino all'ultima iterazione, questo spiega il problema che incontri.
    Per renderti conto dell'errore, dovresti eseguire il codice in modalità debug.

    In MatLab, spesso si può evitare di usare cicli for sfruttando le funzionalità di indexing; nel tuo caso (come suggerito nella risposta precedente) una sola istruzione è sufficiente:
    
    w=reshape([x;y;z],3*n,1)'
    
    Se proprio devi usare un ciclo for, uno è sufficiente:
    
    x=randi([1 100],1,n)
    y=randi([1 100],1,n)
    z=randi([1 100],1,n)
    
    w=[];
    for i=1:n
        w=[w x(i) y(i) z(i)];
    end
    
  • Re: Creazione di una funzione che mi generi un particolare vettore dato nel problema

    Grazie molte, dato che è una traccia di esame in cui funzioni come reshape non vengono neanche menzionate, mi era importante usare ad esempio un ciclo for.
Devi accedere o registrarti per scrivere nel forum
4 risposte