/Homework1

Matlab workbook concerning: Approximation, minimum and maximum points, derivatives, absolute error, residual, conditioning of a problem.

MIT LicenseMIT

Homework1

Workbook concerning: Approximation, minimum and maximum points, derivatives, absolute error, residual, conditioning of a problem.

This is the first part of a project implemented in Matlab. The second part is "Homemork2".

Trace of the problem: Calculate two integers and which are, respectively, the number of characters in your name and the number of characters in your surname. Use these two numbers to create the following function:

Immagine 2021-12-05 105006

This function is your reference function. Choose a certain range [a,b] so that your reference function has exactly 3 zeros, 2 lows, and a single maximum in that range. Tip 1: display (fplot and grid on) the graph of the reference function for example in [-4, -1] and then choose the sub-range [a,b] in which there are exactly three zeros, two lows and one maximum. Tip 2: remember that a function f (x) in Matlab has a vector x as argument and therefore be careful when using the operator. (component-by-component operation). In Matlab:

  1. define the Matlab function that implements your reference function and that you will call funrif;
  2. visualize the graph of the reference function in [a,b], explicitly specifying which interval you have chosen and indicating on the graph (command text) the extremes of the chosen interval, the 3 zeros, the first minimum value and the abscissa of the first minimum (called point of minimum 1), the second minimum value and the abscissa of the second minimum (called the point of minimum 2), the maximum value and the abscissa of the maximum (called the maximum point);
  3. use the Matlab function fzero to determine the 3 zeros of your reference function in [a,b], and consider the values fzero calculated by fzero as the exact solutions; 4.determine an approximation of the 3 zeros, using the bisection method (our bisection function) for the smallest zero, the Secant method (our Secant function) for the central zero and Newton's method (our Newton function) for the greatest zero (tip: use funtool to determine the expression of the derivative of the reference function), with a value of delta_ass that guarantees, in all 3 cases, that the integer part and the first 7 fractional digits are correct;
  4. consider both the absolute error between the bisection approximation and the corresponding exact solution, and the absolute error between the secant approximation and the corresponding exact solution, and the absolute error between Newton's approximation and the corresponding exact solution and check that they are less than the required accuracy (delta_ass), commenting on their value; also calculate the residual for each of the three approximations and comment on the residual values by comparing them with those of the corresponding absolute error and with the required accuracy; looking at the graph of the reference function, say whether, for each of the three zeros, the problem appears well or badly conditioned and then calculate the conditioning index for each of the three zeros;
  5. use the Matlab function fminbnd to determine the two minimum points and the maximum point of your reference function in [a,b], with three calls like: fminbnd (fun, left, right, optimset ('TolX', 1e-10)), and consider the values calculated by fminbnd as the exact solutions (ie as exact values of the two points of minimum and of the point of maximum);
  6. verify that the two minimum points and the maximum point are zeroes of the derivative of your reference function (suggestion: use funtool to determine the expression of the derivative of the reference function), displaying in the same figure both the graph of the function both the graph of its derivative (it may also be useful to use the scaling of the graphics window given by the command axis ([xmin xmax ymin ymax])), and using the fzero to calculate the zeros of the derivative; comment on the results obtained;
  7. determine an approximation of the two minimum points and the maximum point, using, respectively, twice the Fibonacci search method (our function fminfibo) for the two minima, and the Golden search method (our function fmingolden) for the maximum, with a delta_ass value that ensures that the integer part and the first 4 fractional digits are correct;
  8. consider the absolute error between the Golden search approximation and the corresponding exact solution and then the absolute error between the two approximations obtained by the two calls to the Fibonacci search and the two corresponding exact solutions, and verify that they are in all and three minor cases of the required accuracy (delta_ass), commenting on the results;

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Questa è la prima parte di un progetto definito in Matlab. La seconda parte è "Homework2".

Traccia del problema: Calcolate due numeri interi p e q che sono, rispettivamente, il numero di caratteri del vostro nome e il numero di caratteri del vostro cognome. Usate questi due numeri per creare la seguente funzione:

Immagine 2021-12-05 105006

Tale funzione è la vostra funzione di riferimento. Scegliete un certo intervallo in [a,b] modo che la vostra funzione di riferimento abbia esattamente 3 zeri, 2 minimi e un unico massimo in tale intervallo. Consiglio 1: visualizzare ( fplot e grid on) il grafico della funzione di riferimento per esempio in [-4,-1] e poi scegliere il sottointervallo in cui ci sono esattamente tre zeri, due minimi e un massimo.
Consiglio 2: ricordare che una funzione f(x) in Matlab ha come argomento un vettore x e quindi fare attenzione all'uso dell'operatore . (operazione componenente per componente). In Matlab:

  1. definite la function Matlab che implementa la vostra funzione di riferimento e che chiamerete funrif;
  2. visualizzate il grafico della funzione di riferimento in [,b], specificando espicitamente quale intervallo avete scelto e indicando sul grafico (comando text) gli estremi dell'intervallo scelto, i 3 zeri, il primo valore minimo e l'ascissa del primo minimo (detta punto di minimo 1), il secondo valore minimo e l'ascissa del secondo minimo (detta punto di minimo 2), il valore massimo e l'ascissa del massimo (detta punto di massimo);
  3. usate la function Matlab fzero per determinare i 3 zeri della vostra funzione di riferimento in [a,b], e considerate i valori calcolati da fzero come le soluzioni esatte;
  4. determinate un'approssimazione dei 3 zeri, usando il metodo di bisezione (nostra function bisezione) per lo zero più piccolo, il metodo delle Secanti (nostra function Secanti) per lo zero centrale e il metodo di Newton (nostra function Newton) per lo zero più grande (consiglio: usare funtool per determinare l'espressione della derivata della funzione di riferimento), con un valore di delta_ass che garantisca, in tutti e 3 i casi, che la parte intera e le prime 7 cifre frazionarie siano corrette;
  5. considerate sia l'errore assoluto tra l'approssimazione della bisezione e la corrispondente soluzione esatta, sia l'errore assoluto tra l'approssimazione delle Secanti e la corrispondente soluzione esatta, sia l'errore assoluto tra l'approssimazione di Newton e la corrispondente soluzione esatta e verificate che siano minori dell'accuratezza richiesta (delta_ass), commentando il loro valore; calcolate anche il residuo per ognuna delle tre approssimazioni e commentate i valori del residuo confrontandoli con quelli del corrispondente errore assoluto e con l'accuratezza richiesta; guardando il grafico della funzione di riferimento dire se, per ognuno dei tre zeri, il problema appare bene o mal condizionato e poi calcolare l'indice di condizionamento per ognuno dei tre zeri;
  6. usate la function Matlab fminbnd per determinare i due punti di minimo e il punto di massimo della vostra funzione di riferimento in [a,b], con tre chiamate del tipo: fminbnd(fun,sinistro,destro,optimset('TolX',1e-10)), e considerate i valori calcolati da fminbnd come le soluzioni esatte (cioè come valori esatti dei due punti di minimo e del punto di massimo);
  7. verificate che i due punti di minimo e il punto di massimo sono zeri della derivata della vostra funzione di riferimento (consiglio: usare funtool per determinare l'espressione della derivata della funzione di riferimento), visualizzando nella stessa figura sia il grafico della funzione sia il grafico della sua derivata (può essere utile usare anche la scalatura della finestra grafica data dal comando axis([xmin xmax ymin ymax]) ), e usando la fzero per calcolare gli zeri della derivata; commentate i risultati ottenuti;
  8. determinate un'approssimazione dei due punti di minimo e del punto di massimo, usando, rispettivamente, due volte il metodo di Fibonacci search (nostra function fminfibo) per i due minimi , e il metodo di Golden search (nostra function fmingolden) per il massimo, con un valore di delta_ass che garantisca che la parte intera e le prime 4 cifre frazionarie siano corrette;
  9. considerate l'errore assoluto tra l'approssimazione di Golden search e la corrispondente soluzione esatta e poi l'errore assoluto tra le due approssimazioni ottenute dalle due chiamate alla Fibonacci search e le due corrispondenti soluzioni esatte, e verificate che siano in tutti e tre i casi minori dell'accuratezza richiesta (delta_ass), commentando i risultati;