Esercizio function matlab università

di il
2 risposte

Esercizio function matlab università

Ciao a tutti! Devo fare una serie di script su matlab per un esame dell'università, qualcuno mi può aiutare?

"Scrivere le function Diff1Cent(f,x,h) e Diff2Cent(f,x,h) per calcolare le seguenti approssimazioni delle derivate prima e seconda di una funzione f:

f'(x)= f(x + h)-f(x-h)/2h ,
f''(x)= f(x + h)-2f(x) + f(x-h)/h^2

(a) Utilizzare tali function per fare un gra?co dell’errore assoluto per valori h = 10^-k, k = 1,...,15 evidenziando il valore di h per cui l’errore è minimo.

(b) Analizzare i risultati ottenuti nei seguenti casi: f 1(x) = e^x, (x = 1) ; f2(x) = cos(x), (x = 1)

(c) Tramite l’analisi teorica degli errori di troncamento e arrotondamento, calcolare, in ciascun caso, il valore ottimale h* per cui l’errore assoluto è minimo."

Grazie!

2 Risposte

  • Re: Esercizio function matlab università

    Di quale aiuto hai bisogno?
    Per scrivere le due funzioni?
    Hai fatto almeno un tentativo?

    Nota che, per come le hai scritte, le due funzioni sono sbagliate, mancano delle parantesi:

    f'(x)= f(x + h)-f(x-h)/2h ==>
    f'(x)= (f(x + h)-f(x-h))/2h

    f''(x)= f(x + h)-2f(x) + f(x-h)/h^2 ==>
    f''(x)= (f(x + h)-2f(x) + f(x-h))/h^2

    Ciò detto, per scrivere entrambe le funzioni in una forma "generale" (che sia indipendente dalla specifica funzione della quale vuoi calcolare l'approssimazione della derivata) puoi usare una "anonymous-function"

    https://it.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html

    La funzione "Diff1Cent" avrà, come minimo

    tre parametri di input:
    [*] la funzione della quale vuoi calcolare l'approssimazione della derivata), nel tuo caso, di volta in volta, la funzione "e^x" e "cos(x)"
    [*] il valore per il quale vuoi calcolare la derivata (nel tuo caso, "x")
    [*] il valore di "h" per il quale calcolare la derivata

    almeno un parametro di output:
    [*] il valore della derivata

    dal momento che vuoi esplorare differenti valori di "h" conviene sfruttare le proprietà di "indexing" di MatLab

    https://it.mathworks.com/company/newsletters/articles/matrix-indexing-in-matlab.html

    per definirlo come vettore ed effettuare il calcolo per i suoi diversi valori senza ricorrere ad inutili ( in MatLab) cicli "for".

    Per plottare i risultati puoi usare la funzione "plot"



    Per calcolare il valore dell'errore, sarà sufficiente calcolare la differenza tra i valori calcolati dalla funzione "Diff1Cent" ed i valori reali.

    Per identificare il valore minimo dell'errore puoi usare la funzione "min"



    utilizzando, come parametro di input, il valore assoluto del vettore contenente l'errore calcolato in precedenza.
    Invocando la funzione "min" con due parametri di output, otterrai il valore minimo ed il relativo indice-posizione all'interno del vettore.
    Potrai quindi utilizzare l'indice-posizione così trovato, per identificare il valore di "h" per il quale l'errore è minimo.

    Una possibile implementazione della funzione "Diff1Cent" potrebbe essere:
    
    function d1=Diff1Cent(f,x,h)
    d1=(f(x + h)-f(x-h))./(2*h)
    
    Ovviamente sarebbe opportuno inserire, nel codice della funzine una serie di controlli sulla validità degli input.

    Per i dettagli sul come definire una funzione,



    La funzione dovrà essere invocata come:
    
    % Definizione della anonymous function
    f=@(x) cos(x)
    % Definizione del punto per il quale calcolare la derivata
    x=1
    % Definizione del vettore "step"
    h=10.^(-1:-1:-15)
    % Invocazione della funzione per il calcolo della derivata
    d1=Diff1Cent(f,x,h)
    
  • Re: Esercizio function matlab università

    Grazie mille,
    ci provo!
    ho capito molto più da quello che mi hai scritto che in classe!
Devi accedere o registrarti per scrivere nel forum
2 risposte