Si consideri un sistema di 3 equazioni in 3 incognite:

esso  può essere scritto in forma matriciale

con

ora, se A-1 è la matrice inversa di A è possibile scrivere

ma poiché

si ricava che

e quindi per risolvere il sistema è sufficiente calcolare l'inversa della matrice A.

Con Matlab questa operazione è molto semplice. Viene qui sotto riportato m-file che risolve il problema:

clear
close all

A = [ 2 1 -1; ...
3 -1 4; ...
-1 -1 2]

b = [5 -3 -5].'

x = A\b

l'output è il seguente

A =
2 1 -1
3 -1 4
-1 -1 2

b =
5
-3
-5

x =
1.0000
2.0000
-1.0000

e quindi la soluzione del sistema iniziale è x=1, y=2 e z=-1.

 

Per capire se un sistema è determinato o indeterminato è possibile determinare il rango della matrice A:

>> rank(A)
ans =
3

se il rango della matrice A è uguale  al numero di righe del sistema allora il sistema è determinato, se è minore del numero di righe il sistema è indeterminato.

APPROFONDIMENTO

Ci si potrebbe chiedere per quale motivo al posto di x = A\b non si è calcolata la matrice inversa di A con la funzione inv(A) e quindi risolto il problema scrivendo:

>> x = inv(A)*b

ans =

1.0000
2.0000
-1.0000

la risposta è legata al fatto che Matlab risolve il problema per via numerica e per un sistema di equazioni espresso nella forma A*x = b in generale si dovrebbe usare x = inv(A)*b solo se la matrice A è di rango pieno ed è ben condizionata. L'inverso di A esiste solo per matrici di rango pieno ben condizionate. Qualora questo non sia vero è preferibile usare x=A\b.

Per un sistema ben definito, tuttavia entrambi i metodi produrranno lo stesso risultato.

Ulteriori informazioni sulla risoluzione dei sistemi lineari possono essere trovate nell'Help Center di Matlab all'indirizzo https://it.mathworks.com/help/matlab/ref/mldivide.html.

Ultime modifiche: sabato, 23 dicembre 2023, 16:10