Anteprima
Vedrai una selezione di 13 pagine su 57
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 1 Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 2
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 6
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 11
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 16
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 21
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 26
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 31
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 36
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 41
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 46
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 51
Anteprima di 13 pagg. su 57.
Scarica il documento per vederlo tutto.
Riassunto esame Calcolo numerico, Prof. Mazzia Annamaria, libro consigliato Programmare con Matlab, Mazzia Annamaria Pag. 56
1 su 57
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

SCRIPT PER FARE IL GRAFICO DI UNA FUNZIONE

Posso creare vettori di componenti equidistanti

x= linspace (a,b,n) a e b sono estremi dell’intervallo n è il numero di punti (se non metto n mi crea 100 punti di default)

x = a : incremento : b se a < b l’incremento > 0 se a > b l’incremento < 0

% script di esempio sui grafici di funzione

clear % eliminare tutte le variabili che potrebbero darci fastidio

close all % chiudiamo tutte le eventuali figure presenti (grafici prima)

f=@(x) 0.2-1.5*sin(x); % la funzione seno è gia vettorizzata

% fplot(f) comando che crea il grafico della funzione

% quando lancierò questo script non apparirà nulla sulla command window

% ma uscirà una finestra aggiuntiva con il grafico

% se voglio aumentare lo spessore delle righe del grafico scrivo così

fplot(f,'linewidth',2) % spessore da 0 a 4

% di default il colore del grafico è il blu

% se non definisco un intervallo MATLAB prenderà i valori da -5 a 5

hold on % conservo il primo grafico, sovrascivendolo con il secondo

% prendo ora solo alcuni valori che metterò in un vettore

x=[0 2 4 6]; % ascisse

y=f(x); % ordinate

% plot(x,y) non più fplot perchè conosco sia le ascisse che le ordinate

% facendo così mi unisce i punti

plot(x,y,'o') % così metterò in risalto i punti sul grafico precedente

% senza unirli con i segmenti

figure % apro una figura successiva a quella già creata

a=0; b=2; % estremi dell'intervallo su cui voglio fare il grafico

x=linspace(a,b);

y=f(x);

plot(x,y,'linewidth',2)

% ora vedrò due figure

% voglio andare a fare sul secondo grafico l'asse delle ascisse e il

% grafico della bisettrice

hold on % il primo hold on mi serviva per sovrascrivere la prima figura,

% ora ne devo scrivere un altro

x1=[a,b] % vettore ascisse

y1=[0,0] % vettore ordinate

plot (x1,y1,'linewidth',2) % asse delle ascisse

plot (x,x,'linewidth',2) % bisettrice essendo y=x

xlabel ('asse delle ascisse') % etichetta su asse x

ylabel ('asse delle ordinate') % etichetta su asse y

title ('Esperimenti di grafici') %titolo della figura

plot(x,y,'o') % così metterò in risalto i

punti sul grafico precedente

plot (x1,y1,'linewidth',2) % asse delle

ascisse

plot (x,x,'linewidth',2) % bisettrice

essendo y=x

xlabel ('asse delle ascisse') % etichetta

su asse x

ylabel ('asse delle ordinate') % etichetta

su asse y

title ('Esperimenti di grafici') %titolo

della figura

LEZIONE 24 MARZO

RIPASSO DELLA STRUTTURA CONDIZIONALE IF

1^ tipo di struttura

Se (if) la proposizione logica che andiamo a scrivere è vera allora abbiamo delle istruzioni (una o più) da eseguire, altrimenti

(else) possiamo fare altre istruzioni. Fine (END)

2^ tipo di struttura

Se (if) la proposizione logica è vera allora abbiamo delle istruzioni da eseguire, altrimenti (else) se (if) abbiamo un’altra

proposizione logica abbiamo da eseguire altre istruzioni, (posso fare ‘altrimenti se’ quante volte voglio), poi ci saranno le

istruzioni finali. Fine (END)

CICLO FOR

In genere io faccio variare un indice intero e al variare di esso faccio determinate istruzioni

FOR i= 1 : 10 [oppure 1 : 1 (incremento) : 10] istruzioni END

L’operatore : ci permette di creare un vettore di componenti equidistanti. Se scrivo x= 1 : 2 : 10, matlab mi creerà un vettore con

componenti (1 3 5 7 9), ovvero un vettore da 1 a 10 con componenti equidistanti di passo 2.

Se io volessi creare un vettore di passo 1, invece di scrivere x= 1 : 1 : 10 mi basta scrivere x = 1 : 10 (di default usa 1 come

incremento)

In generale il ciclo for è: FOR i = (vettore riga) istruzioni END

Quando entro nel ciclo, la i è uguale alla prima componente del vettore, eseguo le istruzioni, torno indietro al ciclo FOR e i

diventa la seconda componente ed eseguo le istruzioni, ecc.

Quando scrivo somma=0 ho inizializzato una variabile = 0. Io voglio fare questa somma di i _ n=25). come se facessi

(i=1,….,n

somma = somma + 1 = 0 + 1 = 1

somma = somma + 2 = 1 + 2 = 3

somma = somma + 3 = 3 + 3 = 6 e così per farlo con matlab basta che creo uno script con scritto for i=1:n e somma =

via….

somma + i (partendo ovviamente da somma = 0).

clear %cancello tutte le variabili esistenti

for i=1:10 %inizio il ciclo for creando un vettore i di passo 1

disp('imparo il ciclo for') %scrivo una stringa che verrà ripetuta 10 volte

disp(i) % visualizzo il contenuto della variabile

end %termino il ciclo

% facciamo la somma data da i primi n numeri interni

% somma = 1+2+3+4+...+n

n=25; %numero scelto a caso

%voglio ogni volta aggiungere un termine alla somma

somma=0; %introduco questa variabile in cui avrò il rusltato delle operazioni

disp('************') % per separare i due esempi di cicli for

for i=1:n

somma=somma+i;

disp(somma)

end

x=[0.5 0.25 0.125]; %creo un vettore riga

for a=x

disp('sto usando in modo particolare il ciclo for')

disp(a)

end

CICLO WHILE

while (fin tanto che) è vera una proposizione logica, esegui determinate istruzioni, END. (altrimenti stop)

Quindi per partire la proposizione deve essere vera, però se questa proposizione rimane sempre vera si andrà avanti all’infinito.

Le istruzioni che andrò a scrivere dovranno andare a influenzare la proposizione logica e in alcune situazioni questa proporzione

logica dovrà diventare per forza falsa.

Analizziamo il ciclo while tramite un esempio di schema di punto fisso di g(x) = cos (x) con uno script.

%%%%%%%%%%%%%%%%%%%%%%%%% ciclo while %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

toll=1.e-10; %posso anche scrivere 10^(-10)

x0=1;

itmax=100; %numero massimo di iterazioni

% fin tanto che lo scarto è > di una toll prefissata e il numero delle iter

% sono < del valore massimo itmax allora eseguo una nuova iterazione dello

% schema di punto fisso

scarto=2*toll; %un valore più grande di toll e fittizzio per entrare nel

% ciclo while

iter=0;

while scarto > toll && iter < itmax

x1=cos(x0); % aggiorno x0 con una nuova variabile

iter=iter+1; % devo aggiornare la variabile iter

scarto=abs(x1-x0); %adesso lo scarto lo valuto veramente

x0=x1;

disp(x1); % mostra il valore trovato in ogni singola iterazione

disp(iter); % mostra il numero di iterazione

disp(scarto); % mostra lo scarto

end

SCRIPT GENERALE PER LO SCHEMA DI PUNTO FISSO

Devo definire una function handle associata alla funzione di punto fisso (così che possa essere sia coseno, sia seno, sia un

polinomio di secondo grado, qualsiasi funzione quindi).

Preallocazione di memoria: precedentemente dò spazio alla memoria per questo vettore

Per fare il grafico in scala semi logaritmica sull’asse delle y il comando è semilogy.

Per fare il grafico in scala semi logaritmica sull’asse delle x il comando è semilogx.

Per fare il grafico in scala logaritmica su entrambi gli assi è loglog.

clear % elimino tutte le variabili

close all % per le figure

g=@(x) cos (x); % function handle

x0=1;

toll=1.e-10; % tolleranza

itmax=100; % numero massimo di iterazioni

scarto=2*toll; % definisco lo scarto

% dopo voglio fare un grafico di convergenza per capire come decrescono gli

% scarti ad ogni iterazione, se il metodo converge o no (quindi esplodono)

iter=0;

vettscarti=zeros(itmax,1); % crea una matrice di tutti 0 in base agli indici che metto in ()

xold=x0;

while scarto > toll && iter < itmax

xnew=g(xold);

iter=iter+1;

scarto=abs(xnew-xold); % valuto lo scarto

vettscarti(iter)=scarto; %salvo lo scarto nella componente iter del vettore vetscarti

xold=xnew;

end

% taglio il vettore prendendo solo le prime iter componenti (quelle che mi

% interessano)

vettscarti=vettscarti(1:iter); %taglio il vettore in base a quello che mi serve a me

%%%%%%%%%%%%%%% finita la parte dell'algoritmo %%%%%%%%%%%%%%%%%%%%%%%

disp(xnew)

disp(iter)

%%%%%%%%%%%%%%% faccio un grafico di convergenza %%%%%%%%%%%%%%%%%%%%%%

% sull'asse delle ascisse ci saranno le iterazioni fatte mentre sull'asse

% delle ordinate gli scarti a ogni iterazione

% in scala semi logaritmica sull’asse delle ordinate

% mi aspetto che se lo schema converge linearmente (p=1) avrò una retta

% se lo schema converge quadraticamente (newton raphson p=2) avrò una curva

vettiter=1:iter;

semilogy(vettiter,vettscarti,'linewidth',2)

xlabel('iterazioni fatte')

ylabel('scarto a ogni iterazione')

title('Grafico di convergenza')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure %cosi ne creo un'altra e non la sovrascrivo

a=0; b=2; % estremi dell'intervallo per fare il grafico della funzione

fplot(g,[a,b]) % per fare il grafico della funzione

hold on

plot ([a,b],[a,b],'linewidth',2) % per tracciare la bisettrice

LEZIONE 31 MARZO

FUNCTION

Le function sono simili agli script ma sono più duttili.

Caratteristiche SCRIPT FUNCTION

● ●

all’inizio metto tutti i dati che mi servono per creo qualcosa di più generico che può essere

risolvere un problema utilizzato in tutti gli script che voglio in maniera più

● lo script mi dà i risultati di questo problema semplice rispetto a dover fare 100 script

leggermente diversi tra loro

Per capire l’importanza delle function supponiamo che debba lavorare con una funzione matematica f(x) che abbia però diversi

valori a seconda di dove varia la x:

f(x) = x per x > 0

f(x) = -x per -1 < x < 1

f(x) = x^2 per x < -1 …

In questo caso non posso utilizzare una function di tipo handle, non posso scrivere f = @ (x) perché la mia funzione a

seconda di come varia x assumerà un valore diverso.

Allora io ho bisogno di scrivere un sottoprogramma (denominato function) che mi permette di dare in input 1 o + variabili, nel

caso particolare di questa funzione mi interessa dargli la x e il risultato sia la y (che dipende da x). Quindi posso scrivere un

sottoprogramma di dire se x > 0 la f(x) deve valere x, se 1 < x < 1 la f(x) deve valere – x altrimenti varrà x^2.

Questa struttura se la facessi all’interno di uno script, dato che devo richiamare la x più volte dovrei ripetere le stesse istruzioni in

più parti dello script e questo mi appesantisce lo script. Se io invece scrivo le istruzioni una sola volta e poi le richiamo quante

volte voglio (attraverso la function) mi velocizzo il problema.

Come va strutturata una function?

Abbiamo dei dati input, abbiamo un algoritmo (una funzione matematica compli

Dettagli
A.A. 2022-2023
57 pagine
SSD Scienze matematiche e informatiche MAT/08 Analisi numerica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher beatricecarrara 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à Università degli Studi di Padova o del prof Mazzia Annamaria.