Problemi con matlab

hastings1
Ho fatto il plot di questa funzione $f(x)=4x^3-21x^2+24x+5-3/2sqrt(9x^2+6x+2)$ per $-0.7<=x<=4.5$
poi ho fatto il plot della sua derivata (a proposito... è giusta così?) $f'(x)=12x^2-42x+24-(27x+9)/sqrt(9x^2+6x+2)$ nello stesso intervallo:

f=inline('4*x.^3-21*x.^2+24*x+5-(3/2)*sqrt(9*x^2+6*x+2)','x');
df=inline('12*x^.2-42*x+24 - (27*x+9)/sqrt(9*x^2+6*x+2)','x');

X=[-0.7,4.5,100];

plot([0 0],[-5 9],'k'); %asse y
hold on
plot([-1 4.5],[0 0],'k'); %asse x

fplot(f,X,'r'), grid on

fplot(df,[-1,4,100],'b'), 

hold off


c'è un problema con la funzione blu (la derivata) perchè quando f(x) cresce, f'(x) dovrebbe essere positivo invece va -infinito
Poi c'è un'altro problema perchè c'è una sorta di cuspide intorno a x=0 nella funzione blu (la derivata). Che significa?
HElp me, please!!

Risposte
cozzataddeo
La derivata prima non è corretta, risulta:
$f'(x)=12x^2-42x+24-(27x+9)/(2sqrt(9x^2+6x+2))$

hastings1
se io voglio creare un vettore "a passo 0.1" per poi verificare a quale zero della funzione convergono i punti di tale vettore tremite un metodo iterativo (che so... Newton-Raphson) come scrivo il vettore? Così?
 
v=[-1, 0, 0.1]; % cioè "crea un vettore che va da -1 a 0 con passo 0.1

%Poi faccio un ciclo in cui prendo come valore iniziale ($x_0$) il numero presente in ogni celletta del vettore %"v" ( cioè v(k) ). Per ogni numero del vettore applico Newton



Secondo voi l'algoritmo è giusto per l'obiettivo preposto?

hastings1
Grazie Cozza Taddeo per aver segnalato l'errore nella derivata prima.
Credo sia per questo che la funzione blu (derivata prima) non rispecchiava l'andamento della funz rossa ( f(x) ).

cozzataddeo
"settembre":
se io voglio creare un vettore "a passo 0.1" per poi verificare a quale zero della funzione convergono i punti di tale vettore tremite un metodo iterativo (che so... Newton-Raphson) come scrivo il vettore? Così?
 
v=[-1, 0, 0.1]; % cioè "crea un vettore che va da -1 a 0 con passo 0.1

%Poi faccio un ciclo in cui prendo come valore iniziale $x_0$ il numero presente in ogni celletta del vettore v(k)
%e per ogni numero applico Newton.



Secondo voi l'algoritmo è giusto per l'obiettivo preposto?


Per creare il vettore che ti serve devi scrivere
v=[-1:0.1:0];


L'idea alla base dell'algoritmo mi sembra corretta, non so se ci siano metodi piú efficienti, però il tuo dovrebbe funzionare.

hastings1
grazie per la risposta fulminea!
grazie di avermi detto come scrivere il vettore. Avrei fatto un gran pasticcio altrimenti.

cozzataddeo
Di niente.
Ti indico un link che potrebbe esserti utile in caso di ulteriori dubbi: c'è un tutorial utile per cominciare ad usare matlab ed è consultabile sia in rete che scaricabile anche in formato pdf (comunque facendosi aiutare da Google se ne trovano di manualetti in rete! :wink: )

http://freeweb.supereva.com/programmare ... dex.html?p

Buona simulazione!

:)

hastings1
la derivata di f(x) è la seguente?
$f''(x)=24x-42-(24(3x-1)(9x^2+6x+2))/(sqrt(9x^2+6x+2))$

cozzataddeo
La derivata seconda dovrebbe essere

$f''(x)=-42+24x-27/(2(9x^2+6x+2)^(3/2))$

Ti confesso però che l'ho fatta calcolare ad un programma, non l'ho fatta a mano e quindi non saprei dirti dove sabgli... :oops:
Prova a verificare i tuoi conti tenendo presente che questo è il risultato corretto.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.