Scopi
- Scopo della lezione è illustrare le proprietà di base delle matrici che è necessario conoscere per utilizzare un programma di matematica quale Scilab nell'analisi di reti in cc ed in c.a. Spesso manca il ponte tra i trattati specialistici di matematica e gli strumenti che essi mettono disposizione per i non specialisti. La speranza è di riuscire ad abbozzare questo ponte. Per una teoria rigorosa delle matrici, degli spazi vettoriali e dell'algebra lineare si rimanda ovviamente ai testi di matematica. Scilab è un programma gratuito scaricabile da www.scilab.org
- Non secondaria è poi la speranza di intercettare chi utilizza Scilab e ritiene di condividere la sua esperienza con la comunità di Electroportal, proponendo applicazioni in tema con il sito e, magari, è disponibile per moderare un Forum da affiancare a quello su Mathcad condotto da Giovanni Scghör.
La potenza delle matrici
Quando alle superiori la si incontra per la prima volta nella risoluzione di sistemi, la regola di Cramer non entusiasma più di tanto. Appare un metodo, come dire, troppo automatico, troppo astratto, che toglie o limita l'inventiva. E quasi superfluo. Lo si enuncia per i sistemi di due equazioni in due incognite che non presentano difficoltà con il più comune dei metodi "naturali"di soluzione, cioè per sostituzione. Il calcolo del determinante della matrice quadrata di ordine due che si ha in tal caso, non è un calcolo lungo. Diventa molto più laborioso all'aumentare dell'ordine della matrice, ma rimane un procedimento chiaro ed ordinato come si vedrà. Ed i computer non sentono la fatica e la noia dei calcoli e non si distraggono mentre li eseguono alla loro straordinaria velocità.
L' apparentemente '"arido" metodo di Cramer fa comunque capire che le soluzioni di un sistema dipendono unicamente dai coefficienti e dai termini noti. Non c'era motivo per dubitarne, però la regola mostra come combinarli per ricavare la soluzione che interessa, eludendo l'intricato labirinto di estenuanti passaggi algebrici.
L'espansione dei calcoli che si ha già nel passare da due a tre equazioni e la possibilità diingabbiarli nella struttura matriciale dei coefficienti, fa intuire l'efficacia di questo strumento matematico. L'intuizione non è rimasta solo tale. La teoria delle matrici si è sviluppata e, si può dire, la matrice è diventata la struttura cardine dei software matematici più potenti. Scilab è uno di questi programmi, un software libero ed abbastanza compatibile con Matlab.
La regola di Cramer
Per chi se ne fosse dimenticato ecco la regola di Cramer, dimostrabile usando il metodo di sostituzione.
Numeratore e denominatore derivano calcoli effettuati sui coefficienti ed i termini noti disposti secondo righe e colonne. I pedici sono gli indici di riga e colonna, le "ccordinate cartesiane" del coefficiente (o del termine noto).
Sia il numeratore che il denominatore delle due precedenti equazioni risolutrici sono la differenza dei prodotti tra gli elementi che stanno sulle diagonali. Si chiama diagonale principale quella i cui elementi hanno gli indici identici di riga e colonna; secondaria l'altra.
La differenza tra il prodotto degli elementi della diagonale principale e quello degli elementi della diagonale secondaria è il determinante della matrice. Il determinante della matrice dei soli coefficienti ci fornisce tra l'altro immediatamente il criterio per stabilire se il sistema abbia soluzioni: deve essere diverso da zero.
La regola di Cramer può essere estesa a sistemi lineari di un qualsiasi numero di equazioni. Indicando con D il determinante dei coefficienti e con Dj il determinante della matrice che si ottiene sostituendo ai coefficienti dell'incognita j-esima i termini noti, la soluzione è
con j=1
n
E' necessario ovviamente definire il determinate delle matrici di qualsiasi ordine. Qualche insegnante mostra la regola di Sarrus per le matrici di ordine tre ma la più generale è la regola di Laplace che vedremo.
Occupiamoci allora in modo astratto della struttura matrice, definendo proprietà ed operazioni.
Gli esempi concreti saranno fatti con Scilab.
Definizioni di matrice
La disposizione a rettangolo di m x n numeri, od anche di qualsiasi altro oggetto, disposti in m righe ed in n colonne si chiama matrice. Ciascun numero è detto elemento o termine. Ogni elemento è individuato da due interi, i suoi indici, che indicano la riga e la colonna cui l'elemento appartiene.Matrici con lo stesso numero di righe e di colonne si dicono dello stesso tipo. Se m=n la matrice si dice quadrata.: è quella che ci interessa di più.
Una matrice particolare è un vettore che si ha quando m=1 (od n=1).
Si può allora dire che una matrice m x n è costituita da n vettori ciascuno contenente m elementi( od anche m vettori di n elementi).
Ogni riga di una matrice (e/o ogni colonna) è dunque un vettore ed una matrice m x n si può dire costituita da m vettori ciascuno di n elementi o di n vettori di m elementi
Le notazioni possibili sonoi: indice di riga; j: indice di colonna
Determinante di una matrice quadrata
Il determinante di una matrice A, indicato con det A, oppure |A| , è un numero definito dalla relazione (regola di Laplace)
Complemento algebrico
Indicata con Aij la matrice che si ottiene eliminando la riga i e la colonna j di una matrice A, si definisce complemento algebrico di dell'elemento aij il numero kij definito dalla relazione
...con Scilab
Nota: Nella finestra di Scilab basta scrivere quanto proposto in neretto dopo il prompt del programma (-->). Scilab fornirà il risultato dopo aver premuto il tasto INVIO.
Uno spazio bianco separa gli elemeti di una riga. Il punto e virgola separa le colonne.
Vettori
-->A=[1,5,-3,7]
A = 1. 5. - 3. 7.
-->B=[3;6;-7]
B =
3
6.
-7.
-->v1=[1:.1:2] (a:n:b significa: a a+n a+2n a+3n .... fino a b. Se n è omesso è assunto uhuale ad 1)
v1 =
1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.
Matrici
-->M=[3,5,9;7,-4,8; 9,-3,10;6, 20, -3]
M =
3. 5. 9.
7. - 4. 8.
9. - 3. 10.
6. 20. - 3.
-->mm=[1:.5:5;1:9]
mm =
1. 1.5 2. 2.5 3. 3.5 4. 4.5 5.
1. 2. 3. 4. 5. 6. 7. 8. 9.
-->Mrandom=rand(3,3)
Mrandom =
0.7783129 0.6856896 0.8415518
0.2119030 0.1531217 0.4062025
0.1121355 0.6970851 0.4094825
Calcolo del determinante
Matrice con 1 elemento
-->A=[20]
A =
20.
Matrice 2x2
-->A=[2 5;-7 6]
A =
2. 5.
- 7. 6.
-->det(A)
ans =
47.
Matrice 3x3
-->A=[1 -3 6; 7 -9 12; -2 5 6]
A =
1. - 3. 6.
7. - 9. 12.
- 2. 5. 6.
-->det(A)
ans =
186.
Operazioni sulle matrici
Somma
E' definita per matrici dello stesso tipo. La somma è una matrice i cui elementi sono la somma dei corrispondenti nelle matrici addendi.
Moltiplicazione per un numero
E' una matrice i cui elementi sono il prodotto degli elementi della matrice per quel numero.
...Scilab
-->A=[1:5;2:6;3:7]
A =
1. 2. 3. 4. 5.
2. 3. 4. 5. 6.
3. 4. 5. 6. 7.
-->B=[6:10; 8:12; 20:24]
B =
6. 7. 8. 9. 10.
8. 9. 10. 11. 12.
20. 21. 22. 23. 24.
-->D=A+B
D =
7. 9. 11. 13. 15.
10. 12. 14. 16. 18.
23. 25. 27. 29. 31.
-->A1=A*2
A1 =
2. 4. 6. 8. 10.
4. 6. 8. 10. 12.
6. 8. 10. 12. 14.
Prodotto tra matrici
Non è definito il prodotto tra due matrici qualsiasi. E' definito il prodotto righe per colonne quando il numero di colonne della prima matrice è uguale al numero di righe della seconda. In questo caso il prodotto è una nuova matrice che ha un numero di colonne pari al numero di colonne della seconda matrice ed un numero di righe pari al numero di righe della prima. Definito il prodotto di una riga per una colonna come la somma dei prodotti degli elementi corrispondenti, l'elemento i,j della matrice prodotto è il prodotto della riga i-esima della prima matrice per la colonna j-esima della seconda.
Si procede dunque così:
Prima riga (della prima matrice) per prima colonna (della seconda); prima riga per seconda colonna, fino ad esaurire le colonne. A questo punto è completata la prima riga della matrice prodotto che contiene tante colonne quante la prima.
Seconda riga per prima colonna;: seconda rigaper seconda colonna, fino ad esaurire le colonne. Ed è così completata la seconda riga.
...........
Ultima riga per prima colonna; ultima riga per seconda colonna, fino ad esaurire le colonne. Ora è completata la matrice che ha tante righe quanto la prima.
Una riga, così come una colonna, è un vettore. Cioè gli elementi della riga (o colonna) si possono interpretare come le componenti di un vettore secondo un certo sistema di riferimento, cioè le coordinate del punto individuato dall'estremo del vettore. Nel dire questo pensiamo al vettore che rappresenta un punto dello spazio tridimensionale che ci è familiare. Ma non c'è nulla che impedisca di pensare ad uno spazio con un numero qualsiasi di dimensioni. Rimane solo la difficoltà di averne un'immagine visiva ma con l'allenamento i matematici la superano.
Il prodotto scalare di due vettori è la somma dei prodotti delle rispettive coordinate. Per questo si dice anche che gli elementi della matrice prodotto di due matrici A e B, rappresentano il prodotto interno del vettore rappresentato dalla i-esima riga di A per il vettore corrispondente alla j-esima colonna di B.
La fatica che si fa nel dire a parole la definizione di prodotto è il solito sintomo della potenza della sintesi matematica espressa dalle formule
La moltiplicazione tra due matrici non è commutativa
ma è associativa e distributiva.
Matrici quadrate sono sempre moltiplicabili.
..Scilab
-->A=[1 2 3;4 5 6]
A = 1. 2. 3. 4. 5. 6.
-->B=[1 2; 3 4; 5 6]
B = 1. 2. 3. 4. 5. 6.
-->C=A*B
C =
22. 28.
49. 64.
Non è commutativo
->D=B*A
D =
9. 12. 15.
19. 26. 33.
29. 40. 51.
-->A=[1 2 3; 4 5 6;7 8 9]
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->B=[3 2 1; 6 5 4; 9 8 7]
B =
3. 2. 1.
6. 5. 4.
9. 8. 7.
-->AB=A*B
AB =
42. 36. 30.
96. 81. 66.
150. 126. 102.
-->BA=B*A
BA =
18. 24. 30.
54. 69. 84.
90. 114. 138.
E' associativo e distributivo
-->C=[2 4 8; 3 3 3; 1 3 6]
C =
2. 4. 8.
3. 3. 3.
1. 3. 6.
-->AC=A*C
AC =
11. 19. 32.
29. 49. 83.
47. 79. 134.
-->BC=B*C
BC =
13. 21. 36.
31. 51. 87
49. 81. 138.
-->m=(A*B)*C
m =
222. 366. 624.
501. 825. 1407.
780. 1284. 2190.
-->m1=A*(B*C)
m1 =
222. 366. 624.
501. 825. 1407.
780. 1284. 2190.
-->m=A*(B+C)
m =
53. 55. 62.
125. 130. 149.
197. 205. 236.
-->m1=A*B+A*C
m1 =
53. 55. 62.
125. 130. 149.
197. 205. 236.
-->m=(A+B)*C
m =
24. 40. 68.
60. 100. 170.
96. 160. 272.
-->m1=A*C+B*C
m1 =
24. 40. 68.
60. 100. 170.
96. 160. 272.
Matrice identica
La matrice quadrata costituita da tutti 1 come elementi della diagonale principale mentre tutti gli altri elementi sono uguali a zero è detta matrice unità o matrice identica. Il suo prodotto per una qualsiasi matrice, anche scambiando l'ordine dei fattori, riproduce sempre la matrice moltiplicata. E' dunque l'elemento neutro rispetto alla moltiplicazione
..Scilab
-->I=eye(3,3)
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->AI=A*I
AI =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->IA=I*A
IA =
1. 2. 3.
4. 5. 6.
7. 8. 9.
Osserviamo il risultato del prodotto di una matrice per una matrice dello stesso ordine con elementi diversi da zero solo nella diagonale principale (matrice diagonalizzata)
-->A=[1 2 -5; 7 11 3; -6 10 8]
A =
1. 2. - 5.
7. 11. 3.
- 6. 10. 8.
-->Mdiag=[1 0 0; 0 2 0; 0 0 3]
Mdiag =
1. 0. 0.
0. 2. 0.
0. 0. 3.
-->A*Mdiag
ans =
1. 4. - 15.
7. 22. 9.
- 6. 20. 24.
Come si vede risultano moltiplicati per i valori degli elementi della matrice diagonalizzata gli elementi della corrispondente colonna della matrice A.
Matrice trasposta
E' la matrice che si ottiene scambiando righe con colonne: la prima riga diventa la prima colonna, la seconda riga la seconda colonna
..Scilab
-->TraspostadiA=A'
TraspostadiA =
1. 4. 7.
2. 5. 8.
3. 6. 9.
Osservazione: se gli elementi sono complessi si può fare la matrice trasposta coniugata () o non coniugata (.')
-->B=[1-%i 2; 3+%i -5]
B =
1. - i 2.
3. + i - 5.
-->det(B)
ans =
- 11. + 3.i
-->B'
ans =
1. + i 3. - i
2. - 5.
-->det(B')
ans =
- 11. - 3.i
B.'
ans =
1. - i 3. + i
2. - 5.
-->det(B.')
ans =
- 11. + 3.i
Matrice Inversa
Data una matrice A, la matrice inversa è la matrice che moltiplicata per A dà come risultato la matrice identica. E' indicata con A-1
Si calcola con
da cui si vede che l'inversa esiste solo se il determinante è diverso da zero. kij è il detto complemento algebrico dell'elemento aijdella matrice A
..Scilab
-->A=[1 -3 6; 7 -9 12; -2 5 6]
A =
1. - 3. 6.
7. - 9. 12.
- 2. 5. 6.
-->det(A)
ans =
186.
-->invA=inv(A)
invA =
- 0.6129032 0.2580645 0.0967742
- 0.3548387 0.0967742 0.1612903
0.0913978 0.0053763 0.0645161
-->A*invA
ans =
1. 0. 1.110D-16
1.332D-15 1. 0.
- 4.441D-16 1.665D-16 1.
-->invA*A
ans =
1. 0. - 8.882D-16
0. 1. - 2.220D-16
0. 5.551D-17 1.
-->invA(2,3)
ans =
0.1612903
-->invA*det(A)
ans =
- 114. 48. 18.
- 66. 18. 30.
17. 1. 12
-->invA(2,3)*det(A)
ans =
30.
che è il complemento algebrico di
-->A(3,2)
ans =
5.
Soluzione di sistemi lineari
L' articolo ha avuto origine dalla regola di Cramer. La soluzione dei sistemi lineari fa soffrire gli studenti di una terza ITIS che devono risolvere una rete in continua. Per quanto si insista importante è saper scrivere correttamente le equazioni, la necessità di arrivare al risultato dell'esercizio ed avere il conforto di trovarlo identico a quello del testo che lo propone, fa invece prevalere la fatica di verificarlo con il procedimento manuale rispetto alla corretta scrittura delle equazioni. Beh, con l'uso delle matrici e di un programma di matematica come Scilab, tutto ciò è evitato. L'unica cosa di cui preoccuparsi è scrivere correttamente le equazioni. Anzi le matrici dei coefficienti e dei termini noti. Occorre solo un'ordinata impostazione formale, sintetizzata in questo modo:
aij: coefficienti delle incognite x1..xn;
A1 An sono i termini noti.
Basta dunque fornire i coefficienti ed i termini noti, opportunamente ordinati i primi secondo una matrice quadrata di ordine n, i secondi secondo un vettore di n elementi organizzati in una colonna. Si tratta di trovare il vettore le cui componenti sono le soluzioni.
Ad esempio. Trovare tutte le correnti della rete di figura usando i due principi di Kirchhoff
Se scriviamo in modo ordinato il sistema otteniamo
Nei posti vuoti si devono considerare nulli i coefficienti delle incognite.
Ecco dunque la soluzione con Scilab
-->A=[1 -1 -1 0 0 0; 0 0 1 -1 1 0; 0 1 0 1 0 -1;6 0 5 0 -2 0;0 0 0 4 2 20;0 3 -5 0 2 20]
A =
1. - 1. - 1. 0. 0. 0.
0. 0. 1. - 1. 1. 0.
0. 1. 0. 1. 0. - 1.
6. 0. 5. 0. - 2. 0.
0. 0. 0. 4. 2. 20.
0. 3. - 5. 0. 2. 20.
È la matrice dei coefficienti
-->N=[0;0;0;-40;-10;-10]
N =
0.
0.
0.
-40.
-10.
-10.
è il vettore dei termini noti
L'istruzione che dà il vettore con le soluzioni è linsolve che calcola tutte le soluzioni del tipo A*x+b=0 dove A è una matrice di mxn b un vettore nx1 mentre x è il vettore con le n incognite. Il prodotte è righe per colonne
La sintassi è
Y=linsolve(A,b)
Y è il vettore con le n soluzioni
Quindi per il nostro problema
-->Y=linsolve(A,N)
Y =
4. (I1)
2. ( I2)
2. (I3)
-1. (I4)
-3. (I5)
1. (I6)
Ovviamente sono ampere, mentre il segno indica che il verso reale della corrente è opposto.
Abbiamo risolto un circuito in corrente continua. Le matrici sono con numeri reali. Ma impiegheremo più o meno lo stesso tempo per risolvere un sistema simile in c.a. sinusoidale. Ciò che cambia sono solo i numeri, ora complessi. Scilab non c'è difficoltà a lavorare con i complessi.Ci basta ricordare come Scilab li vuole scritti. Ad esempio il numero complesso in forma cartesiana che gli elettrotecnici scrivono così
z = 50 +j100
in Scilab deve essere scritto in questo modo
z=50+%i*100.
Non c'è molta differenza dunque. Al posto di j usato per l'unità immaginaria Scilab usa %i, ricordandosi del segno di moltiplicazione. Quando poi rappresenta il risultato Scilab usa i accodato alla parte immaginaria. Esistono anche due istruzioni che estraggono la parte reale e quella immaginaria del numero.
-->z=50+%i*100
z =
50. + 100.i
-->real(z)
ans =
50.
-->imag(z)
ans =
100.
Supponiamo di dover risolvere questa rete in c.a.
Lo risolviamo con il metodo delle correnti di maglia. E' un sistema di tre equazioni in tre incognite. Le incognite sono le correnti di maglia i1,i2,i3. Lo scriviamo in modo ordinato per avere le matrici da inserire in Scilab

Ed ecco la soluzione con Scilab
-->S=[10 -10-%i*10 %i*20;-10-%i*10 10 %i*20;%i*20 %i*20 10-%i*40]
S =
10. - 10. - 10.i 20.i
- 10. - 10.i 10. 20.i
20.i 20.i 10. - 40.i
-->N=[-100;0;0]
N =
-100.
0.
0.
-->I=linsolve(S,N)
I =
4.3529412 - 5.4117647i ( i1 =4,3-j5,4)
529412 - 3.4117647i ( i2 =0,35-j3,4)
1.1764706 - 4.7058824i (i3 =1,18-j4,7)
Scomposizione di un sistema trifase dissimmetrico
Come noto dati tre vettori qualsiasi, cioè una terna dissimmetrica, li si può scomporre in una terna omopolare, una simmetrica inversa ed una simmetrica diretta. Le relazioni di scomposizione sono di seguito mostrate
NB:M-1 è la matrice inversa di M. Interessante è la compattezza delle due ultime uguaglianze che indicano come trovare il vettore con le componenti simmetriche dato il vettore della terna dissimmetrica e viceversa.
Vediamolocon Scilab
-->alfa=-0.5+%i*sqrt(3)/2
alfa =
- 0.5 + 0.8660254i
-->alfaq=alfa^2
alfaq =
- 0.5 - 0.8660254i
-->M=[1 1 1;1 alfaq alfa;1 alfa alfaq]
M =
1. 1. 1.
1. - 0.5 - 0.8660254i - 0.5 + 0.8660254i
1. 0.5 + 0.8660254i - 0.5 - 0.8660254i
-->S=M*A/ 3
S=
0
50. + 28.867513i
50. -28.867513i
-->A=inv(M/3)*S
A =
100. + 5.385D-15i
-100. + 7.105D-15
-1.066D-14 - 7.105D-15i
cioè, praticamente
A=
100.
-100.
0
GRAFICA
Scilab ovviamente fa molto di più di quanto mostrato. Un grafico è un insieme di punti che può essere rappresentato da matrici. Si può scrivere qualsiasi programma e produrre grafici di qualsiasi tipo. Ecco ad esempio un piccolo programma che scompone una terna dissimmetrica e traccia i grafici vettoriali. Per farlo funzionare basta copiare il codice ed incollarlo nella finestra di Scilab (oppure scaricare il file da qui) (file sequenze.sce)
Scomposizione (e ricomposizione) di una terna dissimmetrica
|
![]() |
function[] = grafico_vett(n,origine,V, dimFreccia, stile) alfa=0.5*(-1+%i*sqrt(3)); Z1=evstr(x_dialog('value of gain ?','%i*240')) ZV=[Z1;Z2;Z3]; Seq_0di=M*ZV/3; Seq_0=Seq_0di(1)*M(:,1) plot2d(0,0,rect=[-3,-3,3,3]) grafico_vett(3,omor,Seq_0/Zmax,1,4); grafico_vett(1,0,Seq_0(1)/Zmax,2,4); grafico_vett(1,0,Seq_0(2)/Zmax,2,4); grafico_vett(1,0,Seq_0(3)/Zmax,2,4); |