Pagina 1 di 1

Octave/MATLAB - matrice di coefficienti

Inviato: 7 apr 2017, 16:50
da simo85
O_/

Sono curioso riguardo al generare una matrice di coefficienti in Octave/MATLAB.
Mi spiego meglio. Data una serie di coefficienti:

Codice: Seleziona tutto

h = [1 2 3 4];


per generare questa matrice:

\mathbf{C} = \begin{pmatrix}
1&0&0&0&0&0&0\\
2&1&0&0&0&0&0\\
3&2&1&0&0&0&0\\
4&3&2&1&0&0&0\\
0&4&3&2&1&0&0\\
0&0&4&3&2&1&0\\
0&0&0&4&3&2&1\\
\end{pmatrix}

uso questo codice:

Codice: Seleziona tutto

N = 7;
C = zeros(N,N);
h = [1 2 3 4];
h1 = [h, zeros(1, N - length(h))];

for k = 1:7
C(:,k) = shift(h1, (k -1));
end

for k = 1:7
C(k,:).*=[ones(1,k),zeros(1,(7-k))];
end

disp(C);


Esiste una maniera più elegante per ottenere lo stesso risultato, per esempio senza usare i cicli for ?
Sono abbastanza sicuro che sì, ma non so come... #-o

Ringrazio in anticipo.
Simo

Re: Octave/MATLAB - matrice di coefficienti

Inviato: 7 apr 2017, 18:00
da simo85
Problem solved.

Codice: Seleziona tutto

toeplitz([1 2 3 4 0 0 0],[1 0 0 0 0 0 0])


O_/

Re: Octave/MATLAB - matrice di coefficienti

Inviato: 7 apr 2017, 18:12
da rugweri
A me vengono in mente due strade:

1 - Puoi sviluppare una funzione che costruisca matrici quadrate di qualsiasi dimensione che rispondano alle tue esigenze; per esempio:

Codice: Seleziona tutto

function mx = createmat(v, n)

    mx = zeros(n);
    s = size(v);

    for i=1:n       
        if(i - s > 0)
            k = i - s(1, 2);
            m = s(1, 2);
        else
            k = 0;
            m = i;
        end   
           
        if(i < n)
            j = n - i;
        else
            j = 0;
        end
       
        temp = [zeros(1, k), fliplr(v(1:m)), zeros(1, j)];
        mx(i, :) = temp;
    end


2 - Ti rendi conto che quella è una matrice di Toeplitz, e usi l'apposita funzione :mrgreen:


EDIT: c'eri già arrivato da solo -::-