![]() | ![]() |
|
|
ISTITUTO UNIVERSITARIO NAVALE
FACOLTA'
DI
SCIENZE NAUTICHE
C.d.L. in SCIENZE AMBIENTALI
- indirizzo marino -
Corso di Teoria ed applicazione delle macchine calcolatrici
Elaborato induviduale :
Fattorizzazione LU con pivoting parziale (FORTRAN)
Simulazione ecosistema a quattro componenti (MATLAB)
INDICE
Fattorizzazione LU con pivoting parziale (FORTRAN) 545b16f 3
MANUALE D'USO 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 4
DESCRIZIONE DEL PROBLEMA 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 4
MAIN PROGRAM LINSIST 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 6
SUBROUTINE FATLU ( a , lda , n , punt ) 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 8
SUBROUTINE TRDWN ( a , lda , n , punt , b , y ) 545b16f 545b16f 545b16f 545b16f 545b16f 10
SUBROUTINE TRUP ( a , lda , n , y, x ) 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 12
FUNCTION PIV ( x , n ) 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 14
TEST (contollo eseguito con MATLAB) 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 15
1° test - Matrice 5x5 ben condizionata - 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 15
2° test - Matrice 8x8 ben condizionata - 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 16
3° Test - Matrice 8x8 mal condizionata - 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 17
SIMULAZIONE ECOSISTEMA A QUATTRO COMPONENTI (MATLAB) 545b16f 18
TESTO 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 19
M-File Ecosist.m 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 20
Function Sisteco.m 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 545b16f 22
Il software di seguito sviluppato si propone di risolvere sistemi di equazioni lineari del tipo :
Ax = b
In realtà il sistema di equazioni precedente viene semplificato e diviso in due sottosistemi. Ciò avviene fattorizzando , cioè triangolarizzando , la matrice dei coefficienti A utilizzando l'algoritmo di Gauss , quindi :
A = LU
dove L è la matrice dei matrice dei moltiplicatori ed U la matrice finale dell'algoritmo di Gauss. Inoltre poiché l'algoritmo di Gauss è sensibile alla precisione finita si utilizza il cosiddetto pivoting parziale . Esso consiste , al generico passo k , nella ricerca nella colonna del pivot del massimo , al fine di ottimizzarne la stabilità. Poiché dopo la ricerca dela massimo si effettua uno scambio di righe la fattorizzazione precedente si trasforma in :
PA = LU
dove PA è la matrice dei coefficienti permutata.
Nota la fattorizzazione precedente il sistema Ax = b si trasforma in :
LUx = b
I due sistemi equivalenti saranno quindi:
Ly = b
Ux = y
che risolti l'uno dopo l'altro , rispettivamente con una forward ed una back sobstituton , forniscono la soluzione x.
Il software è stato sviluppato in Fortran 77 ed è costituito da 5 File sorgente :
Linsist . FOR Main program Linsist
Fatlu . FOR Subroutine Fatlu per la fattorizzazione LU
Trdwn . FOR Subroutine per la risoluzione di Ly=Pb
Trup
. FOR Subroutine per la risoluzione di Ux=y
Piv . FOR Function per la ricerca del massimo pivot
i rispettivi . OBJ di compilazione , ed uno eseguibile :
Linsist . EXE
Scopo : risolve il sistema lineare Ax=b (con pivoting parziale, in place) ;
Descrizione dei parametri :
A : - input - array bidimensionale che contiene la matrice dei coefficienti del sistema ;
n : - input - ordine del sistema ;
b : - input - array monodimensionale che contiene il vettore dei termini noti del sistema ;
sol : - output - array monodimensionale che contiene la soluzione calcolata dalla procedura .
Subroutine chiamate : Fatlu ,Trdwn , Trup.
Program linsist
c Main program chiamante le subroutine fatlu,trdwn,trup
integer lda,punt(100),n
c dichiarazione dell'array dei puntatori e della dimensione n di A
real a(100,100),b(100),x(100),y(100),sol(100)
c dichiarazione degli array della matrice A ,del vettore dei termini noti b
c ( permutato y ), delle incognite x e delle soluzioni sol
lda=100
c leading dimension
print *,'Inserire la dimensione N della matrice quadrata A'
read *,n
print *,'Inserire per colonna gli elementi della matrice A'
read *,((a(i,j),i=1,n),j=1,n)
print *, 'Inserire gli N elementi del vettore dei termini noti b'
read *,(b(i),i=1,n)
c inserimento della matrice A e del vettore dei termini noti b
call fatlu(a,lda,n,punt)
c chiamata alla subroutine fatlu che da come output la matrica A fattorizzata e
c l'array dei puntatori in cui sono memorizzati gli scambi di riga
call trdwn(a,lda,n,punt,b,y)
c chiamata alla subroutine trdwn che risolve la parte del sistema Ly=Pb
call trup(a,lda,n,y,sol)
c chiamata alla subroutine trup che risolve Ux=y restituendo l'array delle soluzioni
print *,'Soluzione del sistema lineare impostato'
print *,(sol(i),i=1,n)
c stampa a video delle soluzioni del sistema di equazioni lineari
stop
end
Scopo :calcolo di PA=LU (pivoting parziale , in place) ;
Descrizione dei parametri :
A : - input - array bidimensionale contenente la matrice dei coefficienti del sistema ;
n : - input - ordine del sistema ;
punt : - array monodimensionale contenente il vettore dei puntatori .
Function chiamate: Piv.
Complessità
di tempo T(n) : O
subroutine fatlu(a,lda,n,punt)
integer n,punt(*),piv,jt,ir
c dichiarazione delle variabili locali e dell'array del puntatori
real a(lda,*)
do 10 j=1,n
punt(j)=j
10 continue
c inizializzazione del vettore puntatori
do 20 k=1,n-1
ir=piv(a(k,k),n-k+1)+k+1
c ricerca del max nella colonna con richiamo alla function PIV
if ( a(ir,k).eq.0) then
print *, 'La matrice immessa e SINGOLARE'
go to 100
endif
c struttura di controllo sulla singolarità della matrice A
jt=punt(k)
punt(k)=punt(ir)
punt(ir)=jt
c scambio degli indici nel vettore puntatori
do 30 j=1,n
t=a(k,j)
a(k,j)=a(ir,j)
a(ir,j)=t
30 continue
c scambio tra le righe per la massimizzazione del coefficiente pivot
do 40 i=k+1,n
a(i,k)=a(i,k)/a(k,k)
c calcolo del moltiplicatore
do 50 j=k+1,n
a(i,j)=a(i,j)-a(i,k)*a(k,j)
c aggiornamento coefficienti matrice attiva
50 continue
40 continue
20 continue
100 return
end
Scopo : risoluzione del sottosistema equivalente Ly = Pb ( Triangolare Inferiore )
Viene utilizzato l'algoritmo della forward substitution.
Descrizione dei parametri :
A : - input - array bidimensionale contenente la matrici dei coefficiente del sistema ;
n : - input - ordine del sistema ;
punt : - input - array monodimensionale contenente il vettore puntatori ;
b : - input - array monodimensionale che contiene il vettore di termini noti ;
y : - output - array monodimensionale contenente il vettore termini noti dopo la permutazione.
Subroutine chiamate : nessuna .
Complessità
di tempo T(n) : O
subroutine trdwn(a,lda,n,punt,b,y)
integer n,lda,punt(*)
real a(lda,*) , b(*) , y(*)
c dichiarazione variabili I/O
y(1)=b(punt(1))/a(1,1)
do 10 i=2,n
y(i)=b(punt(i))
do 20 k=1,i-1
y(i)=y(i)-a(i,k)*y(k)
c scambi tra gli elementi del vettore x memorizzati ne vettore puntatori
c risoluzione del sistema Ly=Pb
20 continue
y(i)=y(i)/a(i,i)
10 continue
return
end
Scopo : risoluzione del sottosistema equivalente Ux = y (Triangolare Superiore).
Viene utilizzato l'algoritmo della back substitution.
Descrizione dei parametri :
A : - input - array bidimensionale contenente la matrice dei coefficienti del sistema ;
n : - input - ordine del sistema ;
y : - input - array monodimensionale contenente il vettore dei termini noti permutato;
x : - output - array monodimensionale contente il vettore delle soluzioni del sistema ;
Subroutine chiamate : nessuna .
Complessità
di tempo T(n) : O
subroutine trup(a,lda,n,y,x)
integer lda,n
real a(lda,*) , y(*) , x(*)
c dichiarazione variabili I/O
x(n)=y(n)/a(n,n)
do 10 i=n-1,1,-1
x(i)=y(i)
do 20 k=i+1,n
x(i)=x(i)-a(i,j)*x(k)
20 continue
x(i)=x(i)/a(i,i)
c procede alla back substitution calcolando le soluzioni del sistema Ux=y
c e restituendo nel programma principale l'array delle soluzioni
10 continue
return
end
Scopo : ricerca del massimo nella colonna dove si elimina durante la fattorizzazione .
La function utilizza un array monodimensionale ( x ) per memorizzare la
colonna dove ricercare il max , memorizzando in piv l'indice di riga che
verrà poi utilizzato nella subroutine chiamante per lo scambio di righe.
Descrizione dei parametri :
x : - input - array monodimensionale contenente la colonna dove ricercare il massimo ;
n : ordine del sistema ;
Subroutine chiamate : nessuna .
Complessità di tempo T(n) : O(n)
Integer function piv(x,n)
integer n,k,g
real x(*),max
g=1
c inizializzazione di g
max=x(1)
do 10 k=2,n
if (abs(x(k)).gt.abs(max)) then
c se al posto k il valore di x(k) è maggiore del max
c pone g=k
g=k
max=x(g)
c e pone il valore trovato uguale al massimo
endif
10 continue
piv=g
c memorizza il numero di riga del pivot massimo
return
end
Matrice dei coefficienti A
0.1665 0.9047 0.4940 0.5007 0.4644 0.4865 0.5045 0.2661 0.3841 0.9410 0.8977 0.5163 0.0907 0.2771 0.0501 0.9092 0.3190 0.9478 0.9138 0.7615 0.0606 0.9866 0.0737 0.5297 0.7702 |
cond(a) = 17.1443
Det(a) = 0.1622
Vettore dei termini noti b
( 0.8278 0.1254 0.0159 0.6885 0.8682)T
Vettore soluzioni x=A\b
Risultato MATLAB 545b16f 545b16f Risultato LINSIST
-0.6531 545b16f 545b16f 545b16f -0.6516
0.3435 545b16f 545b16f 545b16f 0.3559
-0.0180 545b16f 545b16f 545b16f -0.1530
1.6046 545b16f 545b16f 545b16f 1.5751
-0.3632 545b16f 545b16f 545b16f -0.3593
OK !
0.2190 0.0346 0.6868 0.7012 0.7564 0.0727 0.2749 0.5045 0.0470 0.0535 0.5890 0.9103 0.9910 0.6316 0.3593 0.5163 0.6789 0.5297 0.9304 0.7622 0.3653 0.8847 0.1665 0.3190 0.6793 0.6711 0.8462 0.2625 0.2470 0.2727 0.4865 0.9866 0.9347 0.0077 0.5269 0.0475 0.9826 0.4364 0.8977 0.4940 0.3835 0.3834 0.0920 0.7361 0.7227 0.7665 0.9092 0.2661 0.5194 0.0668 0.6539 0.3282 0.7534 0.4777 0.0606 0.0907 0.8310 0.4175 0.4160 0.6326 0.6515 0.2378 0.9047 0.9478 |
Matrice dei coefficienti A
cond(a) = 31.7362
Det(a) = 0.0290
Vettore dei termini noti b
( 0.0737 0.5007 0.3841 0.2771 0.9138 0.5297 0.4644 0.9410)T
Vettore delle soluzioni x=a\b
Risultato MATLAB 545b16f 545b16f Risultato LINSIST
1.2061 545b16f 545b16f 545b16f 1.2059
-0.7482 545b16f 545b16f 545b16f -0.7479
-1.3227 545b16f 545b16f 545b16f -1.3229
0.1052 545b16f 545b16f 545b16f 0.1049
0.3386 545b16f 545b16f 545b16f 0.3388
0.8584 545b16f 545b16f 545b16f -0.8586
-0.9028 545b16f 545b16f 545b16f -0.9030
1.1888 545b16f 545b16f 545b16f 1.1892
Matrice dei coefficienti A
0.3686 0.3029 0.5655 0.0125 0.7285 0.7256 0.4091 0.9470 0.2100 0.3544 0.6964 0.4406 0.1112 0.5255 0.4632 0.7434 0.0350 0.9673 0.6890 0.8055 0.5108 0.3452 0.1625 0.8201 0.7570 0.6223 0.8077 0.9331 0.4445 0.5878 0.6933 0.2887 0.0652 0.6978 0.4588 0.5635 0.4748 0.0330 0.0347 0.3326 0.2753 0.3466 0.7361 0.5671 0.5450 0.9090 0.6928 0.6556 0.7706 0.1544 0.1618 0.5757 0.5852 0.7576 0.1717 0.8350 0.3742 0.5160 0.3278 0.9878 0.1485 0.5080 0.2507 0.4243 |
cond(a) = 2.6106e+003 (mal condizionata cond > 103/104)
Det(a) = -8.0436e-005
Vettore dei termini noti b
( 0.4414 0.4314 0.0590 0.3832 0.6443 0.5180 0.2089 0.7378)T
Vettore delle soluzioni x=a\b
Risultato MATLAB 545b16f 545b16f Risultato LINSIST
35.4356 545b16f 545b16f 545b16f 36.7736
11.9939 545b16f 545b16f 545b16f 12.2816
191.2157 545b16f 545b16f 199.5888
-52.9895 545b16f 545b16f -55.1659
-54.0899 545b16f 545b16f -56.3444
196.0114 545b16f 545b16f 204.5518
-283.1839 545b16f 545b16f -295.6083
-116.8741 545b16f 545b16f -121.9154
OK !
Si consideri un sistema ecologico costituito da quattro sottosistemi (comparti) interagenti : 1-produzione primaria ; 2-erbivori ; 3-carnivori ; 4-decompositori.
Sia xi(t) il contenuto energetico del sottosistema i al tempo t.
I flussi di energia sono modellizzati dal sistema
Risolvere il sistema nell'intervallo [0,800] per i seguenti valori di saturazione della predazione :
k1=2000 ; k2=60 e con le condizioni iniziali :
x1(0)=2800, x2(0)=190, x3(0)=35, x4(0)=66.
Riportare in un grafico le quattro funzioni xi(t) al variare di t.
Riportare le traiettorie , nello spazio degli stati , del contenuto energetico degli erbivori e della produzione primaria , dei carnivori e della produzione primaria , dei decompositori e della produzione primaria
clc
clear
echo on
% Corso di teoria ed applicazione delle macchine calcolatrici
Prof. G.Giunta - A.A. 1995/96
Elaborato individuale
% 545b16f a cura di
% Carlo Pinto (SB/4) e Carlo De Luca (SB/36)
% Sistema ecologico costituito da 4 sottosistemi (comparti) interagenti:
% 1-Produzione primaria 2-Erbivori 3-Carnivori 4-Decompositori
% Premere un tasto per il grafico dei flussi di energia
echo off
pause
global k1 k2
k1=2000;
k2=60;
% Valori di saturazione della predazione
[t,u]=ode45('sisteco',0,800,[2800 190 35 66]);
%Funzione di risoluzione delle 4 eq. differenziali,
%contenute nella function 'sisteco',
%restituisce un vettore t del tempo ed una matrice u delle soluzioni
% N.B.: la prod.primaria è in scala 1:100,gli erbivori 1:10
le condizioni iniziali sono rispettivamente 2800 e 190
figure(1)
plot(t,u(:,1)/100,'+y',t,u(:,2)/10,'-.',t,u(:,3),'o',t,u(:,4),'b')
title('Sistema ecologico a 4 componenti:prod.primaria,erbivori,carnivori,decompositori')
xlabel('Tempo')
ylabel('Contenuto energetico dei sottosistemi in [kcal/(m2* a)]')
text(200,70,'Produzione primaria in scala 1:100')
text(200,12,'Erbivori in scala 1:10')
text(200,25,'Carnivori')
text(200,0,'Decompositori')
echo on
% Premere un tasto per avere i grafici nello spazio degli stati
echo off
pause
figure(2)
plot(u(:,1),u(:,2),'+',u(:,1),u(:,3),'-.',u(:,1),u(:,4),'o')
title('Spazio degli stati')
xlabel('Produzione primaria')
ylabel('Erbivori(1)-Carnivori(2)-Decompositori(3)')
text(1500,500,'(1)')
text(5300,50,'(2)')
text(3500,0,'(3)')
function uprimo=sisteco(t,u)
global k1 k2
% richiamo alle costanti fissate nell'm-file chiamante (ecosist.m)
uprimo(1)=400+175*sin(2*pi*(t-11)/52)-1.5 * u(1)*u(2)/(k1+u(1))-0.1*u(1);
% d(x1)/dt = flusso di energia modellizzato per la Produzione primaria
uprimo(2)=0.6* u(1)*u(2)/(k1+u(1))-5.7 *u(3)*u(2)/(k2+u(2))-0.21*u(2);
% d(x2)/dt = flusso di energia per gli Erbivori
uprimo(3)=0.17 * (u(3)*u(2)/(k2+u(2))-0.12*u(3);
% d(x3)/dt = flusso di energia per i Carnivori
uprimo(4)=0.03*u(1)+0.06*u(2)+0.02*u(3)-3*u(4);
% d(x4)/dt = flusso di energia per i Decompositori
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025