Introduzione alla programmazione in MATLAB: Parte 3 (La...
Transcript of Introduzione alla programmazione in MATLAB: Parte 3 (La...
![Page 1: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/1.jpg)
FondamentidiInformaticaIntroduz ionea l la programmazione in MATLAB: Parte 3 (La R icors ione eDebugging)
Prof. Chr i st ian Espos i to
Corso d i Laurea in Ingegner ia Meccanica e Gest iona le (C lasse I )
A .A . 2016/17
IntroduzioneallaprogrammazioneinMATLAB:Parte3
![Page 2: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/2.jpg)
◦Principibase◦ CasoStudio1:Fattoriale◦ CasoStudio2:Fibonacci
◦ DebuggingdeiProgrammiMATLAB
IntroduzioneallaprogrammazioneinMATLAB:Parte3
IntroduzioneallaprogrammazioneinMATLAB:Parte3
OUTLINE
02/61
![Page 3: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/3.jpg)
Ilconcettodiricorsione ininformaticasiriconduceaquellodiinduzionematematica.
Sia P un predicato sull’insieme N dei numerinaturali e sia vero il predicato P(0); se per ogni Kintero, dal predicato P(k) discende la verità diP(k+1) allora P(n) è vero per qualsiasi n.
Principibase(1)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 03/61
![Page 4: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/4.jpg)
Principibase(2)
IntroduzioneallaprogrammazioneinMATLAB:Parte3
La dimostrazione induttiva avviene in due passi:o Passo base : dimostrare P(0)=vero;o Passo induttivo: dimostrare che per ogni
k>0, si ha cheP(k) P(k+1)
Così come nel principio di induzione la verità diP(k+1) discende dalla verità dello stesso predicatoP(k), il calcolo di un funzione ricorsiva avvienemediante il calcolo della stessa funzione in unpasso successivo.
04/61
![Page 5: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/5.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 05/61
![Page 6: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/6.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin(sinotiche0!=1)
𝑛! = %𝑖'
()*
IntroduzioneallaprogrammazioneinMATLAB:Parte3 06/61
![Page 7: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/7.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)
𝑛! = %𝑖'
()*
= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛
IntroduzioneallaprogrammazioneinMATLAB:Parte3 07/61
![Page 8: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/8.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)
𝑛! = %𝑖'
()*
= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛
%𝑖'12
()*
IntroduzioneallaprogrammazioneinMATLAB:Parte3 08/61
![Page 9: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/9.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)
𝑛! = %𝑖'
()*
= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛
%𝑖'12
()*
𝑛 − 1 !
IntroduzioneallaprogrammazioneinMATLAB:Parte3 09/61
![Page 10: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/10.jpg)
CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)
◦Definizionericorsiva(parziale):
𝑛! = 𝑛 − 1 ! ∗ 𝑛
IntroduzioneallaprogrammazioneinMATLAB:Parte3 10/61
![Page 11: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/11.jpg)
CasoStudio:Fattoriale(2)◦Definizionericorsiva:
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
IntroduzioneallaprogrammazioneinMATLAB:Parte3 11/61
![Page 12: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/12.jpg)
CasoStudio:Fattoriale(2)◦Definizionericorsiva:
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
Casobase
IntroduzioneallaprogrammazioneinMATLAB:Parte3 12/61
![Page 13: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/13.jpg)
CasoStudio:Fattoriale(2)◦Definizionericorsiva:
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
Casobase
Ilcasobaseènecessarioaffinchélaricorsione terminiinvecediavereuna
«ricorsione infinita»
IntroduzioneallaprogrammazioneinMATLAB:Parte3 13/61
![Page 14: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/14.jpg)
CasoStudio:Fattoriale(2)◦Definizionericorsiva:
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
Casobase
Ilcasobaseènecessarioaffinchélaricorsione terminiinvecediavereuna
«ricorsione infinita»
Nelnostroesempio,sen èugualea0,alloralafunzionerestituirà1(datoche0!=1)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 14/61
![Page 15: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/15.jpg)
CasoStudio:Fattoriale(2)◦Definizionericorsiva:
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
Versionepiùsemplicedelladefinizione
IntroduzioneallaprogrammazioneinMATLAB:Parte3 15/61
![Page 16: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/16.jpg)
CasoStudio:Fattoriale(3)◦ CodiceMATLAB
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
function [n_fact] = fattoriale_ricorsivo(n)if n == 0
n_fact = 1;else
n_fact = fattoriale_ricorsivo(n - 1) * n; end
end
IntroduzioneallaprogrammazioneinMATLAB:Parte3 16/61
![Page 17: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/17.jpg)
CasoStudio:Fattoriale(3)◦ CodiceMATLAB
𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0
function [n_fact] = fattoriale_ricorsivo(n)if n == 0
n_fact = 1;else
n_fact = fattoriale_ricorsivo(n - 1) * n; end
end
Invocazionericorsiva
IntroduzioneallaprogrammazioneinMATLAB:Parte3 17/61
![Page 18: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/18.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 18/61
![Page 19: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/19.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 19/61
![Page 20: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/20.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 20/61
![Page 21: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/21.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 21/61
![Page 22: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/22.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
2 * fattoriale_ricorsivo(1)
1 * fattoriale_ricorsivo(0)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 22/61
![Page 23: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/23.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
2 * fattoriale_ricorsivo(1)
1 * fattoriale_ricorsivo(0)
1 (Casobaseà 0!=1)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 23/61
![Page 24: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/24.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
2 * fattoriale_ricorsivo(1)
1 * fattoriale_ricorsivo(0)
1(Casobaseà 0!=1)
Output
1
IntroduzioneallaprogrammazioneinMATLAB:Parte3 24/61
![Page 25: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/25.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
2 * fattoriale_ricorsivo(1)
1 * 1
Output
1
IntroduzioneallaprogrammazioneinMATLAB:Parte3 25/61
![Page 26: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/26.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 * fattoriale_ricorsivo(3)
3 * fattoriale_ricorsivo(2)
2 * 1
Output
2
IntroduzioneallaprogrammazioneinMATLAB:Parte3 26/61
![Page 27: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/27.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
fattoriale_ricorsivo(4)
4 *
Output
246
IntroduzioneallaprogrammazioneinMATLAB:Parte3 27/61
![Page 28: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/28.jpg)
CasoStudio:Fattoriale(4)◦ Dietrolequinte...
>> f = fattoriale_ricorsivo(4)
f =24
IntroduzioneallaprogrammazioneinMATLAB:Parte3 28/61
![Page 29: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/29.jpg)
CasoStudio:Fibonacci(1)◦ Nella successione di Fibonacci, ogni valore Fib(n)(n >= 0) è espresso come la somma dei dueprecedenti valori◦ Si noti che Fib(0) = 0 e Fib(1) = 1
◦Definizionericorsiva:
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
0, 1, 1, 2, 3, 5, 8, 13, 21, …
IntroduzioneallaprogrammazioneinMATLAB:Parte3 29/61
![Page 30: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/30.jpg)
CasoStudio:Fibonacci(2)◦Definizionericorsiva:
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
IntroduzioneallaprogrammazioneinMATLAB:Parte3 30/61
![Page 31: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/31.jpg)
CasoStudio:Fibonacci(2)◦Definizionericorsiva:
Casibase
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
IntroduzioneallaprogrammazioneinMATLAB:Parte3 31/61
![Page 32: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/32.jpg)
CasoStudio:Fibonacci(2)◦Definizionericorsiva:
Versionepiùsemplicedelladefinizione
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
IntroduzioneallaprogrammazioneinMATLAB:Parte3 32/61
![Page 33: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/33.jpg)
CasoStudio:Fibonacci(3)◦ CodiceMATLAB
function [valore] = fibonacci_ricorsivo(n)if n == 0
valore = 0;elseif n == 1;
valore = 1;else
valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end
end
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
IntroduzioneallaprogrammazioneinMATLAB:Parte3 33/61
![Page 34: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/34.jpg)
CasoStudio:Fibonacci(3)◦ CodiceMATLAB
function [valore] = fibonacci_ricorsivo(n)if n == 0
valore = 0;elseif n == 1;
valore = 1;else
valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end
end
𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1
𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2
Invocazioniricorsive
IntroduzioneallaprogrammazioneinMATLAB:Parte3 34/61
![Page 35: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/35.jpg)
CasoStudio:Fibonacci(3)◦ CodiceMATLAB
◦ Esempid’uso
function [valore] = fibonacci_ricorsivo(n)if n == 0
valore = 0;elseif n == 1;
valore = 1;else
valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end
end
>> fibonacci_ricorsivo(0)ans =
0>> fibonacci_ricorsivo(4)ans =
3>> fibonacci_ricorsivo(8)ans =
21
IntroduzioneallaprogrammazioneinMATLAB:Parte3 35/61
![Page 36: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/36.jpg)
Quandousarelaricorsione◦ La ricorsione deve essere evitata quando esiste unasoluzione iterativa ovvia, e in situazioni in cui leprestazioni del sistema sono un elemento critico.
◦ Algoritmi che per loro natura sono ricorsivi piuttostoche iterativi dovrebbero essere formulati conprocedure ricorsive. Ad esempio, considerare chealcune strutture dati sono inerentemente ricorsive:◦ Struttureadalbero◦ Sequenze◦ …..
IntroduzioneallaprogrammazioneinMATLAB:Parte3 36/61
![Page 37: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/37.jpg)
Debugging(1)◦ Il debugging (o semplicemente debug), ininformatica, indica l'attività che consistenell'individuazione da parte del programmatoredella porzione di software affetta da errore (bug).◦ L’editor che mette a disposizione MATLAB per lascrittura degli M-file contiene anche unDebugger, che ha lo scopo di supportare ilprogrammatore durante il debugging.◦ Va detto che i programmi MATLAB sonogeneralmente brevi, e non richiedono undebugger a meno non siano di grandi dimensioni.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 37/61
![Page 38: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/38.jpg)
Debugging(2)◦ Una prima tecnicadi debugging è lamodalità cella, dausare con gli script.
◦ Consiste nel raggruppare uninsieme di comandi in una cella, ilcui inizio è stabilito dal doppiopercentuale.
◦ Una volta definite le celle possono essere valutatesingolarmente, passare da una cella ad un’altra evalutare l’intero programma.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 38/61
![Page 39: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/39.jpg)
Debugging(3)◦ Consideriamo il seguente esempio:
◦ Se digitiamo e salviamo questo file, possiamonotare che esso è stato suddiviso in tre porzioni.
%%clear, clc;x = linspace(0, 10, 300);%% Funzione Quadraticay1 = 2.*x.^2 + 1.*x + 3;%% Funzione Cubicay2 = 4.*x.^3-2.*x.^2 + 3;
IntroduzioneallaprogrammazioneinMATLAB:Parte3 39/61
![Page 40: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/40.jpg)
Debugging(3)◦ Consideriamo il seguente esempio:
◦ Se digitiamo e salviamo questo file, possiamonotare che esso è stato suddiviso in tre porzioni.
%%clear, clc;x = linspace(0, 10, 300);%% Funzione Quadraticay1 = 2.*x.^2 + 1.*x + 3;%% Funzione Cubicay2 = 4.*x.^3-2.*x.^2 + 3;
IntroduzioneallaprogrammazioneinMATLAB:Parte3 40/61
![Page 41: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/41.jpg)
Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:
Esegue tutto loscript.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 41/61
![Page 42: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/42.jpg)
Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:
Esegue solo la cella sele-zionata, o corrente.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 42/61
![Page 43: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/43.jpg)
Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:
Sposta la selezione allaprossima cella.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 43/61
![Page 44: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/44.jpg)
Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:
Esegue la cella attual-mente sezionata, e siposizione alla successiva.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 44/61
![Page 45: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/45.jpg)
Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:
Esegue tutto lo script emisura il suo tempo diesecuzione.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 45/61
![Page 46: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/46.jpg)
Debugging(5)◦ La modalità Debug è un altro meccanismo persupportare il debugging e consiste nel collocareall’interno dell’M-file i cosiddetti breakpoints:◦ Un punto all’interno del programma in corrispondenzadel quale l’esecuzione si interrompe temporaneamentein modo che il programmatore possa esaminare i valoricorrenti delle variabili.
◦ L’editor di MATLAB mette a disposizione unapposito menù per la gestione dei breakpointsall’interno di un programma (loro creazione e/ocancellazione).
IntroduzioneallaprogrammazioneinMATLAB:Parte3 46/61
![Page 47: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/47.jpg)
Debugging(6)
Cancella tutti i breakpoints nel pro-gramma.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 47/61
![Page 48: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/48.jpg)
Debugging(6)
Inserisce o rimuove un breakpointalla riga corrente (ovvero dove ècollocato il cursore).
IntroduzioneallaprogrammazioneinMATLAB:Parte3 48/61
![Page 49: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/49.jpg)
Debugging(6)
Abilita, o disabilita, il breakpointcollocato alla riga corrente.Quando un breakpoint è dis-abilitato, non è consideratoquando il programma è eseguito.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 49/61
![Page 50: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/50.jpg)
Debugging(6)
La considerazione di un breakpointpuò essere condizionata allaverifica di una determinatacondizione, dati i valori correntidelle variabili. La condizione èvalutata prima dell’esecuzionedella riga del breakpoint.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 50/61
![Page 51: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/51.jpg)
Debugging(6)
Strategie di gestione di eventualierrori di programmazione quandol’M-file viene eseguito.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 51/61
![Page 52: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/52.jpg)
Debugging(7)
Quando un breakpoint è collocatoin una riga, l’editor lo segnala conun pallino rosso.
◦ Se scegliamo di eseguire lo script vediamo cheal punto del breakpoint si ha un’interruzione.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 52/61
![Page 53: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/53.jpg)
Debugging(7)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 53/61
![Page 54: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/54.jpg)
Debugging(7)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
Continuare l’esecuzione fino alprossimo breakpoint o la fine delprogramma.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 54/61
![Page 55: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/55.jpg)
Debugging(7)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
Eseguire solo la prossima riga.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 55/61
![Page 56: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/56.jpg)
Debugging(7)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
Eseguire la prossima riga, edentrare nel codice dell’eventualefunzione chiamata, oppureeseguire la funzione fino ad uscireda essa.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 56/61
![Page 57: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/57.jpg)
Debugging(7)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 57/61
![Page 58: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/58.jpg)
Debugging(7)
IntroduzioneallaprogrammazioneinMATLAB:Parte3 58/61
![Page 59: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/59.jpg)
Debugging(8)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
Eseguire fino alla riga che contieneil cursore.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 59/61
![Page 60: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/60.jpg)
Debugging(9)
◦Appare un menù così che il programmatorepuò scegliere cosa fare.
Interrompere il debugging.
IntroduzioneallaprogrammazioneinMATLAB:Parte3 60/61
![Page 61: Introduzione alla programmazione in MATLAB: Parte 3 (La …cesposito/materiale/lezioni/Lezione... · 2016. 11. 21. · Fondamenti di Informatica Introduzione alla programmazione in](https://reader036.fdocuments.net/reader036/viewer/2022071117/60019c96bd98a45f78229402/html5/thumbnails/61.jpg)
Riferimenti• Capitolo4• Paragrafi8[DebuggingdeiprogrammidiMatlab].
61/61IntroduzioneallaprogrammazioneinMATLAB:Parte3