Creazione tabelle MATLAB
Ciao ragazzi,
vi scrivo perché sto facendo un esercizio di preparazione all'esame e recita così:
"Scrivere una funzione Matlab che data la funzione f(x)=ln(x), ed un punto x, calcoli le approssimazioni di f'(x) date da: $ D_h(x)= (f(x+h)-f(x))/h $ per $ h=10^(-i), i=1,2,...,16 $.
Il programma deve visualizzare in una tabella, per ogni valore di f, il corrispondente valore $ D_h(x) $ e l'errore assoluto $ e_h=|f'(x)-D_h(x)| $ .
a) Utilizzare tale script per approssimare la derivata di ln(x) in x=0.1,1,10,100. Quale è in ciascuno dei casi il valore di h ottimale?"
Premettendo che è veramente da poco che uso Matlab, ho provato a buttare giù uno script ed ho scritto questo:
function [ y ] = Dh( x )
for k=1:16
h=10^-(k);
end
y=(log(x+h)-log(x))/h;
end
Secondo voi può essere corretto? Come faccio a visualizzare in una tabella quello che mi si richiede?
Scusate il disturbo, spero sia comprensibile!
vi scrivo perché sto facendo un esercizio di preparazione all'esame e recita così:
"Scrivere una funzione Matlab che data la funzione f(x)=ln(x), ed un punto x, calcoli le approssimazioni di f'(x) date da: $ D_h(x)= (f(x+h)-f(x))/h $ per $ h=10^(-i), i=1,2,...,16 $.
Il programma deve visualizzare in una tabella, per ogni valore di f, il corrispondente valore $ D_h(x) $ e l'errore assoluto $ e_h=|f'(x)-D_h(x)| $ .
a) Utilizzare tale script per approssimare la derivata di ln(x) in x=0.1,1,10,100. Quale è in ciascuno dei casi il valore di h ottimale?"
Premettendo che è veramente da poco che uso Matlab, ho provato a buttare giù uno script ed ho scritto questo:
function [ y ] = Dh( x )
for k=1:16
h=10^-(k);
end
y=(log(x+h)-log(x))/h;
end
Secondo voi può essere corretto? Come faccio a visualizzare in una tabella quello che mi si richiede?
Scusate il disturbo, spero sia comprensibile!
Risposte
No che non è corretto, hai provato a farlo girare?
Ciao Raptorista, innanzitutto grazie per la risposta! Sì, ho provato dando dei valori a Dh scrivendo, ad esempio, Dh(3) e mi restituisce "0" per ogni numero che ci metto. Sto imparando pian piano ad usare Matlab e gli altri esercizi che ho provato a fare mi tornano, ma di questo non ci capisco niente! Io solitamente faccio così:
Scrivo lo script della funzione e poi la copio in un nuovo editor e faccio il grafico. Ho fatto questa cosa anche per questo script scrivendo questo in un nuovo editor:
x=linspace(-2,2,100000);
[ y ] = Dh( x );
plot(x,y)
Mi restituisce un grafico simile alla retta y=0 con valori infiniti intorno ad x=0.
Non capisco come sia possibile questa cosa e dove sbaglio, potresti darmi una mano? Scusa il disturbo, ti ringrazio!
Scrivo lo script della funzione e poi la copio in un nuovo editor e faccio il grafico. Ho fatto questa cosa anche per questo script scrivendo questo in un nuovo editor:
x=linspace(-2,2,100000);
[ y ] = Dh( x );
plot(x,y)
Mi restituisce un grafico simile alla retta y=0 con valori infiniti intorno ad x=0.
Non capisco come sia possibile questa cosa e dove sbaglio, potresti darmi una mano? Scusa il disturbo, ti ringrazio!
Questa non è una questione di conoscenza dello specifico linguaggio: in quelle due righe c'è un errore banale che si vede ad occhio!
Tra l'altro, dovresti già essertene accorto dal fatto che ricevi in output solo una funzione...
Tra l'altro, dovresti già essertene accorto dal fatto che ricevi in output solo una funzione...
Allora forse devo mettere in output anche h? Il mio problema è che non faccio informatica e non ho mai avuto a che fare con queste cose. Grazie ancora Raptorista!
"Controllore":
Allora forse devo mettere in output anche h?
Certo, io aggiungerei anche D in output, e magari un paio di parentesi ed una ragazza in bikini, che non fanno mai male.
Ti spiace fare uno sforzo di testa prima che di dita? XD
Che tipo di oggetto deve costruire la funzione [inline]Dh[/inline]?








A parte le battute, ho provato a ragionare su quello che mi hai detto ed il mio ragionamento (per quanto possa essere sbagliato), è questo:
La mia funzione y dipende da due variabili, ovverosia x ed h. Per quanto riguarda la x, non dovrebbe esserci niente di sbagliato in quanto quando vado a far lavorare la funzione su un altro editor metto il dominio della x stessa. Pensandoci però in input ho messo solo x senza metterci anche h, e forse è questo il mio errore.
Ho provato a fare in questo modo che ho appena descritto, mettendo anche il dominio di h nello script in cui faccio girare la funzione, ma la situazione rimane analoga. Posto qui quello che ho fatto:
function [ y ] = Dh( x,h )
for k=1:16
h=10^-(k);
end
y=(log(x+h)-log(x))/h;
end
Nello script in cui faccio girare la funzione, invece:
x=linspace(-2,2,100000);
h=-100:0.01:100;
[ y ] = Dh( x,h );
plot(x,y)
La situazione rimane la solita, eppure ho provato a ragionarci! Sono pochi giorni che uso Matlab e non ho mai fatto niente di programmazione in quanto sto facendo il corso magistrale di Ingegneria Civile, non so usare questi programmi.
Adesso però mi viene un altro dubbio: se metto due variabili in ingresso (x ed h) e faccio plot(x,y), non ottengo il grafico corretto anche se lo script fosse giusto, vero?
Per rispondere a quanto mi hai chiesto, Dh deve costruire uno scalare ed io in input ho messo dei vettori. Forse il problema, ora che ci penso, potrebbe essere questo

Tu continui a non ascoltarmi, ed io prima o poi mi stuferò di risponderti:
"Raptorista":
Che tipo di oggetto deve costruire la funzione [inline]Dh[/inline]?
Capisco che tu possa stufarti, però non sto facendo lo stupido volontariamente. La funzione deve approssimare la derivata di ln(X) e per farlo ha bisogno di una serie di punti di h.
Non sto dicendo che fai lo stupido volontariamente, né che tu effettivamente lo sia, ma solo che non ti stai concentrando abbastanza!
Togli [inline]h[/inline] come parametro della funzione che è evidentemente inutile, il primo passo dev'essere di chiamare
ottenendo il risultato corretto.
"Raptorista":
Che tipo di oggetto deve costruire la funzione [inline]Dh[/inline]?
1. Uno scalare
2. Un vettore
3. Una matrice
Togli [inline]h[/inline] come parametro della funzione che è evidentemente inutile, il primo passo dev'essere di chiamare
[ y ] = Dh( 1 )
ottenendo il risultato corretto.
Ok, allora avevo frainteso quello che mi avevi detto! Quattro post più in alto avevo già risposto sul cosa deve costruire, ed avevo scritto che deve venir fuori uno scalare. Ti ringrazio ancora per la pazienza che stai avendo nei miei confronti

"Controllore":
Quattro post più in alto avevo già risposto sul cosa deve costruire, ed avevo scritto che deve venir fuori uno scalare.
E infatti già questo è sbagliato xD
"Controllore":
"Scrivere una funzione Matlab che data la funzione f(x)=ln(x), ed un punto x, calcoli l[size=150]e[/size] approssimazion[size=150]i[/size] di f'(x)
Ah, ecco 
Allora in input devo mettere uno scalare x mentre in output devo ottenere un vettore y, ho capito. Ci ragiono un po' e provo a trovare la soluzione, grazie mille Raptorista!

Allora in input devo mettere uno scalare x mentre in output devo ottenere un vettore y, ho capito. Ci ragiono un po' e provo a trovare la soluzione, grazie mille Raptorista!
Raptorista, ho creato questo script che mi dà in output un vettore di 16 componenti:
function [ y ] = Dh( x );
for k=1:1:16;
h=10^(-k);
y(k)=(log(x+h)+log(x))/h;
end
end
Mi pare funzioni, che te ne pare?
function [ y ] = Dh( x );
for k=1:1:16;
h=10^(-k);
y(k)=(log(x+h)+log(x))/h;
end
end
Mi pare funzioni, che te ne pare?

Bene, questo è il primo passo buono di tutta la discussione! Adesso procedi col calcolo di quello che ti manca.




Pfffffffff, non sei mica il primo ingegnere che scrive sul forum... Se hai altri problemi, scrivi senza remore [ma usando la zucca!].
