Nella domanda non è chiaro se il problema è relativo al calcolo dell'integrale o alla rappresentazione della funzione "f".
La funzione
eval chiamata nello script non calcola l'integrale, ma semplicemente la funzione "
f".
Se l'obiettivo è calcolare la funzione "
f" nell'intervallo definito (0.5 100) non è necessario ricorrere a "
eval", è sufficiente scrivere direttamente:
fx=-2.*x.^(-3).*cos(x.^(-2));
Per quanto riguarda la rappresentazione grafica:
[*] per ottenere un grafico con uno od entrambi gli assi in scala logaritmica, si possono usare le seguenti funzioni:
semilogx: scala logaritmica solo sull'asse X
semilogy: scala logaritmica solo sull'asse Y
loglog: scala logaritmica su entrambi gli assi
nel caso della domanda:
semilogx(x,fx)
per poter "apprezzare" nel grafico l'andamento della funzione in prossimità dell'ascissa "0.5" occorre aumentare il numero di punti per i quali la funzione è calcolata.
La funzione "linspace" genera di deafult "100" punti, per generarne di più bisogna specificarne il numero con un ulteriore parametro:
x=linspace(a,b,1000);
(aumentando il numero di punti, si può osservare, nel grafico, un andamento interessante in prossimità di x=0.5 ... prova a settare "a=0.1", "a=0.2", "a=0.3") ...
in alternativa i valori di x possono essere definiti come:
passo=0.1;
x=a:passo:100;
[*] per settare / modificare via codice i limiti degli assi bisogna accedere alle loro proprietà tramite il loro "handle" con le funzioni "
get" e "
set":
limiti_asse_x=get(gca,'xlim'); ritorna i limiti attuali dell'asse X
limiti_asse_x=get(gca,'ylim'); ritorna i limiti attuali dell'asse Y
limiti_asse_z=get(gca,'ylim'); ritorna i limiti attuali dell'asse Z
set(gca,'xlim',[new_min_x new_max_x]); setta i nuovi limiti attuali dell'asse X ai valori (new_min_x e new_max_x)
set(gca,'ylim',[new_min_y new_max_y]); setta i nuovi limiti attuali dell'asse Y ai valori (new_min_y e new_max_y)
set(gca,'zlim',[new_min_z new_max_z]); setta i nuovi limiti attuali dell'asse Z ai valori (new_min_z e new_max_z)
gca: la funzione built-in gca restituisce l'handle del sistema di assi corrente
Tramite le funzioni "
get" e "
set" è anche possibile modificare il tipo di asse (lineare / logaritmico)
set(gca,'xscale','log'): per settare l'asse X "logaritmico" (partendo da un grafico generato con "
plot")
set(gca,'yscale','log'): per settare l'asse Y "logaritmico"
Se si vuole aggiungere la "griglia" al grafico:
grid on
Alcuni dei suggerimenti sopra descritti sono stati implementati nello script che segue.
a=1/2;
b=100;
x=a:0.1:b;
fx=-2.*x.^(-3).*cos(x.^(-2));
semilogx(x,fx,'r','linewidth',2)
xlabel('Legenda asse X')
ylabel('Legenda asse Y')
legend('Funzione "f"')
title('Grafico Funzione "f"')
grid on
Hope this helps.
Allegati: