Codice Matlab

di il
5 risposte

Codice Matlab

Buonasera, sto approcciando l'uso di Matlab per uso universitario ma a causa della situazione attuale tutto ciò risulta molto difficile.
Di questa parte di codice non riesco a capire il significato di alcune parti... potresti darmi una mano?
g=@(x) cos(x); 
x0=0;tol=10^(-8);maxit=1000; 
x=iter_funz(g,x0,eps,maxit);
%chiaramente iter_funz è una funzione iterativa dichiarata prima ma per quale motivo viene dichiarata usando prima
eps
e poi dopo così
alpha=x(end);
x=iter_funz(g,x0,tol,maxit);
t=linspace(0,pi/2,100);
%perchè serve dichiararlo?

Da qui non ho più capito cosa è stato fatto ... qualcuno potrebbe darmi una traduzione di questa scrittura?
plot(t,g(t),'b',t,t,'k',x,g(x),'*r')
cosa indica?
 legend('y=g(x)','y=x','punto fisso')
cosa indica?
err=abs(alpha-x);
cosa indica?
figure
cosa indica?
semilogy(1:length(err),err,'x-b')
anche qui cosa indica?

Grazie

5 Risposte

  • Re: Codice Matlab

    Dovresti pubblicare il codice completo (ed in un solo blocco di codice) della funzione in modo che si possa capire cosa "fa" e, possibilmente dello script nel quale viene invocata.

    Quello che si può dire, per il momento, è che:
    
    g=@(x) cos(x); 
    
    è una anonymous function. Nello specifico, la funzione "coseno".
    La funzione "iter_funz" utilizza, al suo interno, una funzione.
    Per evitare di dover invocare questa funzione scrivendola esplicitamente nel corpo della funzione "iter_funz", ma consentendo di passarla come parametro (in modo da poterla cambiare a seconda delle esigenze, la funzione deve essere dichiarata come anonymous function come è stato fatto per la funzione "g".

    "eps" è il valore che rappresenta la Floating-point relative accuracy

    Dal nome della funzione (iter_funz) e dai parametri di input sembrerebbe che la funzione esegua dei calcoli ricorsivamente fino a che la differenza tra il risultato di due iterazioni successive non sia inferiore alla tolleranza (parametro "tol") o che non sia stato raggiunto il limite massimo di iterazioni ("maxit")

    Le altre istruzioni servono per plottare i risultati ottenuti invocando la funzione "iter_funz".




    Se non pubblichi il codice completo della funzione "iter_funz" non si può dire molto di più
  • Re: Codice Matlab

    Grazie appena riesco lo pubblico! Comunque iter_funz fa come hai scritto tu ...
    Ma quello che non capisco sono le istruzioni per plottare...cosa indicano tutte quelle lettere tra parentesi e poi
    semilogy(...)
    e con tutto quello tra parentesi?
    Grazie
  • Re: Codice Matlab

    function x=iter_funz(g, x0, tol, maxit);
    x(1) = x0;
    for k=1:maxit
        x(k+1) = g(x(k));
        if abs(x(k+1)-x(k)) < tol
            break
        end
    end
    
    questo è iter_funz.
    Grazie
  • Re: Codice Matlab

    Se il problema è la funzione "semilogy" , basta che tu dia un'occhiata alla documentazione on-line della funzione semilogy:

    Quelle che chiami "lerrere" sono i parametri passati alla funzione; in particolare:

    1:length(err) ==> primo parametro: sono i valori delle ascisse, la funzione "length" ritorna la lunghezza del vettore che riceve in input, quindi l'istruzione genera un vettore di interi da 1 a "n" dove "n" è il numero di elementi del vettore "err" che viene generato dall'istruzione "err=abs(alpha-x);" che si trova fuori dalla funzione (ti avevo chiesto di pubblicare anche lo script - o la funzione - all'interno del quale la funzione "iter_funz" viene invocata).
    "x" è il vettore ritornato dalla funzione "iter_funz"

    err ==> secondo parametro: le ordinate della curva da plottare

    Un consiglio, per comprendere il funzionamento del codice completo, prova ad eseguirlo in modalità debug ... il debugger è il tuo migliore amico ...

    https://it.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html
  • Re: Codice Matlab

    Grazie...provo a rivedermi bene tutto e se ho ancora dubbi scrivo
Devi accedere o registrarti per scrivere nel forum
5 risposte