Programmare con MATLAB c Parte 5 Cicli: for e while

Documenti analoghi
LABORATORIO DI PROGRAMMAZIONE E CALCOLO Docente E. Carlini A.A. 2012/13 Foglio di esercizi N.8 con la collaborazione di Andrea Pugliese

Equazioni e sistemi non lineari

Equazioni e sistemi non lineari

Sistemi lineari. Lucia Gastaldi. DICATAM - Sez. di Matematica,

Sistemi lineari. 2x 1 + x 2 x 3 = 2 x 1 x 2 + x 3 = 1 x 1 + 3x 2 2x 3 = 0. x 1 x 2 x 3

Calcolo Numerico (CdS in Matematica) A.A. 2012/13

Laboratorio di Calcolo Numerico Laboratorio 11: Metodi diretti per la soluzione di sistemi lineari

Sistemi lineari. Lucia Gastaldi. DICATAM - Sez. di Matematica,

Introduzione al MATLAB c Parte 2

Corso di Geometria e Algebra Lineare

Risoluzione di sistemi lineari sparsi e di grandi dimensioni

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

Autovalori ed autovettori di una matrice

Autovalori ed autovettori di una matrice

Calcolo Numerico - Prova Matlab 19 luglio 2013

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica

Laboratorio di Calcolo Numerico Laboratorio 3: Algoritmi stabili e instabili, Bisezione

Algoritmi stabili e instabili

1. Calcolo dell indice di condizionamento di una matrice

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Soluzione sistemi lineari

Esercizi su algebra lineare, fattorizzazione LU e risoluzione di sistemi lineari

Elementi di Calcolo Scientifico per l Ingegneria A.A

Autovalori ed autovettori di una matrice

Esercitazione 6: Metodi iterativi per sistemi lineari.

Risoluzione di più sistemi con la stessa matrice

Capitolo 1. Esercizi a.a Esercizi. Esercizio 1.1 Dimostrare che il metodo iterativo

PreCorso di Matematica - PCM Corso M-Z

1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.

Sistemi lineari. Lucia Gastaldi. 11 novembre Dipartimento di Matematica,

Introduzione al MATLAB c Parte 3 Script e function

n +1 determinanti (D i, i =1,...,n e det A) n! prodotti per ciascun determinante n 1 moltiplicazioni per ciascun prodotto

Approssimazione di dati

SISTEMI LINEARI. Ax = b

MatLab - Testo pagina 1 di 5 101

Approssimazione di dati

RISOLUZIONE DI SISTEMI LINEARI

Laboratorio di Calcolo Numerico

Equazioni differenziali con valori al bordo

CORSO DI LAUREA IN INFORMATICA CALCOLO NUMERICO Secondo esonero - 07 Giugno x y =2.

Autovalori ed autovettori di una matrice

Esercitazione 5: Sistemi a risoluzione immediata.

Calcolo del precondizionatore K 1

Esercizi Di Geometria 1 (BAER) Canale 1 Da consegnare Lunedi 26 Ottobre

Corso di Calcolo Numerico

Algoritmi per la soluzione di sistemi lineari

VETTORI E MATRICI. Ing. Nicola Cappuccio 2014 U.F.5 ELEMENTI SCIENTIFICI ED ELETTRONICI APPLICATI AI SISTEMI DI TELECOMUNICAZIONI

Cicli. S i a i = a 1 + a 2 + a a n

Sistemi di equazioni lineari

Vettori e Matrici. Corso di Calcolo Numerico. 24 Aprile 2018

Progetto Matlab N 2. Calcolo Numerico 6 CFU. Corso di Laurea in Ingegneria delle Comunicazioni 31/05/2014

Per esempio, una matrice 4 4 triangolare alta ha la forma. 0 a. mentre una matrice di ordine 4 triangolare bassa è del tipo

Programma del corso di: Laboratorio di Programmazione e Calcolo Corso di laurea in Matematica a.a Proff. B. Paternoster, D.

3+4 2 (3+1) 4. Variabili a = 3 b = 4 c = a + b who, whos MATrixLABoratory Un numero è una matrice 1 1.

Matrici.h Definizione dei tipi #define MAXROWS 10 #define MAXCOLS 10 #define ELEMENT int #define ELEMENTFORMAT "%d" Tipo degli elementi della matrice

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Note sull algoritmo di Gauss

Metodi diretti: eliminazione gaussiana

Argomento 12 Matrici

Decomposizione LU di una matrice quadrata

Matrici Un po di esercizi sulle matrici Semplici Lettura e scrittura Calcolo della trasposta Media difficoltà Calcolo l del determinante t È Difficili

... b 2 X 2. . b N X N. a 11 a 12.. a 1N a 21 a 22.. a 2N A =. a N1... a NN

Equazioni e sistemi non lineari

05. Determinare una base ortonormale per ognuno dei seguenti spazi vettoriali.

Laboratorio di Calcolo Numerico Laboratorio 12: Metodi iterativi per la soluzione di sistemi lineari

Esame di Calcolo Numerico per Informatica A.A. 2010/11: testo soluzioni Proff. S. De Marchi e M. R. Russo 12 luglio 2011

Esercitazione di Calcolo Numerico 1 22 Aprile Determinare la fattorizzazione LU della matrice a 1 1 A = 3a 2 a 2a a a 2 A =

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

Operatori relazionali

Equazioni e sistemi non lineari

Complementi di Matematica e Calcolo Numerico A.A

APPUNTI DI ALGEBRA LINEARE

MATLAB:Metodi Numerici per zeri di funzioni.

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

Sistemi lineari: metodi diretti II

Università degli Studi di Ferrara Corso di Laurea in Chimica - A.A

Metodi iterativi per sistemi lineari

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

Esame di Calcolo Numerico per Informatica Prof. S. De Marchi Padova, 2 settembre 2013

Sistemi II. Sistemi II. Elisabetta Colombo

8 Introduzione MATLAB

Fattorizzazione LU (lu)

Metodi iterativi per sistemi lineari

Esercitazione di Calcolo Numerico 1 27 Maggio Calcolare la fattorizzazione P A = LU della matrice A =

Note per il corso di Geometria Corso di laurea in Ing. Edile/Architettura. 4 Sistemi lineari. Metodo di eliminazione di Gauss Jordan

Esercizio 1. Esercizio 2

SISTEMI LINEARI. Metodi diretti. Calcolo numerico 07/08 p. 1/1

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

ALGEBRA LINEARE PARTE III

Problema. Sistemi lineari. Problema. Problema. Quali sono i potenziali in ogni nodo? Leggi di Kirkoff e di Ohm:

Approssimazione di dati

1 Risoluzione di sistemi lineari

Transcript:

Programmare con MATLAB c Parte 5 Cicli: for e while Lucia Gastaldi DICATAM - Sezione di Matematica, http://lucia-gastaldi.unibs.it

Indice 1 La notazione due punti 2 Ciclo: for 3 Ciclo con controllo: while

La notazione due punti La notazione due punti : serve per creare vettori, sottomatrici e per il ciclo di tipo for Vettore=Inizio:Passo:Fine Dati due numeri interi j e k, il comando >> j:k produce il vettore contenente i numeri interi da j a k compresi. Il vettore è vuoto se j>k. Esempio >> x = 1:7 x = 1 2 3 4 5 6 7 page 2

Dati tre numeri reali i, j e k, il comando >> j:i:k produce il seguente vettore [j,j+i,j+2i,...,j+mi] essendo j+mi k e j+(m+1)i > k ossia, partendo dal valore j, si somma i fino a raggiungere un valore tale che sommando i si ottiene un valore maggiore a k. Il vettore è vuoto se i = 0, se i > 0 e j > k, oppure se i < 0 e j < k. Nel caso in cui i = 1 allora i due comandi danno lo stesso risultato. >> j:i:k >>j:k page 3

Esempi >> x = 1:2:15 x = 1 3 5 7 9 11 13 15 >> y=1:9 y = 1 2 3 4 5 6 7 8 9 >> z=10:-2:2 z = 10 8 6 4 2 >> w=1:0.33:3 w = 1.0000 1.3300 1.6600 1.9900 2.3200 2.6500 2.9800 page 4

Come estrarre righe e colonne di una matrice Dato un array A: A(:,j) è la j-esima colonna di A; A(i,:) è la i-esima riga di A; A(:,j:k) è la sottomatrice di A che contiene le colonne di A dalla j-esima alla k-esima; A(:) fornisce tutti gli elementi di A, vista come una singola colonna page 5

Esempi >> A=hilb(5) A = 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111 >> A(2,:) ans = 0.5000 0.3333 0.2500 0.2000 0.1667 >> A(:,3) ans = 0.3333 0.2500 0.2000 0.1667 0.1429 >> A(1:2,1:3) ans = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 page 6

Esercizi Esercizio 1 Costruire una matrice di numeri casuali di dimensione 10 10 con il comando A=rand(10) Estrarre nella matrice B le colonne pari e nella matrice C la sottomatrice principale di dimensione 5 5 che si ottiene eliminando le ultime 5 righe e colonne da A. Esercizio 2 Costruire un vettore b di N > 10 componenti in modo che valga: b i = ( 1) i+1 ossia b = (1, 1, 1, 1,..., 1 N+1 ). Modificare il vettore b in modo che le componenti multiple di 3 abbiamo valore 0 cioè b 3i = 0 per i = 1,..., N/3. Modificare il vettore b in modo che valga b 10 = 100. page 7

for Il ciclo for esegue un gruppo di istruzioni un numero fissato di volte gestito da una variabile di ciclo indice che può assumere sia valori interi che reali. for indice = inizio : incremento : fine istruzioni end Incremento di default: 1. Può essere omesso. All inizio del ciclo la variabile indice assume il valore inizio. Ogni volta che vengono eseguite tutte le istruzioni all interno del ciclo, la variabile indice viene incrementata. Se incremento> 0, allora il ciclo termina quando la variabile indice è maggiore di fine. Se incremento< 0, allora il ciclo termina quando la variabile indice è minore di fine. In generale, alla fine del ciclo la variabile indice ha un valore strettamente maggiore o minore del valore finale. page 8

for for v = [v1,v2,...,vn] istruzioni end In questo caso, la variabile di ciclo v assume di volta in volta i valori delle componenti del vettore a destra dell uguale. Nota Bene La variabile v è una variabile scalare. page 9

Esercizio Algoritmo di sostituzione in avanti Implementare in una function l algoritmo di sostituzione in avanti, per risolvere un sistema lineare con matrice dei coefficienti triangolare inferiore. Usare la seguente riga di dichiarazione della function: function [x]=sost avanti(l,b) essendo Input Output L matrice triangolare inferiore; b termine noto; x vettore soluzione. page 10

Algoritmo di sostituzione in avanti x 1 = b 1 /l 11 per i = 2,..., n i 1 x i = b i l ij x j / l ii j=1 Esempio Il sistema Lx = b con L = 3 0 0 0 1 3 0 0 2 2 1 0 4 2 1 2 ha soluzione x = (2, 1, 3, 0). b = 6 5 1 9 page 11

Esercizio Algoritmo di sostituzione all indietro Implementare in una function l algoritmo di sostituzione all indietro, per risolvere un sistema lineare con matrice dei coefficienti triangolare superiore. Usare la seguente riga di dichiarazione della function: function [x]=sost indietro(u,b) essendo Input Output U matrice triangolare superiore; b termine noto; x vettore soluzione. page 12

Algoritmo di sostituzione all indietro x n = b n /u nn per i = n 1,..., 1 n x i = b i u ij x j / u ii j=i+1 Esempio Il sistema Ux = b con U = 1 3 5 2 0 2 4 1 0 0 2 2 0 0 0 4 ha soluzione x = (1, 0, 1, 2). b = 10 6 2 8 page 13

Esercizio Fattorizzazione LU di Gauss Implementare in una function l algoritmo di fattorizzazione LU. Usare la seguente riga di dichiarazione della function: function [L,U]=miaLU(A) essendo Input Output A matrice da fattorizzare; L matrice triangolare inferiore; U matrice triangolare superiore. page 14

Algoritmo di fattorizzazione di Gauss per k = 1,..., n 1 per i = k + 1,..., n a ik = a ik /a kk per j = k + 1,..., n a ij = a ij a ik a kj fine ciclo in j fine ciclo in i fine ciclo in k page 15

Esempio La fattorizzazione della matrice è data da L = A = 1 0 0 0 1/3 1 0 0 2/3 2/3 1 0 4/3 2/3 1 1 3 9 15 6 1 3 17 5 2 10 4 0 4 16 10 16 U = 3 9 15 6 0 6 12 3 0 0 2 2 0 0 0 8 page 16

while Il ciclo while esegue un gruppo di istruzioni fintanto che l espressione di controllo rimane vera. while espressione di controllo istruzioni end L espressione di controllo è una qualunque espressione logica. page 17

Esercizio Problema 3 Sia f : I R R una funzione reale e continua sull intervallo aperto I. Dato x 0 I, si consideri la successione definita per ricorrenza da x n+1 = f (x n ). Trovare il limite della successione. Fermare il ciclo quando la differenza fra due iterate successive x n+1 x n è inferiore a toll=1.e-4. Fissare un numero massimo di iterazioni (nmax=100). f (x) = x 2 + 2 per 1/2 < x < 2, x 0 = 1. 2x f (x) = x x 2 + 2 per 1 < x < 3, x 0 = 0.6. f (x) = x + 1 per 1 < x < 3, x 0 = 0.6. page 18

Metodo delle approssimazioni successive Osservazione Se la successione x n è convergente, cioè lim n x n = x, allora vale la seguente equazione x = f (x) e si dice che x è punto fisso di f. Scrivere un programma di tipo function che calcola la soluzione del problema di punto fisso mediante il metodo delle approssimazioni successive; Iterata=13 2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 1 0.5 0 0.5 1 1.5 2 2.5 3 page 19

Function ricorrenza [xf,iter]=ricorrenza(f,a,b,x0,tol,nmax) Input f nome della funzione; a, b estremi dell intervallo; x0 punto iniziale; tol tolleranza desiderata; nmax numero massimo di iterazioni. Output xf valore del limite; iter iterazioni eseguite. page 20

Traccia dell esercizio function [xf,iter]=ricorrenza(f,a,b,x0,tol,nmax) 1. uso il comando fplot per il grafico della funzione; 2. inizializzo le variabili delta=1 e i=0 per il controllo; 3. inizio ciclo while: while delta>tol&i<nmax 3.1 salvo il valore vecchio: x=x0; 3.2 calcolo il nuovo valore: x0=f(x0); 3.3 calcolo la differenza: delta=abs(x-x0); 3.4 incremento il contatore: i=i+1. 4. Assegno i risultati alle variabili di output: xf=x0 e iter=i. page 21

Soluzione dell esercizio Prima funzione Dopo 4 iterazioni si raggiunge la soluzione x 4 = 1.414215686274510. Essendo il punto fisso dato da x = 2 l errore relativo è 1.501825092935183e-06. Seconda funzione La successione è oscillante fra valori compresi nell intervallo ( 1, 2.5). Il comportamento della successione è riportato nella slide successiva. Terza funzione Dopo 9 iterazioni si raggiunge la soluzione x 9 = 1.617933956351018. Essendo il punto fisso dato da x = (1 + 5)/2 l errore relativo è 6.182342248197602e-05. page 22

Risultato per la seconda funzione 2 x=0.55113 1 0 1 2 3 4 0 10 20 30 40 50 60 70 80 90 100 2 Iterata=101 1 0 1 2 3 4 1 0.5 0 0.5 1 1.5 2 2.5 3 page 23

Rappresentazione della successione Scrivere un programma di tipo function che esegua le seguenti operazioni: riporta il grafico della funzione di iterazione e della bisettrice del primo e terzo quadrante; calcola la soluzione del problema di punto fisso mediante il metodo delle approssimazioni successive; ad ogni iterata riporta sul grafico della funzione l evoluzione della successione (vedi figura). Iterata=13 2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 1 0.5 0 0.5 1 1.5 2 2.5 3 page 24

Successione per ricorrenza: caso lineare Si consideri la seguente successione per ricorrenza di tipo lineare: x n+1 = ax n + b. L equazione di punto fisso corrispondente è x = ax + b quindi la soluzione è x = b/(1 a) per a 1. Usare la function ricorrenza per studiare il comportamento della successione con i seguenti dati: 1. a = 2, b = 1; x 0 = 1.1, intervallo [ 0.2, 5] 2. a = 1, b = 3; x 0 = 0.1, intervallo [0, 20] 3. a = 1, b = 5; x 0 = 1, intervallo [0, 5] 4. a = 1/2, b = 1; x 0 = 4.5, intervallo [1, 5] 5. a = 1/2, b = 5; x 0 = 4.5, intervallo [ 5, 5] 6. a = 2, b = 1; x 0 = 0.5, intervallo [ 20, 20] 7. a = 4, b = 1; x 0 = 0.4, intervallo [0, 10] Ripetere la prova negli ultimi due casi scegliendo come dato iniziale x 0 = 1/3. Osservare il comportamento della successione in 100 iterazioni se si toglie il controllo su x n+1 x n. page 25