Metodi numerici con elementi di Programmazione A.A

Documenti analoghi
Metodi numerici con elementi di Programmazione A.A

Metodi numerici con elementi di Programmazione

Analisi numerica A.A Laurea Magistrale in Ingegneria Civile

Metodi numerici con elementi di Programmazione A.A

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

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

Metodi numerici con elementi di Programmazione A.A

Metodi Numerici con Elementi di Programmazione A.A

Metodi Numerici con Elementi di Programmazione A.A

Metodi Numerici con Elementi di Programmazione A.A

Analisi numerica A.A Laurea Magistrale in Ingegneria Civile

Metodi numerici con elementi di Programmazione A.A

Metodi numerici con elementi di Programmazione A.A

Metodi Numerici con Elementi di Programmazione A.A

Introduzione a Matlab

Esercitazione 00 Introduzione a Matlab

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

Calcolo Numerico. Esercitazioni (A.A ) Lezione n. 16 Approssimazione

Metodi Numerici con Elementi di Programmazione A.A

Metodi numerici con elementi di Programmazione A.A

Metodi Numerici con elementi di Programmazione A.A

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Fondamenti di Informatica

Esercizio 1. Esercizio 2

Metodi Numerici con elementi di Programmazione (A.A )

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Interpolazione polinomiale. Gabriella Puppo

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

Metodi numerici con elementi di Programmazione

Introduzione al MATLAB c Parte 2

Fondamenti di Informatica

Elementi di Calcolo Scientifico per l Ingegneria A.A

CORSO DI LABORATORIO DI INFORMATICA

8 Introduzione MATLAB

Fondamenti di Informatica

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

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

Laboratorio di Calcolo Numerico

Calcolo Numerico (A.A ) Lab n. 10. Metodi iterativi per sistemi lineari 3 Dicembre 2014

Introduzione all ambiente MATLAB. Richiami II. Analisi Numerica - A.A. 2007/08

A.A. 2018/2019. Esercitazione 3 [Per Casa] Strutturazione del Codice Sorgente per la Risoluzione di Problemi mediante MATLAB

1. Calcolo dell indice di condizionamento di una matrice

8 Introduzione MATLAB

Ciclo di seminari: Metodi Computazionali per la Finanza

INTRODUZIONE A MATLAB. Introduzione. Calcolatrice base. Calcolatrice base. Variabili predefinite o speciali. Variabili predefinite o speciali

Algoritmi stabili e instabili

Calcolo Numerico. Esercitazioni (A.A ) Lezione n. 14 Approssimazione

MatLab - Testo pagina 1 di 5 101

Operatori relazionali

Laboratorio di Calcolo Numerico

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Calcolo Numerico I - A.A Laboratorio 3

Laboratorio di INFORMATICA. 15 ottobre 2009

Primi script in MATLAB

Istruzioni Condizionali

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

Progetto Analisi Numerica

Complementi di Matematica e Calcolo Numerico A.A

Università degli Studi di Ferrara

Breve introduzione a MATLAB

3. Matrici e algebra lineare in MATLAB

Diagrammi di flusso (Flow Chart)

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 12 Metodi numerici per equazioni differenziali ordinarie

Laboratorio di Informatica I

Corso di Laurea in Ingegneria Energetica POLINOMI IN MATLAB. Bologna, 13 marzo Fondamenti di Informatica L a.a

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

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

Switch. Unità 3. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Equazioni e sistemi non lineari

19 FEBBRAIO SECONDA PARTE

A. Introduzione a Matlab

Aritmetica in Floating Point

Fondamenti di Informatica A.A. 2016/17

Lezione 6 e 7, /11/2014

MATLAB - Programmazione - 2. Antonino Polimeno

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 9 Metodi numerici per equazioni differenziali ordinarie

Estrazione di dati da una matrice

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Introduzione a MATLAB

Interpolazione polinomiale. Interpolazione polinomiale

Esercizi in Python. Docente: Domenico Daniele Bloisi

Esercitazione 1: Introduzione a MATLAB

A.A. 2018/2019. Esercitazione 5. Modellazione e Risoluzione di Problemi mediante MATLAB. [ Possibili Soluzioni ]

COGNOME... NOME... ( π ) ( ) = e Determinare utilizzando una funzione ausiliaria, opportunamente scelta, la soluzione del

Complementi di Matematica e Calcolo Numerico A.A

MATLAB Alcune funzioni utili: fprintf, length, size

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Programmare con MatLab IV

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA

Script in Matlab. INFORMATICA B + C (sezione L-Z) Ingegneria Elettrica, Chimica e dei Materiali

Strutture di controllo condizionali in Matlab

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Transcript:

Metodi numerici con elementi di Programmazione A.A. 2013-2014 Esercizi svolti in Laboratorio Lezione del 10-12-2013 1

Docente: Vittoria Bruni Email: vittoria.bruni@sbai.uniroma1.it Ufficio: Via A. Scarpa, Pal. B, I piano, Stanza n. 16 Tel. 06 49766648 Ricevimento: Giovedì 14.00-15.00 2

Il materiale didattico è disponibile sul sito http://ingaero.uniroma1.it/ nella pagina dedicata al corso Metodi Numerici con elementi di Programmazione Per consultazione: Getting Started with MatLab The mathworks www.mathworks.com 3

Esercizio 1 Modificare la funzione Matlab num_cond2.m e chiamarla num_cond3.m usando opportunamente l istruzione switch/case/otherwise/ 4

A parte il nome, in questa prima parte non cambia nulla rispetto alla funzione num_cond2 function [K,varargout] = num_cond3(a,varargin) % function [K,varargout] = num_cond3(a,varargin) % calcola il numero di condizionamento K della matrice quadrata % A rispetto alla norma indicata in tipo_norma. % Se tipo_norma non è data in input, il condizionamento è calcolato % rispetto alla norma infinito. tipo_norma non può assumere valori % diversi da 1, 2 o inf % Se si chiedono due output, allora il primo è K e il secondo è la % matrice inversa di A % Se si chiedono tre output, il primo è K, il secondo è la matrice % inversa di A, il terzo è la norma di A 5

Controllo del numero delle variabili di input L istruzione condizionale annidata if elseif elseif else usata in num_cond2 è sostituita con l istruzione switch sulla variabile switch nargin nargin case 0 % non sono assegnati input error('e'' necessario definire una matrice!!!') case 1 % è assegnato un solo input, cioè la matrice tipo_norma = inf; case 2 % sono assegnati due input, cioè la matrice e tipo_norma tipo_norma = varargin{1}; if (tipo_norma ~= 1) & (tipo_norma ~= 2) & (tipo_norma ~= inf) error('la norma deve essere 1 2 o inf') otherwise error('troppe variabili di input!!!') 6

Lista di istruzioni per il controllo degli input dim = size(a); if dim(1)~=dim(2) error('la matrice deve essere quadrata') if det(a)==0 error('la matrice e singolare') Lista di istruzioni per il calcolo del numero di condizionamento rispetto al tipo di norma scelto non cambia nulla rispetto alla funzione num_cond2 IA = inv(a); % matrice inversa di A NA = norm(a,tipo_norma); % norma di A NIA = norm(ia,tipo_norma); % norma della matrice inversa K = NA*NIA; % numero di condizionamento 7

L istruzione condizionale annidata if elseif else usata in num_cond2 è sostituita con l istruzione switch sulla variabile nargout otherwise corrisponde sia ad un numero di output troppo grande rispetto a Controllo e assegnazioni output quello previsto, sia ad un switch nargout numero troppo piccolo!!! case 2 % sono stati richiesti due output varargout{1} = IA; case 3 %sono stati richiesti tre output varargout{1} = IA; varargout{2} = NA; otherwise % il numero delle variabili di output richieste è troppo % alto o troppo basso error('controllare il numero delle variabili di output!!!') 8

Dalla finestra del Command Window >> A = [1 1.01;0.99 1]; >> KA_1 = num_cond3(a,1); >> disp(ka_1) 4.0401e+004 non cambia nulla rispetto alla funzione num_cond2 >> [KA,B] = num_cond3(a); >> disp(ka) 4.0401e+004 >> disp(b) 1.0e+004 * 1.0000-1.0100-0.9900 1.0000 >> [KA,B,nA] = num_cond3(a); >> disp(na) 2.0100 9

Esercizio 2 10

function [P] = successione(a,m) %[P] = successione(a,m) calcola i primi M elementi della successione così definita % P(1) = 2*a % P(2) = 4*a^2-1 % P(k) = 2*a*P(k-1)-P(k-2), k>2 % % e la confronta con la successione così definita % Q(k) = 1/(2*sqrt(a^2-1) )* (abs(a+sqrt(a^2-1))^(k+1) - abs(a-sqrt(a^2-1))^(k+1)); % % % INPUT % a = numero reale tale che a >1. La funzione offre tre possibilità per % correggere il valore della variabile data in input, altrimenti % interrompe l'esecuzione % M = numero intero positivo % OUTPUT % P = vettore contenente gli elementi della successione Pn 11

% controllo del numero delle variabili di input e di output if (nargin<=1) (nargin>2) error('il numero degli input non e'' corretto!!!') if (nargout>1) error('il numero degli output non e'' corretto!!!') % controllo del primo input tentativi = 0; while abs(a)<=1 & tentativi <3 a= input('il modulo di a deve essere maggiore di 1! a= '); tentativi = tentativi + 1; Nota: All uscita del ciclo while si possono avere le due situazioni seguenti: Il valore di a è in modulo maggiore di 1 e tentativi<=3 Il numero di tentativi ha raggiunto il valore 3 e il valore 12 di a è in modulo minore o uguale a 1

if abs(a)>1 % controllo del secondo input if (round(m)~=m) (M<=0) error('il secondo input deve essere un numero intero positivo!!!') % calcolo del vettore P P(1) = 2*a; P(2) = 4*a^2-1; for k=3:m P(k)=2*a*P(k-1)-P(k-2); % calcolo del vettore Q Q(1:M) = 1/(2*sqrt(a^2-1)) * (abs(a+sqrt(a^2-1)).^(2:m+1) - abs(a-sqrt(a^2-1)).^(2:m+1)); % grafico dei risultati figure, plot(p,'k-') hold on, plot(q,'r--') xlabel('k'), ylabel('successioni'), title('confronto successioni') leg('vettore P','vettore Q') else error('gli input inseriti non sono corretti!') 13

Dal Command Window >> [P] = successione(2,-10);??? Error using ==> successione at 38 il secondo input deve essere un numero intero positivo!!! >> [P] = successione(2,1.5);??? Error using ==> successione at 38 il secondo input deve essere un numero intero positivo!!! >> [P] = successione(2,-1.6);??? Error using ==> successione at 38 il secondo input deve essere un numero intero positivo!!! >> [P] = successione(6);??? Error using ==> successione at 22 il numero degli input non e' corretto!!! 14

Dal Command Window >> [P] = successione(-.5,100); il modulo di a deve essere maggiore di 1! a=.5 il modulo di a deve essere maggiore di 1! a=.2 il modulo di a deve essere maggiore di 1! a=.4??? Error using ==> successione at 53 gli input inseriti non sono corretti! >> [P] = successione(2,10); >> [P] = successione(2,100); >> [P] = successione(6,100); >> [P] = successione(-6,100); A queste chiamate la funzione non da messaggi di errore e grafica i risultati 15

Esercizio 3 crivere la function Matlab lebesgue.m che:.riceva in input i vettori xnodi e xpunti; se xpunti non viene dato in input, ssegni a xpunti 1000 punti equispaziati nell' intervallo [xnodi(1); nodi(length(xnodi)];.costruisca il vettore fleb contenente i valori della funzione di Lebesgue alcolata in xpunti;.se xpunti contiene più di un elemento, grafichi la funzione di Lebesgue alcolata in xpunti etichettando opportunamente gli assi;.restituisca in output xpunti, il massimo valore di fleb e il punto p_mfleb n cui è realizzato. tilizzare la function per il seguente vettore di nodi [1.0; 1.5; 2.0; 2.5; 3.0] salvare gli output nel file risultati_es3.mat 16

function [xpunti,mfleb,p_mfleb] = lebesgue(xnodi,varargin) % [xpunti,mfleb,p_mfleb] = lebesgue(xnodi,varargin) valuta e grafica la funzione di % Lebesgue costruita sui nodi contenuti in xnodi in corrispondenza dei punti in % xpunti, ne calcola il massimo e il punto in cui quest'ultimo è realizzato. % Se xpunti non è dato in input, l'intervallo [xnodi(1), xnodi()] è suddiviso in % 1000 punti equispaziati % % INPUT % - xnodi = vettore dei nodi % % OUTPUT % - xpunti = vettore dei punti in cui è stata valutata la funzione di Lebesgue. % Se non è dato in input, è costituito da 1000 punti equispaziati in % [xnodi(1), xnodi()] % - Mfleb = valore massimo assunto dalla funzione di Lebesgue sul vettore di % punti in xpunti % - p_mfleb = punto di xpunti in cui la funzione di Lebesgue assume il valore % massimo 17

% controllo degli input if nargin<1 nargin>2 error('il numero delle variabili di input non e'' corretto!'); elseif nargin==1 if length(xnodi)>1 xpunti = linspace(xnodi(1),xnodi(),1000); else error('xnodi deve essere un vettore di almeno due elementi!'); else if length(xnodi)>1 xpunti = varargin{1}; else error('xnodi deve essere un vettore di almeno due elementi!'); NOTA: Modificare insero il seguente controllo su xpunti: gli elementi di xpunti devono essere contenuti nell intervallo [xnodi(1), xnodi()] 18

% Calcolo i polinomi di base di Lagrange e li valuto in ogni elemento di xpunti n_xnodi = length(xnodi); n_xpunti = length(xpunti); for i=1:n_xpunti % per ogni elemento di xpunti for n=1:n_xnodi % per ogni nodo in xnodi plag(i,n) = prod(xpunti(i)-xnodi(1:n-1))*prod(xpunti(i)-xnodi(n+1:n_xnodi))/ (prod(xnodi(n)-xnodi(1:n-1))*prod(xnodi(n)-xnodi(n+1:n_xnodi))); NOTA: La variabile plag è una matrice con n_xpunti righe e n_xnodi colonne Ogni elemento in posizione (i,n) contiene il valore che il polinomio della base di Lagrange relativo al nodo n-simo assume in corrispondenza dello i-simo elemento di xpunti 19

% calcolo il valore della funzione di Lebesgue in ogni elementi di xpunti fleb = sum(abs(plag')); % calcolo il massimo di fleb [Mfleb,p_Mfleb] = max(fleb); % grafico della funzione di Lebesgue if n_xpunti>1 figure, plot(xpunti,fleb) xlabel('xpunti') ylabel('funzione di Lebesgue') 20

Dal Command Window >> xnodi=[1.0, 1.5, 2.0, 2.5, 3.0]; >> [xpunti,mfleb,p_mfleb] = lebesgue(xnodi); >> save risultati_es3.mat xpunti Mfleb p_mfleb Sono equivalenti >> [xpunti,mfleb,p_mfleb] = lebesgue(xnodi,linspace(xnodi(1),xnodi(),1000)); >> [xpunti,mfleb,p_mfleb] = lebesgue(xnodi,2.2); Non produce grafici >> [xpunti,mfleb,p_mfleb] = lebesgue(xnodi(1));??? Error using ==> lebesgue at 24 xnodi deve essere un vettore di almeno due elementi! 21

Si consideri la successione Esercizio 4 Scrivere la funzione Matlab successione2.m che riceva in input due interi positivi x0 e M e restituisca in output il vettore S contenente i primi M termini della successione x n generata da x0. Se la successione costruita raggiunge il valore 1 in un numero di passi N < M, la funzione deve stampare il valore di N dopo il seguente messaggio "Si raggiunge 1 in un numero di passi pari a ". La funzione deve graficare gli elementi di S usando un pallino blu per gli elementi ottenuti secondo la regola (2), un asterisco nero per quelli ottenuti con la regola (3) e un quadrato rosso per l'eventuale elemento pari a 1. Il grafico deve essere completo di titolo, etichette per gli assi e lega. 22

Esercizio 5 Scrivere la function Matlab fun_esercizio5.m che: 1.riceva in input i vettori xnodi e ynodi, un numero reale z e un intero N; se N non viene dato in input, assegni ad N la lunghezza del vettore xnodi diminuita di 1; 2.detta f la funzione che assume i valori in ynodi in corrispondenza dei valori in xnodi, e detto p N il polinomio di grado N che interpola f in un sottoinsieme opportuno di xnodi, valuti, se possibile, e restituisca in output l'errore che si commette approssimando f(z) con p N (z), altrimenti interrompa l'esecuzione e stampi un messaggio di errore. Data la seguente tabella di dati i 0 1 2 3 4 xi -0.5 0.25 0.5 1.5 2.5 f(xi) -0.750-0.375-0. 250 0.250 0.750 utilizzare la function per stimare l'errore commesso approssimando f(0) con p 4 (0) e salvare sia gli input che gli output nel file 23 risultati_esercizio5.mat