Octave/MATLAB - matrice di coefficienti

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[1] Octave/MATLAB - matrice di coefficienti

Messaggioda Foto Utentesimo85 » 7 apr 2017, 16:50

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

Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59
0
voti

[2] Re: Octave/MATLAB - matrice di coefficienti

Messaggioda Foto Utentesimo85 » 7 apr 2017, 18:00

Problem solved.

Codice: Seleziona tutto

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


O_/

Avatar utente
Foto Utenterugweri
5.948 2 7 11
CRU - Account cancellato su Richiesta utente
Messaggi: 1366
Iscritto il: 25 nov 2016, 17:46
0
voti

[3] Re: Octave/MATLAB - matrice di coefficienti

Messaggioda Foto Utenterugweri » 7 apr 2017, 18:12

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 -::-


Torna a “Programmi applicativi: simulatori, CAD ed altro”