Matrix Blockset

Precedente Home Su Successiva

Link per scaricare il Matrix Blockset: Matrix.zip  (versione 21.03.2001)

Informazioni ed Installazione

Introduzione

Il Matrix Blockset sfrutta la possibilità, introdotta dal Simulink 3.0 (disponibile a partire dalla versione 5.3 del Matlab in poi), di definire nuovi tipi di dati. Con lo scopo di estendere le capacità del Simulink alla gestione di segnali di tipo matriciale, è stato definito un nuovo tipo di dato – il tipo Matrix – e tutta un insieme di blocchi che sono utilizzati nelle operazioni su matrice.

Nella descrizione che segue, verranno riportate le caratteristiche dei nuovi blocchi e la procedura di installazione da seguire. Non essendo questo blockset distribuito in modo ufficiale dalla The Mathworks (a dire la verità, non saprei nemmeno se la The Matworks ne è a conoscenza), bisognerà fare qualche passo in più per renderne possibile l'installazione, ma, non essendoci royalties per il suo utilizzo, mi sembra comunque un prezzo esiguo da pagare.

Per ulteriori informazioni circa il metodo realizzativo utilizzato, si faccia riferimento all'articolo da me pubblicato all'ultima conferenza di utenti Matlab: Matrix Blockset per Simulink.

Il Matrix Blockset per Simulink.

Ogni componente del blockset è stato realizzato tramite una S-function scritta in C (le DLL le potete trovare nella directory di installazione). L’insieme dei blockset realizzato è costituito dai componenti fondamentali necessari per la costruzione degli algoritmi di base che utilizzano matrici variabili. E’ previsto lo sviluppo di ulteriori blocchi su suggerimento degi utenti, e su mia iniziativa per quanto riguarda la compatibilità con il Real-Time Workshop e per il calcolo delle norme di matrici. 
 
Nella lista che segue sono elencati i principali componenti del Matrix Blockset:
Creazione di una matrice. Equivale al blocco Constant presente nella libreria Sources di Simulink. E’ possibile definire come matrice sorgente una qualsiasi espressione in formato Matlab, anche appartenente al workspace di Matlab.
Estrae un elemento dato da una o più matrici, purchè queste siano delle stesse dimensioni e compatibili con l’elemento da estrarre.
(updated 21.03) Moltiplica due matrici di dimensioni compatibili, dando come risultato la matrice prodotto le cui dimensioni sono compatibili con quelle fornite come parametro.
(updated 21.03) Estrae la trasposta di una matrice, dando come risultato una matrice di dimensioni compatibili con quelle fornite come parametro
Guadagno scalare su una matrice in ingresso, le cui dimensioni devono essere compatibili con quelle fornite come parametro
Somma due matrici di dimensioni compatibili, dando come risultato la matrice somma le cui dimensioni sono compatibili con quelle fornite come parametro. E’ possibile sommare più di due matrici contemporaneamente indicando in numero di addendi dato come parametro.
(updated 21.03) Determinante della matrice data come ingresso. Ritorna un valore scalare.
Inversa della matrice data come ingresso. La matrice in ingresso deve essere quadrata, delle dimensioni indicate come parametro.
Blocco che esegue la definizione di uno o più elementi di una matrice. La matrice viene fornita come primo ingresso, mentre i valori da definire vengono inseriti nelle altre porte insieme al valore di riga e colonna in cui devono essere collocati.
Blocco da utilizzare come input del blocco MxSet. Accetta in ingresso un valore che deve essere utilizzato per modificare un elemento della matrice in ingresso al blocco MxSet. Come parametri devono essere indicati i valori di riga e colonna dell’elemento della matrice da modificare. Restituisce 3 valori in un vettore, così organizzati: [valore, riga, colonna].
Analogamente al blocco Memory della libreria Continuous di Simulink, memorizza il valore di una matrice restituendolo al ciclo successivo. Il valore iniziale del restituito dal blocco viene fornito come parametro. Le dimensioni della matrice di ingresso e di uscita devono essere conformi alle dimensioni della matrice definita come condizione iniziale.
Esegue il prodotto di una matrice (primo ingresso) per uno o più vettori (gli altri ingressi) riportando separatamente i risultati in uscita. Le dimensioni della matrice in ingresso devono essere definite da parametro. I vettori in ingresso sono dei vettori di double nativi di Simulink.
(new 17.12.2000) Estrae la traccia di una matrice. Le dimensioni della matrice in ingresso vengono lette dal tipo di dato fornito come ingresso. In uscita si ha la somma degli elementi della diagonale.
(new 17.12.2000) Compone una matrice prendendo il vettore in ingresso a blocchi per comporre le righe della matrice fornita come uscita. Come parametro, viene fornita la dimensione della matrice in uscita. 

Esempi di utilizzazione del Matrix Blockset

I componenti del Matrix Blockset si rendono particolarmente utili nel caso in cui il sistema da simulare e da rappresentare sia composto da una o più matrici i cui componenti sono funzione del tempo.

Sia dato il caso, ad esempio, della rappresentazione nello spazio di stato di un sistema del tipo

(Eq. 1)         T(s) = C (sI – A(t))-1 B + D

in cui la matrice dello stato A(t) sia funzione del tempo secondo una relazione matriciale del tipo:

(Eq. 2)         A(t) = A0 * D (t) = A0 *[1, d(1), d(2); 0, 1, d(3); 0, 0, 1] ;

 

figura 1: Rappresentazione nello spazio di stato di un sistema dinamico con matrice di stato funzione del tempo.

Per mezzo del Matrix Blockset è possibile realizzare la funzione (1) senza ricorrere alla costruzione di una S-function, quest’ultima operazione – tutto sommato – non semplicissima da realizzare e comunque estranea alla concezione di strumento visuale tipica del Simulink. Nella figura 1 è mostrato lo schema a blocchi realizzato dal Matrix Blockset che realizza la funzione (1).

 

figura 2: Costruzione della matrice A(t) funzione dei tre parametri d1, d2, d3.

Ogni blocco appartenente al Matrix Blockset è stato contrassegnato con i caratteri "MX" in basso a destra. Ognuno dei componenti riportati nella figura 2 sono illustrati nella tabella del paragrafo precedente.

Installazione del Matrix Blockset

All'inizio di questa pagina, un link al file Matrix.zip consente di scaricare la libreria Matrix Blockset. Il file zip è stato memorizzato senza un riferimento preciso ad una directory, per cui la directory di installazione dovrà essere scelta dall'utente al momento dell'installazione. 

Dopo aver avviato il programma Winzip sul file Matrix.zip, premere il tasto "Extract" per estrarre i file in una directory a piacimento.

figura 3: Finestra per la scelta della directory di installazione.

Nella finestra di edit chiamata "Extract To:" (vedi figura 3) bisogna inserire il percorso completo della directory scelta per l'installazione. Se la directory non esiste, crearla premendo sul tasto "New Folder...". Le opzioni da attivare sono quelle mostrate nella figura 3. Premere quindi il tasto "Extract" per procedere all'installazione.

Dopo aver completato l'installazione, aggiungere il percorso della directory prescelta nel Matlab utilizzando l'item del menu File-->Set Path...

A questo punto l'installazione è completa. Per prelevare un blocco dal Matrix Blockset, nella finestra del Matlab è sufficiente digitare "Matrix" e si otterrà come risultato la visualizzazione di un modello Simulink con tutte le funzioni a disposizione.

Per verificare la correttezza dell'installazione, nella finestra del Matlab occorre digitare il comando "StateSpace". Un modello Simulink (tipo quello rappresentato nella figura 2) verrà visualizzato. Il test consiste nel mandare in esecuzione il modello e verificare che l'esecuzione non dia luogo ad errori. Per l'esecuzione, è necessario definire nel Workspace di Maltab le matrici A, B, C, D (sono matrici 3x3).  

Nel caso nella finestra del Matlab venga visualizzato qualche errore, vi prego di inviare una mail al sottoscritto con una spiegazione dettagliata delle operazioni compiute. Vi risponderò non appena possibile.

Questa pagina è stata aggiornata il 25/03/01.

Leonardo Daga's Warehouseâ, http://leonardodaga.insyde.it
Send any Comments to: leonardo.daga@gmail.com