Estratto del documento

Una volta lanciato il programma iniziare la sessione di lavoro assegnando

alcuni vettori o matrici:

>> x = [1 4 5 3 -4 5]

>> y = [-1; 0; -5; 13; 4; -5]

>> length(x)

>> length(y)

>> z=x+y

>> z=x’+y

>> a=x*y

>> a=y*x

>> x=[x 10]

>> n=length(x)

>> x=x(n:-1:1)

Dal risultato delle operazioni precedenti si è potuto osservare che la somma

dei due vettori non è consentita a meno che questi non abbiano esatta-

mente le stesse dimensioni (cioè siano due vettori riga o colonna della stessa

lunghezza). Anche per il prodotto le dimensioni devono essere compatibili.

Un vettore riga (di dimensione 1 n) può essere moltiplicato per un vettore

×

colonna (di dimensione n 1) e dà come risultato un valore scalare. Un

×

vettore colonna (di dimensione n 1) può essere moltiplicato per un vettore

×

riga (di dimensione 1 n) e produce come risultato una matrice quadrata di

×

dimensione n. In ultimo osserviamo che l’ultima istruzione di questo blocco

inverte gli elementi del vettore.

>> a=max(x)

>> [a i]=max(x)

>> a1=min(x) 1

>> [a k]=min(x)

>> sort(x)

In questo caso possiamo osservare come le funzioni predefinite e

max min

possano dare due tipi di output diversi, cioè possono fornire solo il valore

del massimo (o del minimo) del vettore ma anche l’indice della componente

massima (o minima).

Vediamo ora alcune istruzioni che riguardano le matrici.

>> A = [1 4 5 3; 0 1 -4 5; 3 4 5 6; -1 0 1 9 ...

; 0 7 6 -9]

>> A(1:3,4)

>> A(2,2:4)

>> A(:,4)

>> A(5,:)

>> A(1:3,2:4)

>> A([1 5],:)=A([5 1],:)

>> [m,n]=size(A)

>> x=max(A)

>> x=max(max(A))

>> B=cos(A)

La prima istruzione di questo blocco consiste nell’assegnazione di una matrice

5 4 alla variabile A. Si osservi la funzione dei tre punti che servono a

×

spezzare su più righe istruzioni troppo lunghe. Nelle altre possiamo osservare

come la cosiddetta notazione “due punti” permetta di visualizzare in modo

compatto porzioni di righe o di colonne, o intere sottomatrici. La settima

istruzione permette di poter scambiare simultaneamente due righe di una

stessa matrice (istruzione analoga vale anche per le colonne) senza l’ausilio

di vettori ausiliari. Va infine osservato cosa succede se si applica una funzione

di tipo vettoriale (in questo caso ad una matrice: il risultato è un vettore,

max)

che (in questo caso) contiene i massimi delle colonne di A. Applicandolo due

volte si ottiene come risultato il massimo elemento della matrice.

Proviamo ora a tracciare il grafico di una funzione. In MatLab ciò può essere

fatto in molti modi diversi, vediamone solo i più semplici. Innanzitutto

scegliamo una funzione, per esempio:

2 2

x

f (x) = sin (x) cos(x) + (sin(e )) + 1

2

e decidiamo di tracciarne il grafico nell’intervallo [0, 2π]. Come è noto un

grafico in MatLab non è nient’altro che una spezzata che congiunge un

insieme discreto di punti del piano. Per prima cosa dobbiamo scegliere

nell’intervallo un certo numero di punti equidistanti, per esempio 100 punti,

utilizzando la seguente istruzione:

>> x=linspace(0,2*pi,100);

Adesso dobbiamo calcolare il valore della funzione f (x) nel vettore delle

ascisse appena assegnato. Il modo più semplice è quello di utilizzare una

variabile di tipo stringa per memorizzare la funzione attraverso la funzione

inline: ∧ ∧

>> funz=inline(’(sin(x). 2).*cos(x)+(sin(exp(x))). 2+1’)

Osserviamo che quando alla variabile viene assegnata una funzione le

funz

operazioni che compaiono nella stringa devono essere considerate come se

fossero applicate a vettori.

A questo punto per calcolare il valore della funzione nel vettore si può

x

utilizzare la funzione feval:

>> y=feval(funz,x);

Si può procedere a tracciare il grafico della funzione:

>> plot(x,y,’b-’);

Il grafico è stato tracciato in blu a tratto continuo, ma possiamo anche variare

il colore e il tipo di tratto; proviamo le seguenti istruzioni:

>> plot(x,y,’y--’);

>> plot(x,y,’r:’);

>> plot(x,y,’go’);

Un secondo modo per tracciare il grafico è quello di utilizzare la funzione

predefinita In questo caso il modo di procedere è lo stesso tranne per

fplot.

la definizione del vettore delle ascisse che non va assegnato:

>> fplot(funz,[0 2*pi]); 3

Infatti i parametri di tale funzione sono solo la stringa contenente la funzione

e l’intervallo di variabilità delle ascisse.

Un’alternativa all’uso combinato di e o di è il comando

inline feval fplot

valutiamone la sua applicazione nell’esempio precedente: per definire la

@;

funzione si usa l’istruzione ∧ ∧

>> f = @(a) (sin(a). 2).*cos(a)+(sin(exp(a))). 2+1;

>> z=f(x);

>> plot(x,z,’*m’);

Tracciando i diversi grafici si è potuto osservare che ogni volta che viene

aperta una nuova figura la precedente viene cancellata. Per poter tracciare

più grafici su una stessa figura va utilizzata l’opzione nel seguente

hold on

modo:

>> fplot(funz,[0 2*pi]);

>> hold on

>> g=inline(’2+sin(x).*cos(x)’);

>> y1=feval(g,x);

>> plot(x,y1);

Si può osservare che l’opzione rimane attiva per tutta la sessione

hold on

di lavoro. Questo vuol dire che tutti i grafici che saranno tracciati successi-

vamente si andranno a sovrapporre sulla stessa figura. Per disattivare tale

opzione è sufficiente l’istruzione

>> hold off 4

Esercitazione 2

Argomento: Sistemi triangolari

Scopo: Implementare i metodi di sostituzione in avanti e all’indietro per

sistemi triangolari inferiori e superiori.

function x=indietro(A,b)

%

% Sintassi x=indietro(A,b)

%

% Risolve un sistema triangolare superiore utilizzando

% il metodo di sostituzione all’indietro

%

% Parametri di input:

% A = Matrice triangolare superiore

% b = Vettore colonna

%

% Parametri di output:

% x = Vettore soluzione

%

n=length(b);

x=zeros(n,1);

if abs(A(n,n))<eps

error(’La matrice A e’’ singolare ’);

end

x(n)=b(n)/A(n,n);

for k=n-1:-1:1

x(k)=b(k);

for i=k+1:n

x(k)=x(k)-A(k,i)*x(i);

end

if abs(A(k,k))<eps

error(’La matrice A e’’ singolare ’);

else x(k)=x(k)/A(k,k);

end

end 5

Vedere la routine in una delle prossime

Esempio di applicazione: gauss.m

esercitazioni.

Possibili modifiche:

La routine appena descritta risolve un sistema triangolare superiore. Osservi-

amo innanzitutto che se viene incontrato un elemento diagonale più piccolo,

in modulo, della precisione di macchina allora l’algoritmo segnala un errore.

Si può inoltre osservare che la routine potrebbe essere scritta in modo più

compatto utilizzando la notazione ”:” del MatLab. Infatti il ciclo descritto

dalla variabile si potrebbe sostituire con un’unica istruzione:

i

x(k)=b(k)-A(k,k+1:n)*x(k+1:n);

Per completezza vediamo anche l’implementazione del metodo di sostituzione

in avanti per matrici triangolari inferiori.

function x=avanti(A,b)

%

% Sintassi x=avanti(A,b)

%

% Risolve un sistema triangolare inferiore utilizzando

% il metodo di sostituzione in avanti

%

% Parametri di input:

% A = Matrice triangolare inferiore

% b = Vettore colonna

%

% Parametri di output:

% x = Vettore soluzione

%

n=length(b);

x=zeros(n,1);

if abs(A(1,1))<eps

error(’La matrice A e’’ singolare ’);

end

x(1)=b(1)/A(1,1);

for k=2:n

x(k)=b(k)-A(k,1:k-1)*x(1:k-1);

6

if abs(A(k,k))<eps

error(’La matrice A e’’ singolare ’);

else

x(k)=x(k)/A(k,k);

end

end Per verificare il funzionamento dell’algoritmo

Esempi di applicazione:

consideriamo un sistema lineare avente una matrice dei coefficienti triangolare

inferiore.

>> A=tril(rand(9));

>> b=ones(9,1);

>> x=avanti(A,b) 7

Esercitazione 3

Argomento: Il metodo di eliminazione di Gauss

Scopo: Risoluzione di un sistema lineare Ax = utilizzando il metodo di

b

eliminazione di Gauss senza strategie di pivoting.

function x=gauss(A,b);

%

% Sintassi x=gauss(A,b)

%

% Risolve un sistema lineare utilizzando il

% metodo di eliminazione di Gauss

%

% Parametri di input:

% A = Matrice dei coefficienti

% b = Vettore dei termini noti

%

% Parametri di output:

% x = Vettore soluzione

%

[m, n]=size(A);

if m∼=n

error(’Metodo non applicabile’);

end

if length(b)∼=n

error(’Metodo non applicabile’);

end

for k=1:n

if abs(A(k,k))<eps

error(’Elemento pivotale nullo ’);

end

for i=k+1:n

A(i,k)=A(i,k)/A(k,k);

for j=k+1:n

A(i,j)=A(i,j)-A(k,j)*A(i,k);

end

b(i)=b(i)-b(k)*A(i,k);

end 8

end

x=indietro(A,b); Per verificare il funzionamento dell’algoritmo

Esempi di applicazione:

lo applichiamo ad un sistema lineare avente una matrice dei coefficienti a

predominanza diagonale per colonne.

>> A=[6 4 1 0;-1 8 1 1;3 0 6 -3;1 -2 1 7]

>> b=[1;2;3;4]

>> x=gauss(A,b)

Nel seguente esempio consideriamo come matrice dei coefficienti una matrice

che ammette un minore principale uguale a zero e verifichiamo che la routine

appena scritta segnala tale circostanza.

>> A=[1 1 2 1 0;2 1 3 1 -4;-1 -1 -2 3 0;4 2 -1 1 0;5 2 -2 1 7]

>> b=[1;2;3;4;5]

>> x=gauss(A,b)

Ci sono casi in cui il metodo di eliminazione di Gauss può fornire una

soluzione del sistema molto diversa da quella teorica. Vediamo il seguente

esempio: scegliamo come matrice dei coefficienti una cosiddetta matrice di

Hilbert, definita nel seguente modo:

1

h = i, j = 1, . . . , n.

ij i + j 1

Per esempio se n = 4 la matrice sarebbe

1 1/2 1/3 1/4

 

1/2 1/3 1/4 1/5

 

H = .

 

1/3 1/4 1/5 1/6

 

 

1/4 1/5 1/6 1/7

Proviamo ora ad applicare il metodo di Gauss ad un sistema di dimensione

15 avente come matrice dei coefficienti quella di Hilbert e come soluzione il

vettore avente tutte le componenti uguali a 1 e confrontiamo la soluzione che

ci fornisce il metodo di Gauss con quella teorica.

9

>> clear

>> format long e

>> n=15;

>> A=hilb(n);

>> x=ones(n,1);

>> b=A*x;

>>

Anteprima
Vedrai una selezione di 7 pagine su 30
Esercitazioni Matlab Pag. 1 Esercitazioni Matlab Pag. 2
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Esercitazioni Matlab Pag. 6
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Esercitazioni Matlab Pag. 11
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Esercitazioni Matlab Pag. 16
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Esercitazioni Matlab Pag. 21
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Esercitazioni Matlab Pag. 26
1 su 30
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche MAT/08 Analisi numerica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher rxbxnttt di informazioni apprese con la frequenza delle lezioni di Calcolo numerico e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Bari o del prof Popolizio Marina.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community