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.
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.
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 sono
i: indice di riga; j: indice di colonna
Il determinante di una matrice A, indicato con det A, oppure |A| , è un numero definito dalla relazione (regola di Laplace)
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
![]()
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.

-->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.
E' definita per matrici dello stesso tipo. La somma è una matrice i cui elementi sono la somma dei corrispondenti nelle matrici addendi.
![]()
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.
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.
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.
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 =
B.'
ans =
1. - i 3. + i
2. - 5.
-->det(B.')
ans =
- 11. + 3.i
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.
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
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)
0.3529412 - 3.4117647i ( i2 =0,35-j3,4)
1.1764706 - 4.7058824i (i3 =1,18-j4,7)
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
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); |
Ti è piaciuto questo articolo? Allora iscriviti al nostro feed! Grazie ai feed potrai leggere le novità di ElectroPortal con il tuo lettore di feed rss preferito o per Email. Cosa sono i feed?
di Fabio di Gennaro, 3 anni fa
Salve ho letto questa lezione e ritengo che scilab 4.1.1 sia un programma ottimo visto che ho usato matlab per i miei studi e quindi ritengo che per i miei calcoli posso dire che cambierò programma, grazie di avermi dato questa opportunità. cordiali saluti
di Paolino, 4 anni fa
Premetto che non ho letto tutto il contributo di Zeno Martini, ma lo farò a breve. Ho usato MATLAB durante gli studi e SCILAB in tre posti di lavoro diversi. Credo che fornire agli utenti del forum la possibilità di impiegare uno strumento in più, possa solo giovare a loro. Ed anche a chi, come me, toglierebbe volentieri un po' di ruggine da qualche parte... Sono dell'avviso che Admin debba annoverare SCILAB tra gli argomenti del forum di ELECTROPORTAL e proporrei proprio Admin come moderatore. Credo abbia dimostrato, con questo contributo, di conoscere a fondo SCILAB.
Iho
2 mesi fa
orsettoKT
3 mesi fa
simonete
4 mesi fa
Lightowler
5 mesi fa
dardef
5 mesi fa
aspi
1 anno fa
EdmondDantes
1 anno fa
BornToKill
1 anno fa
bernasconipi
1 anno fa
admin
1 anno fa
Copyright© 2001-2010 Ing. Zeno Martini & dr. Nicolò Martini p.IVA.01309470290. Tutti i diritti riservati.