www.unlock-pdf.com esercitazione 1 - studio di funzione

Upload: jjajj

Post on 30-May-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    1/34

    Esercitazioneperilcorsodi

    CalcoloNumerico

    Prof.G.Zilli

    Metodiperlarisoluzionedi

    equazioninonlineari

    EmanueleDeVillaBais

    615803

    Laureainingegneriaaerospaziale

    a.a.20092010

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    2/34

    1

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    3/34

    2

    Indice

    1. Testodellaesercitazione 4

    2. Introduzione 5

    3. Approssimazionedellaradice 7 3.1 MetododiNewton-Raphson 7

    3.2 Metododellatangentefissa 8

    3.3 Metododellasecantevariabile 10

    3.4 Metododellasecantefissa 11

    3.5 Metododellabisezione 13

    3.6 Metododelpuntofisso 14

    3.7 Confrontodeimetodi 16

    4. CodiceMatlab 17

    4.1 Programmaprincipale(stimaRadice) 17

    4.2 MetododiNewton-Raphson(newton) 22

    4.3 Metododellatangentefissa(tanfis) 23

    4.4 Metododellasecantevariabile(secvar) 24 4.5 Metododellasecantefissa(secfis) 25

    4.6 Metododellabisezione(bisez) 27

    4.7 Metododelpuntofisso(puntfis) 28

    4.8 Altrefunzioni 29

    5. Uscitadelprogramma 30

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    4/34

    3

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    5/34

    4

    1. TestodellaesercitazioneDopoaverdimostratoesistenzaedunicitdellasoluzione inI,si risolva,utilizzandoil linguaggio

    MatLab,l'equazionef(x)=0con:

    f(x)=

    3x

    2

    1+

    log(x), I=

    [0.2,1].

    Siapplichino,ascelta,almeno3traisuguentiimetodi:

    1. Newton-Raphson(edellatangentefissa);2. secantevariabile(edellasecantefissa);3. bisezione;4. puntofisso.

    Siprendax0=1comepuntoiniziale.Peri2metodidellesecantisiprendax1ottenutoconilmetodo

    diNewton-Raphson.Contuttiimetodi,calcolarel'approssimazionexkdellaradiceusandoiltestdi

    arrestosulloscarto:sn=|xn+1-xn|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    6/34

    5

    2. IntroduzioneConsideriamolafunzione:

    f(x) = 3x21+ log(x), I= [0.2,1].

    OsservochelafunzionecontinuanellintervalloIpoichcompostadifunzionicontinue,inoltre

    poichnegliestremidellintervallolafunzionevale:

    f(0.2) = -2.49

    f(1) = 2

    perilteoremadituttiivalorihoalmenounozeroin I.Questozerounicoperchlafunzione

    strettamentecrescentein Idatoche:

    f ' (x) = 6x +1

    x> 0, x I.

    Ilgraficodellafunzionenellintervallo I,riportatoinFigura2.1,confermavisivamentequanto

    appenatrovateed,inoltre,mostrachelaradicecompresatra 0.6e0.8.

    Inseguitosonoriportatiivaloridixeyin24puntidellintervallo I

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    7/34

    6

    xf(x)

    0.200000-2.489438

    0.234783-2.283727

    0.269565-2.092949

    0.304348-1.911701

    0.339130-1.736342

    0.373913-1.564299

    0.408696-1.393688

    0.443478-1.223088

    0.478261-1.051399

    0.513043-0.877754

    0.547826-0.701457

    0.582609-0.521941

    0.617391-0.338736

    0.652174-0.151452

    0.6869570.040244

    0.7217390.236631

    0.7565220.4379510.7913040.644415

    0.8260870.856204

    0.8608701.073477

    0.8956521.296375

    0.9304351.525023

    0.9652171.759532

    1.0000002.000000

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    8/34

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    9/34

    8

    3.2 Metododellatangentefissa

    Ilmetododellatangentefissacrealasuccessione:

    xn+1

    = xn f(xn )

    f' (x0),

    n = 0, 1, 2...

    a partire dalla stima iniziale

    x0 della radice. Linterpretazione geometrica del metodo della

    tangente fissa suggerisce che la successione

    xn monotona decrescente. Lapplicazione del

    metododellatangentefissafornisceirisultatidella Tabella3.2.

    nx_nf(x_n)s_n

    01.0000000000000002.000e+002.857e-01

    10.7142857142857141.941e-012.773e-02

    20.6865514273890363.798e-025.426e-03

    30.6811250783592697.785e-031.112e-03

    40.6800129646343021.609e-032.299e-04

    50.6797830387975673.333e-044.762e-05

    60.6797354177695526.907e-059.867e-06

    70.6797255511312741.431e-052.044e-06

    80.6797235066993162.965e-064.236e-07

    90.6797230830729776.145e-07NaN

    Tabella3.2.:processodiconvergenzadelmetododellatangentefissa.

    Utilizzandogliscartipossibilestimarelacostanteasintoticacome:

    M =

    sn+1

    sn

    , n = 0,1,2,...

    Applicandolarelazionepern=0,1,.,8siottengonoivalori:0.097,0.196,0.205,0.207,,0.207

    dicuilultimoinottimoaccordoconlastima:

    M = 1f' ()

    f' (x0)

    = 1f' (x

    9)

    f' (x0)

    = 0.207

    dovesiutilizzata

    x9comemiglioreapprossimazionenotadellaradice

    pervalutarela

    derivataprimadellafunzione.Possoquindiaffermarechelordinediconvergenzadelmetodo

    lineare(p=1).

    DiconseguenzalavelocitdiconvergenzaRrisulta:

    R = logM = 0.683588

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    10/34

    9

    Possoorafacilmenteapprossimareilnumerodiiterazioninecessarieperavere

    |en|/|e0|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    11/34

    10

    3.3 Metododellasecantevariabile

    Ilmetododellasecantevariabilecrealasuccessione:

    xn+1

    = xn

    f(xn)

    hn

    con

    hn =f(xn ) f(xn1

    )

    xn x

    n1

    ,

    n = 0, 1, 2...

    apartiredallastimainiziale

    x0dellaradice.Laprimaiterazionepertrovare

    x1,necessarioperil

    calcolo di

    hn, effettuata tramite ilmetododiNewton-Raphson. Lapplicazionedelmetodo

    dellasecantevariabilefornisceirisultatidellaTabella3.3.

    n x_n f(x_n) h_n s_n

    01.0000000000000002.000e+007.000e+002.857e-01

    10.7142857142857141.941e-016.321e+003.072e-02

    20.6835698370595822.138e-025.625e+003.801e-0330.6797692350481112.567e-045.557e+004.620e-05

    40.6797230339007633.416e-075.550e+006.155e-08

    50.6797229723512165.461e-124.166e+03NaN

    Tabella3.3.:processodiconvergenzadelmetododellasecantevariabile.

    Utilizzandogliscartipossibilestimarelacostanteasintoticacome:

    M =

    sn+1

    sn

    1.6181 ,n =

    0,1,2,...

    Applicandolarelazionepern=0,1,.,5siottengonoivalori:0.233,1.065,0.318,0.637;

    considerandochepossoscartareiprimiduevalori(poichhoutilizzatoilmetododiNewton

    Raphsonperlaprimaiterazione)ecalcolandounastimapiprecisadiM:

    M=1

    2

    f' ' ()

    f' ()

    0.618

    =

    1

    2

    f' ' (x5)

    f' (x5)

    0.618

    = 0.519

    dovesiutilizzata

    x5 comemiglioreapprossimazionenotadellaradice

    pervalutareladerivataprimaesecondadellafunzione.Osservocomeilvaloreesattodi Mstianellintervallo[0.318,0.637].Effettuandoinoltreunulterioreiterazioneutilizzandogliscartiottengounvalore

    diMparia0.458.

    Possoquindiaffermareche,per

    n,Mvale0.519echequindiilmetodohaordinedi

    convergenzasuperlineare(p=1.6181).

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    12/34

    11

    3.4 Metododellasecantefissa

    Ilmetododellasecantefissacrealasuccessione:

    xn+1

    = xn

    f(xn)

    hn

    con

    hn =f(x

    1) f(x

    0)

    x1 x

    0

    ,

    n = 0, 1, 2...

    apartiredallastimainiziale

    x0dellaradice.Laprimaiterazionepertrovare

    x1,necessarioperil

    calcolo di

    hn, effettuata tramite ilmetododiNewton-Raphson. Lapplicazionedelmetodo

    dellasecantefissafornisceirisultatidellaTabella3.4.

    n x_n f(x_n) s_n

    01.0000000000000002.000e+002.857e-01

    10.7142857142857141.941e-013.072e-02

    20.6835698370595822.138e-023.382e-0330.6801877185078572.580e-034.081e-04

    40.6797795971760043.142e-044.972e-05

    50.6797298785518823.833e-056.064e-06

    60.6797238147637904.675e-067.397e-07

    70.6797230751087885.703e-07NaN

    Tabella3.4.:processodiconvergenzadelmetododellasecantefissa.

    Utilizzandogliscartipossibilestimarelacostanteasintoticacome:

    M =

    sn+1

    sn

    , n = 0,1,2,...

    Applicandolarelazionepern=0,1,.,7siottengonoivalori:0.108,0.110,0.121,0.122,,0.122

    dicuilultimoinottimoaccordoconlastima:

    M = 1f' ()

    hn

    = 1f' (x

    7)

    hn

    = 0.122

    dovesiutilizzata

    x7comemiglioreapprossimazionenotadellaradice

    pervalutarela

    derivataprimadellafunzione.Possoquindiaffermarechelordinediconvergenzadelmetodo

    lineare(p=1).

    DiconseguenzalavelocitdiconvergenzaRrisulta:

    R = logM = 0.913707

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    13/34

    12

    Possoorafacilmenteapprossimareilnumerodiiterazioninecessarieperavere

    |en|/|e0|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    14/34

    13

    3.5 Metododibisezione

    Ilmetododibisezioneadogniiterazionesupponecomeradiceilpuntomediodellintervallo

    dato,perpoivalutareinqualedeidueintervallicosottenutisitrovalaveraradice,equindi

    ripeteloperazioneperilnuovointervallo.Lapplicazionedelmetododellatangentefissa

    fornisceirisultatidellaTabella3.5.

    n x_n low_x up_x f(x_n)s_n

    00.6000000000000000.2000000000000001.000000000000000-4.308e-012.000e-01

    10.8000000000000000.6000000000000001.0000000000000006.969e-011.000e-01

    20.7000000000000000.6000000000000000.8000000000000001.133e-015.000e-02

    30.6500000000000000.6000000000000000.700000000000000-1.633e-012.500e-02

    40.6750000000000000.6500000000000000.700000000000000-2.617e-021.250e-02

    50.6875000000000000.6750000000000000.7000000000000004.328e-026.250e-03

    60.6812500000000000.6750000000000000.6875000000000008.479e-033.125e-03

    70.6781250000000000.6750000000000000.681250000000000-8.863e-031.563e-03

    80.6796875000000000.6781250000000000.681250000000000-1.969e-047.813e-04

    90.6804687500000000.6796875000000000.6812500000000004.140e-033.906e-04

    100.6800781250000000.6796875000000000.6804687500000001.971e-031.953e-04

    110.6798828125000000.6796875000000000.6800781250000008.871e-049.766e-05

    120.6797851562500000.6796875000000000.6798828125000003.451e-044.883e-05

    130.6797363281250000.6796875000000000.6797851562500007.412e-052.441e-05

    140.6797119140625000.6796875000000000.679736328125000-6.137e-051.221e-05

    150.6797241210937500.6797119140625000.6797363281250006.375e-066.104e-06

    160.6797180175781250.6797119140625000.679724121093750-2.750e-053.052e-06

    170.6797210693359370.6797180175781250.679724121093750-1.056e-051.526e-06

    180.6797225952148440.6797210693359370.679724121093750-2.093e-067.629e-07

    190.6797233581542970.6797225952148440.6797241210937502.141e-063.815e-07

    200.6797229766845700.6797225952148440.6797233581542972.405e-08NaN

    Tabella3.5.:processodiconvergenzadelmetododibisezione.

    Utilizzandogliscartipossibilestimarelacostanteasintoticacome:

    M =

    sn+1

    sn

    , n = 0,1,2,...

    Applicandolarelazionepern=0,1,.,20siottengonoivalori: 0.500,0.500,,0.500;risultato

    perfettamenteinaccordocolmetododibisezione,chedimezzalintervalloadogniiterazione.Possoquindiaffermarechelordinediconvergenzadelmetodolineare( p=1).

    LavelocitdiconvergenzaRrisultaquindi:

    R = logM = 0.301030

    Possoorafacilmenteapprossimareilnumerodiiterazioninecessarieperavere

    |en|/|e0|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    15/34

    14

    3.6 Metododipuntofisso

    Ilmetododipuntofissocrealasuccessione:

    xn+1

    = g(xn),

    n = 0, 1, 2...

    apartiredallastimainiziale

    x0dellaradice.

    dettafunzionedipuntofisso.

    3.6.1 Metododipuntofissocon

    g(x)= exp(3x2 +1)

    Utilizzandolafunzionedipuntofissoconsigliata:

    g(x) = exp(3x2+1)

    nonsiottieneconvergenza,poichilvaloredi

    oscillatra:

    x1= 0.000000000641528e

    x2= 2.718281828459046

    3.6.2 Metododipuntofissocon

    g(x) =1 log(x)

    3

    Utilizzandolafunzionedipuntofissoconsigliata:

    g(x) =1 log(x)

    3

    siottengonoirisultatidellaTabella3.6.

    n x_n g(x_n) s_n

    01.0000000000000005.774e-014.226e-01

    10.5773502691896267.186e-011.413e-01

    20.7186343864891836.659e-015.270e-0230.6659335686060506.847e-011.880e-02

    40.6847299614335956.779e-016.809e-03

    50.6779210217837766.804e-012.453e-03

    60.6803735456525496.795e-018.852e-04

    70.6794883613910066.798e-013.193e-04

    80.6798076134057716.797e-011.152e-04

    90.6796924408151866.797e-014.155e-05

    100.6797339862147366.797e-011.499e-05

    110.6797189993157536.797e-015.406e-06

    120.6797244055541916.797e-011.950e-06

    130.6797224553478316.797e-017.035e-07

    140.6797231588496676.797e-01NaN

    Tabella3.6.:processodiconvergenzadelmetododipuntofisso.

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    16/34

    15

    Utilizzandogliscartipossibilestimarelacostanteasintoticacome:

    M =

    sn+1

    sn

    , n = 0,1,2,...

    Applicandolarelazionepern=0,1,.,14siottengonoivalori:0.334,0.373,,0.361dicuilultimoinottimoaccordoconlastima:

    M= g' () = g' (x14) = 0.361

    dovesiutilizzata

    x14comemiglioreapprossimazionenotadellaradice

    pervalutare

    laderivataprimadellafunzionedipuntofisso.Possoquindiaffermarechelordinedi

    convergenzadelmetodolineare(p=1).

    DiconseguenzalavelocitdiconvergenzaRrisulta:

    R = logM = 0.442815

    Possoorafacilmenteapprossimareilnumerodiiterazioninecessarieperavere

    |en|/|e0|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    17/34

    16

    3.7 Confrontodeimetodi

    LaFigura3.7riportainungraficosemilogaritmicoilprocessodiconvergenzadeivarimetodi.

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    18/34

    17

    4. CodiceMatlab

    4.1 Programmaprincipale(stimaRadice)% programma per l'approssimazione della radice f(x)=0%

    % metodi disponibili:% (1) metodo di Newton-Raphson% (2) metodo della tangente fissa% (3) metodo della secante variabile% (4) metodo della secante fissa% (5) metodo di bisezione% (6) metodo del punto fisso%

    % Emanuele De Villa Bais $ 29-Mar-2010 / 08-Apr-2010 $

    % PARAMETRI D'INGRESSO

    % la mia funzione (nome del file Matlab che la contiene)fname = 'fEs1';

    % nome della derivata della funzionedfname = strcat('d', fname);

    % nome della funzione di punto fisso ggname = 'g1Es1'; % oppure g2Es1 (ne ho due da utilizzare)

    % intervallo che contiene la radiceI = [0.2 1.0];

    % stima iniziale della radicex0 = 1.0;

    % imposto i parametri per il test d'arrestotoll = 1e-6; % tolleranza sugli scartinmaxiter = 50; % numero massimo di iterazioni da eseguire

    % scelgo i metodi da utilizzare nella stima della radice

    metodo = [1 1 1 1 1 1]; % dove 1 indica che il metodo viene utilizzato% scelgo se creare il grafico della funzionegraficofunz = 0; % dove 1 indica che il grafico viene realizzato

    % scelgo se creare il grafico degli scartigraficoscar = 1; % dove 1 indica che il grafico viene realizzato

    %%%%%%%%%%%% CODICE %%%%%%%%%%%

    % imposto la eventuale creazione del grafico di f con tabellaif graficofunz == 1 % allore creo il grafico

    npunti = 24; % il numero di punti nell'intervallo Ia = I(1); % estremo inferiore dell'intervallob = I(2); % estremo superiore dell'intervallox = linspace(a, b, npunti); % creo il vettore delle x

    y = feval(fname, x); % creo il vettore delle yfigure(1);plot(x, y, 'k', 'lineWidth', 2); % creo il grafico% k indica il colore della linea (nero in questo caso)% mentre con (lineWidth, n) indico lo spessore della lineatitle('Grafico della funzione', 'fontSize', 14)xlabel('x', 'fontSize', 18) % assegno il nome dell'asse xylabel('y', 'fontSize', 18) % assegno il nome dell'asse xgrid on% inserisco la griglia

    % creo la tabella tabgrafico coi valori di x e f(x)tabgraficfunz = zeros(24, 2); % creo la matrice vuotatabgraficfunz(:, 1) = x; % imposto la colonna di xtabgraficfunz(:, 2) = y; % imposto la colonna di y

    % stampo la tabelladisp(' ')

    disp('valori di x e y nell''intervallo I'), disp(' ')disp(' x f(x)'), disp(' ')tabgraficfunz = sprintf('%10.6f %15.6f \n', tabgraficfunz');disp(tabgraficfunz), disp(' ')

    end

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    19/34

    18

    %%%%%%%%%%%% METODO DI NEWTON-RAPHSON %%%%%%%%%%%if metodo(1)

    % imposto i parametri d'ingresso del metodomoltradice = 1; % la molteplicit della radiceparconv = [toll nmaxiter moltradice];

    % chiamo la function newton.m[nwx, nwconv, nwconvstory] = newton(x0, fname, dfname, parconv);

    % stampo i risultatiif graficofunz == 1 % metto uno spazio tra le due tabelle

    disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...'\\\\\\\\\\\\\\\'])

    disp(['///////////////////////////////////////////////////////' ...'///////////////']), disp(' ')

    enddisp(' ')disp('--------------- METODO DI NEWTON-RAPHSON ---------------')disp(' ')disp(['funzione usata : ', fname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])disp(['molteplicit della radice : r = ', int2str(moltradice)])if nwconv == -1 % ovvero non c' stata convergenza

    messaggio = 'convergenza : no';else

    messaggio = ['convergenza : s (', ...int2str(nwconv), ' iterazioni (n))'];

    enddisp(messaggio), disp(' '), disp(' ')if nwconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n f(x_n) f''(x_n)'...

    ' s_n']), disp(' ')% calcolo gli scarti (ovvero prendo la colonna della matrice% nwconvstory che contiene x_n escluso il primo valore e le% sottraggo la stessa colonna con incluso il primo valore ed% escluso l'ultimo); cos facendo faccio |x_(n+1) - x_n|nwscar = abs(nwconvstory(2:length(nwconvstory), 2) - ...

    nwconvstory(1:length(nwconvstory)-1, 2));% ora posso creare la mia tabellanwtabp = [nwconvstory [nwscar; NaN]]; % p di provvisoria (n.d.t)nwtab = sprintf('%3i %20.15f %13.3e %13.3e %13.3e \n', nwtabp');disp(nwtab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (nwM) per ogni iterazione (vale come per% nwscar la stringa che segue...)nwM = abs(nwscar(2:length(nwscar)))./ ...

    ((abs(nwscar(1:length(nwscar)-1))).^2);% creo la tabella per la costante MtabnwM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', nwM);disp(tabnwM), disp(' ')

    endend

    %%%%%%%%%%%% METODO DELLA TANGENTE FISSA %%%%%%%%%%%

    if metodo(2)

    % imposto i parametri d'ingresso del metodoparconv = [toll nmaxiter];

    % chiamo la function tanfis.m[tfx, tfconv, tfconvstory] = tanfis(x0, fname, dfname, parconv);

    % stampo i risultatiif (graficofunz == 1 || metodo(1))

    disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...'\\\\\\\\\\\\\\\'])

    disp(['///////////////////////////////////////////////////////' ...'///////////////']), disp(' ')

    enddisp(' ')disp('--------------- METODO DELLA TANGENTE FISSA ---------------')

    disp(' ')disp(['funzione usata : ', fname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    20/34

    19

    if tfconv == -1 % ovvero non c' stata convergenzamessaggio = 'convergenza : no';

    elsemessaggio = ['convergenza : s (', ...

    int2str(tfconv), ' iterazioni (n))'];enddisp(messaggio), disp(' '), disp(' ')if tfconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n f(x_n) '...

    ' s_n']), disp(' ')% calcolo gli scartitfscar = abs(tfconvstory(2:length(tfconvstory), 2) - ...

    tfconvstory(1:length(tfconvstory)-1, 2));% ora posso creare la mia tabellatftabp = [tfconvstory [tfscar; NaN]]; % p di provvisoria (n.d.t)tftab = sprintf('%3i %20.15f %13.3e %13.3e \n', tftabp');disp(tftab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (tfM) per ogni iterazionetfM = abs(tfscar(2:length(tfscar)))./ ...

    abs(tfscar(1:length(tfscar)-1));% creo la tabella per la costante MtabtfM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', tfM);disp(tabtfM), disp(' ')

    end

    end

    %%%%%%%%%%%% METODO DELLA SECANTE VARIABILE %%%%%%%%%%%if metodo(3)

    % imposto i parametri d'ingresso del metodoparconv = [toll nmaxiter];

    % chiamo la function secvar.m[svx, svconv, svconvstory] = secvar(x0, fname, dfname, parconv);

    % stampo i risultatiif (graficofunz == 1 || metodo(1) || metodo(2))disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...

    '\\\\\\\\\\\\\\\'])disp(['///////////////////////////////////////////////////////' ...

    '///////////////']), disp(' ')enddisp(' ')disp('--------------- METODO DELLA SECANTE VARIABILE ---------------')disp(' ')disp(['funzione usata : ', fname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])if svconv == -1 % ovvero non c' stata convergenza

    messaggio = 'convergenza : no';else

    messaggio = ['convergenza : s (', ...int2str(svconv), ' iterazioni (n))'];

    enddisp(messaggio), disp(' '), disp(' ')if svconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n f(x_n) h_n'...' s_n']), disp(' ')

    % calcolo gli scartisvscar = abs(svconvstory(2:length(svconvstory), 2) - ...

    svconvstory(1:length(svconvstory)-1, 2));% ora posso creare la mia tabellasvtabp = [svconvstory [svscar; NaN]]; % p di provvisoria (n.d.t)svtab = sprintf('%3i %20.15f %13.3e %13.3e %13.3e \n', svtabp');disp(svtab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (svM) per ogni iterazionesvM = abs(svscar(2:length(svscar)))./ ...

    ((abs(svscar(1:length(svscar)-1))).^1.6181);% creo la tabella per la costante MtabsvM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', svM);

    disp(tabsvM), disp(' ')endend

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    21/34

    20

    %%%%%%%%%%%% METODO DELLA SECANTE FISSA %%%%%%%%%%%if metodo(4)

    % imposto i parametri d'ingresso del metodoparconv = [toll nmaxiter];

    % chiamo la function secfis.m[sfx, sfconv, sfconvstory] = secfis(x0, fname, dfname, parconv);

    % stampo i risultati

    if (graficofunz == 1 || metodo(1) || metodo(2) || metodo(3))disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...

    '\\\\\\\\\\\\\\\'])disp(['///////////////////////////////////////////////////////' ...

    '///////////////']), disp(' ')enddisp(' ')disp('--------------- METODO DELLA SECANTE FISSA ---------------')disp(' ')disp(['funzione usata : ', fname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])if sfconv == -1 % ovvero non c' stata convergenza

    messaggio = 'convergenza : no';else

    messaggio = ['convergenza : s (', ...

    int2str(sfconv), ' iterazioni (n))'];enddisp(messaggio), disp(' '), disp(' ')if sfconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n f(x_n) '...

    ' s_n']), disp(' ')% calcolo gli scartisfscar = abs(sfconvstory(2:length(sfconvstory), 2) - ...

    sfconvstory(1:length(sfconvstory)-1, 2));% ora posso creare la mia tabellasftabp = [sfconvstory [sfscar; NaN]]; % p di provvisoria (n.d.t)sftab = sprintf('%3i %20.15f %13.3e %13.3e \n', sftabp');disp(sftab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (sfM) per ogni iterazionesfM = abs(sfscar(2:length(sfscar)))./ ...

    abs(sfscar(1:length(sfscar)-1));% creo la tabella per la costante MtabsfM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', sfM);disp(tabsfM), disp(' ')

    endend

    %%%%%%%%%%%% METODO DI BISEZIONE %%%%%%%%%%%if metodo(5)

    % imposto i parametri d'ingresso del metodoparconv = [toll nmaxiter];

    % chiamo la function bisez.m[bx, bconv, bconvstory] = bisez(I, fname, parconv);

    % stampo i risultatiif (graficofunz == 1 || metodo(1) || metodo(2) || metodo(3) ||...

    metodo(4))disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...

    '\\\\\\\\\\\\\\\'])disp(['///////////////////////////////////////////////////////' ...

    '///////////////']), disp(' ')enddisp(' ')disp('--------------- METODO DI BISEZIONE ---------------')disp(' ')disp(['funzione usata : ', fname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])if bconv == -1 % ovvero non c' stata convergenza

    messaggio = 'convergenza : no';elsemessaggio = ['convergenza : s (', ...

    int2str(bconv), ' iterazioni (n))'];end

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    22/34

    21

    disp(messaggio), disp(' '), disp(' ')if bconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n low_x'...

    ' up_x f(x_n)'...' s_n']), disp(' ')

    % calcolo gli scartibscar = abs(bconvstory(2:length(bconvstory), 2) - ...

    bconvstory(1:length(bconvstory)-1, 2));% ora posso creare la mia tabella

    btabp = [bconvstory [bscar; NaN]]; % p di provvisoria (n.d.t)btab = sprintf('%3i %20.15f %20.15f %20.15f %13.3e %13.3e \n', btabp');disp(btab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (svM) per ogni iterazionebM = abs(bscar(2:length(bscar)))./ ...

    (abs(bscar(1:length(bscar)-1)));% creo la tabella per la costante MtabbM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', bM);disp(tabbM), disp(' ')

    endend

    %%%%%%%%%%%% METODO DEL PUNTO FISSO %%%%%%%%%%%if metodo(6)

    % imposto i parametri d'ingresso del metodoparconv = [toll nmaxiter];

    % chiamo la function puntfis.m[pfx, pfconv, pfconvstory] = puntfis(x0, gname, parconv);

    % stampo i risultatiif (graficofunz == 1 || metodo(1) || metodo(2) || metodo(3) ||...

    metodo(4) || metodo(5))disp(['\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ...

    '\\\\\\\\\\\\\\\'])disp(['///////////////////////////////////////////////////////' ...

    '///////////////']), disp(' ')enddisp(' ')disp('--------------- METODO DI PUNTO FISSO ---------------')disp(' ')disp(['funzione usata : ', fname])disp(['funzione di punto fisso usata: ', gname])disp(['numero massimo di iterazioni : ', int2str(nmaxiter)])disp(['criterio d''arresto : ', '|s_n| < ', ...

    num2str(toll)])if pfconv == -1 % ovvero non c' stata convergenza

    messaggio = 'convergenza : no';else

    messaggio = ['convergenza : s (', ...int2str(pfconv), ' iterazioni (n))'];

    enddisp(messaggio), disp(' '), disp(' ')if pfconv > 0 % se il metodo converge stampo la convstory

    disp('sintesi del processo di convergenza:'), disp(' ')disp([' n x_n g(x_n) '...

    ' s_n']), disp(' ')

    pfscar = abs(pfconvstory(2:length(pfconvstory), 2) - ...pfconvstory(1:length(pfconvstory)-1, 2));% ora posso creare la mia tabellapftabp = [pfconvstory [pfscar; NaN]]; % p di provvisoria (n.d.t)pftab = sprintf('%3i %20.15f %13.3e %13.3e \n', pftabp');disp(pftab), disp(' ')disp('stima costante di errore M usando il rapporto degli scarti:')disp(' ')% calcolo la costante M (pfM) per ogni iterazione (vale come per% nwscar la stringa che segue...)pfM = abs(pfscar(2:length(pfscar)))./ ...

    (abs(pfscar(1:length(pfscar)-1)));% creo la tabella per la costante MtabpfM = sprintf('%10.3f %10.3f %10.3f %10.3f %10.3f %10.3f \n', pfM);disp(tabpfM), disp(' ')

    endend

    % imposto l'eventuale creazione del grafico degli scartiif (sum(metodo) > 0 && graficoscar == 1) % ho utilizzato almeno un metodo

    figure(2)

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    23/34

    22

    if metodo(1)semilogy(abs(nwscar), '-o', 'lineWidth', 2)hold on

    endif metodo(2)

    semilogy(abs(tfscar), '-ok', 'lineWidth', 2)hold on

    endif metodo(3)

    semilogy(abs(svscar), '-og', 'lineWidth', 2)

    hold onendif metodo(4)

    semilogy(abs(sfscar), '-p', 'lineWidth', 2)hold on

    endif metodo(5)

    semilogy(abs(bscar), '-pk', 'lineWidth', 2)hold on

    endif metodo(6)

    semilogy(abs(pfscar), '-pg', 'lineWidth', 2)endif sum(metodo) == 6 % ovvero se ho utilizzato tutti i metodi

    % inserisco la legendalegend('Newton', 'Tangente fissa', 'Secante variabile',...

    'Secante fissa', 'Bisezione', 'Punto fisso')

    endtitle('Grafico degli scarti', 'fontSize', 14)xlabel('Numero di iterazione', 'fontSize', 18)ylabel('Valore assoluto degli scarti', 'fontSize', 18)

    end

    4.2 MetododiNewton-Raphson(newton)

    function [x, conv, convstory] = newton(x0, fname, dfname, parconv)% [X, CONV, CONVSTORY] = NEWTON(X0, FNAME, DFNAME, PARCONV)% risolve f(x)=0 utilizzando il metodo iterativo di Newton-Raphson con

    % punto iniziale x0.% Il test di arresto utilizzato quello sullo scarto:% |x_(n+1) - x_n| < toll.

    %%%%%%%%%%% PARAMETRI DI INGRESSO %%%%%%%%%%% x0 : valore iniziale della stima della radice.% fname : nome del file Matlab che contiene la funzione f(x)% dfname : nome del file Matlab che contiene la derivata di f(x)% parconv : vettore (1x3) che contiene i parametri per la convergenza% parconv(1): toll% parconv(2): nmaxiter% parconv(3): r% toll : tollerenza desiderata per lo scarto% nmaxiter : numero massimo di iterazioni da effettuare% r : molteplicit della radice

    %%%%%%%%%%% PARAMETRI DI USCITA %%%%%%%%%%

    % x : valore della radice% conv : indica il numero di iterazioni effettuate (niter) se il% metodo converge, -1 se il metodo non converge ( stato% raggiunto il numero massimo di iterazioni desiderato)% convstory : matrici [(niter+1)x4] che tiene traccia del processo% iterativo eseguito:% 1 colonna: valore del numero di iterazione (niter) attuale% 2 colonna: valore della radice x per l'iterazione attuale% 3 colonna: valore di f(x) per l'iterazione attuale% 4 colonna: valore di f'(x) per l'iterazione attuale

    % Emanuele De Villa Bais $ 28-Mar-2010 $

    % stabilisco i parametri d'entratatoll = parconv(1);nmaxiter = parconv(2);r = parconv(3);

    % creo la matrice nulla che conterr la convstoryconvstory = zeros(nmaxiter+1, 4);

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    24/34

    23

    % stabilisco i valori iniziali di x, toll e nxold = x0; % la mia x_nntoll = 2*toll; % la tolleranza iniziale deve essere maggioren = 0;

    % creo il ciclo che calcoler l'approssimazione della radicewhile (ntoll > toll && n

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    25/34

    24

    % stabilisco i valori iniziali di x, toll, n e h_n% nel metodo della tangente fissa h_n costante e vale f'(x0)dfx = feval(dfname, x0); % ecco qui il mio valore h_nxold = x0; % stima iniziale della radicentoll = 2*toll; % la tolleranza iniziale deve essere maggioren = 0;

    % creo il ciclo che calcoler l'approssimazione della radicewhile (ntoll > toll && n

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    26/34

    25

    % calcolo tramite il metodo di Newton-Raphson il valore di x1if (ntoll > toll && n toll && n nmaxiter && ntoll > toll) % non c' stata convergenza

    conv = -1;end

    convstory = convstory(1:n+1, 1:4); % elimino le righe che mi avanzano

    4.5 Metododellasecantefissa(secfis)function [x, conv, convstory] = secfis(x0, fname, dfname, parconv)% [X, CONV, CONVSTORY] = SECFIS(X0, FNAME, DFNAME, PARCONV)% risolve f(x)=0 utilizzando il metodo iterativo della secante fissa% con punto iniziale x0 e x1 calcolato col metodo di Newton-Raphson% Il test di arresto utilizzato quello sullo scarto:% |x_(n+1) - x_n| < toll

    %%%%%%%%%%% PARAMETRI DI INGRESSO %%%%%%%%%%% x0 : valore iniziale della stima della radice.

    % fname : nome del file Matlab che contiene la funzione f(x)% dfname : nome del file Matlab che contiene la derivata di f(x)% parconv : vettore (1x2) che contiene i parametri per la convergenza% parconv(1): toll% parconv(2): nmaxiter% toll : tollerenza desiderata per lo scarto% nmaxiter : numero massimo di iterazioni da effettuare

    %%%%%%%%%%% PARAMETRI DI USCITA %%%%%%%%%%% x : valore della radice% conv : indica il numero di iterazioni effettuate (niter) se il% metodo converge, -1 se il metodo non converge ( stato% raggiunto il numero massimo di iterazioni desiderato)% convstory : matrici [(niter+1)x3] che tiene traccia del processo% iterativo eseguito:% 1 colonna: valore del numero di iterazione (niter) attuale% 2 colonna: valore della radice x per l'iterazione attuale

    % 3 colonna: valore di f(x) per l'iterazione attuale

    % Emanuele De Villa Bais $ 29-Mar-2010 $

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    27/34

    26

    % imposto i parametri d'entratatoll = parconv(1);nmaxiter = parconv(2);

    % creo la matrice nulla che conterr convstoryconvstory = zeros(nmaxiter+1, 3);

    % assegno i valori iniziali di x, toll, n, fx0 e dfx0fx0 = feval(fname, x0);dfx0 = feval (dfname, x0);

    ntoll = 2*toll; % la tolleranza iniziale deve essere maggioren = 0;

    % calcolo tramite il metodo di Newton-Raphson il valore di x1if (ntoll > toll && n

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    28/34

    27

    4.6 Metododibisezione(bisez)function [x, conv, convstory] = bisez(x0, fname, parconv)% [X, CONV, CONVSTORY] = BISEZ(X0, FNAME, PARCONV)% risolve f(x)=0 utilizzando il metodo iterativo della bisezione con% punti iniziali appartenenti all'intervallo I.% Il criterio d'uscita prevede che l'ampiezza dell'intervallo che contiene% la radice sia inferiore a toll

    %%%%%%%%%%% PARAMETRI DI INGRESSO %%%%%%%%%%% x0 : intervallo che contiene i valori a e b.% fname : nome del file Matlab che contiene la funzione f(x)% parconv : vettore (1x2) che contiene i parametri per la convergenza% parconv(1): toll% parconv(2): nmaxiter% toll : tollerenza desiderata per lo scarto% nmaxiter : numero massimo di iterazioni da effettuare

    %%%%%%%%%%% PARAMETRI DI USCITA %%%%%%%%%%% x : valore della radice% conv : indica il numero di iterazioni effettuate (niter) se il% metodo converge, -1 se il metodo non converge ( stato% raggiunto il numero massimo di iterazioni desiderato)% convstory : matrici [(niter+1)x5] che tiene traccia del processo% iterativo eseguito:% 1 colonna: valore del numero di iterazione (niter) attuale% 2 colonna: valore della radice x per l'iterazione attuale% 3 colonna: estremo inferiore dell'intervallo% 4 colonna: estremo superiore dell'intervallo% 5 colonna: valore di f(x) per l'iterazione attuale

    % Emanuele De Villa Bais $ 28-Mar-2010 $

    % stabilisco i parametri d'entratatoll = parconv(1);nmaxiter = parconv(2);

    % creo la matrice nulla che conterr la convstoryconvstory = zeros(nmaxiter+1, 5);

    % stabilisco l'intervallo iniziale, i valori di toll ed na = x0(1);

    b = x0(2);ntoll = b-a;n = 0;

    % creo il ciclo per il calcolo della radicefa = feval(fname, a);fb = feval(fname, b);if fa*fb > 0 % la radice non nell'intervallo I = [a,b]

    disp('L''intervallo iniziale non accettabile')else

    while (ntoll > toll && n 0 % ovvero se f(a)*f(c) > 0 (hanno segno uguale)

    a = c; % la radice si trova tra a e c, quindi pongo b = c

    else% ovvero f(a)*f(c) < 0 (hanno segno opposto)b = c;endntoll = b - a; % controllo l'ampiezza dell'intervallon = n+1;end

    end

    % completo la matrice convstory coi valori dell'ultima iterazionec = 0.5*(b+a);fxlast = feval(fname, c);convstory(n+1, 1:5) = [n, c, a, b, fxlast];

    % definisco i parametri d'uscitax = c; % il valore finale della mia radiceconv = n; % il numero di iterazioni eseguiteif (n > nmaxiter && ntoll > toll) % ovvero non c' stata convergenza

    conv = -1;end

    convstory = convstory(1:n+1, 1:5); % tolgo le righe che mi avanzano

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    29/34

    28

    4.7 Metododipuntofisso(puntfis)function [x, conv, convstory] = puntfis(x0, gname, parconv)% [X, CONV, CONVSTORY] = PUNTFIS(X0, GNAME, PARCONV)% risolve f(x)=0 utilizzando il metodo iterativo del punto fisso con% punto iniziale x0.% Il test di arresto utilizzato quello sullo scarto:% |x_(n+1) - x_n| < toll

    %%%%%%%%%%% PARAMETRI DI INGRESSO %%%%%%%%%%% x0 : valore iniziale della stima della radice.% gname : nome del file Matlab che contiene la funzione g(x)% (funzione di punto fisso)% parconv : vettore (1x2) che contiene i parametri per la convergenza% parconv(1): toll% parconv(2): nmaxiter% toll : tollerenza desiderata per lo scarto% nmaxiter : numero massimo di iterazioni da effettuare

    %%%%%%%%%%% PARAMETRI DI USCITA %%%%%%%%%%% x : valore della radice% conv : indica il numero di iterazioni effettuate (niter) se il% metodo converge, -1 se il metodo non converge ( stato% raggiunto il numero massimo di iterazioni desiderato)% convstory : matrici [(niter+1)x3] che tiene traccia del processo% iterativo eseguito:% 1 colonna: valore del numero di iterazione (niter) attuale% 2 colonna: valore della radice x per l'iterazione attuale% 3 colonna: valore di g(x) per l'iterazione attuale

    % Emanuele De Villa Bais $ 30-Mar-2010 $

    % stabilisco i parametri d'entratatoll = parconv(1);nmaxiter = parconv(2);

    % creo la matrice nulla che conterr convstoryconvstory = zeros(nmaxiter+1, 3);

    % stabilisco i valori iniziali di x, toll e nxold = x0; % stima iniziale della radicentoll = 2*toll; % la tolleranza iniziale deve essere maggiore

    n = 0;% creo il ciclo che calcoler l'approssimazione della radicewhile (ntoll > toll && n

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    30/34

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    31/34

    30

    5. Uscitadelprogramma

    >>stimaRadice

    ---------------METODODINEWTON-RAPHSON---------------

    funzioneusata :fEs1numeromassimodiiterazioni:50

    criteriod'arresto :|s_n|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    32/34

    31

    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    //////////////////////////////////////////////////////////////////////

    ---------------METODODELLASECANTEVARIABILE---------------

    funzioneusata :fEs1

    numeromassimodiiterazioni:50criteriod'arresto :|s_n|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    33/34

    32

    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    //////////////////////////////////////////////////////////////////////

    ---------------METODODIBISEZIONE---------------

    funzioneusata :fEs1

    numeromassimodiiterazioni:50criteriod'arresto :|s_n|

  • 8/9/2019 Www.unlock-PDF.com Esercitazione 1 - Studio Di Funzione

    34/34

    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    //////////////////////////////////////////////////////////////////////

    ---------------METODODIPUNTOFISSO---------------

    funzioneusata :fEs1

    funzionedipuntofissousata:g1Es1numeromassimodiiterazioni:50

    criteriod'arresto :|s_n|