Tercera derivada
Publicado por Marco (3 intervenciones) el 01/09/2012 10:21:09
Si este algoritmo lo ejecuto como aquí figura:
Y en la ventana de comando lo declaro:
[L,n]=terceraderivada(f,0.8,1,0.001)
para f(x)=cos(x), obtengo lo siguiente:
>> [L,n]=terceraderivada('f',0.8,0.001)
===============================
derivada 3
===============================
El resultado es:
Pero si declaro mi algoritmo en la ventana de comando así, obviando el h:
[L,n]=terceraderivada(f,0.8,0.001)
Obtengo para el mismo f, f(x)=cos(x) lo siguiente:
>> [L,n]=terceraderivada('f',0.8,1,0.001)
===============================
derivada 3
===============================
El resultado es:
Obtengo distintos valores en las columnas para cada declaración de mi algoritmo y distintos valores de n. Me doy cuenta que declarando o no el h obtengo dichos valores distintos. Mi problema es que no detecto porque declarar o no el h ocasiona tales inconvenientes para saber cual es la respuesta correcta. espero me puedan ayudar . Gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function [L,n]=terceraderivada(f,x,h,tolerancia)
%f funcion
%x punto donde se va hallar la derivada
%tolerancia para el error
%Resultados L[H' D' E']
fprintf('===============================\n')
fprintf('\t derivada 3 \n')
fprintf('===============================\n')
itmax=5;
%h=1;
H(1)=h;
D(1)=(feval('f',x+2*h)-2*feval('f',x+h)+2*feval('f',x-h)-feval('f',x-2*h))/(2*h^3);
E(1)=0;
R(1)=0;
for n=1:2
h=h/10;
H(n+1)=h;
D(n+1)=(feval('f',x+2*h)-2*feval('f',x+h)+2*feval('f',x-h)-feval('f',x-2*h))/(2*h^3);
E(n+1)=abs(D(n+1)-D(n));
R(n+1)=2*E(n+1)*(abs(D(n+1))+abs(D(n))+eps);
end
n=2;
while ((E(n)>E(n+1))&(R(n)>tolerancia))&n<itmax;
h=h/10;
H(n+2)=h;
D(n+2)=(feval('f',x+2*h)-2*feval('f',x+h)+2*feval('f',x-h)-feval('f',x-2*h))/(2*h^3);
E(n+2)=abs(D(n+2)-D(n+1));
R(n+2)=2*E(n+2)*(abs(D(n+2))+abs(D(n+1))+eps);
n=n+1;
end
fprintf('\n El resultado es: \n');
n=length(D)-1;
L=[H' D' E' ];
Y en la ventana de comando lo declaro:
[L,n]=terceraderivada(f,0.8,1,0.001)
para f(x)=cos(x), obtengo lo siguiente:
>> [L,n]=terceraderivada('f',0.8,0.001)
===============================
derivada 3
===============================
El resultado es:
1
2
3
4
5
6
7
8
9
10
L =
0.0010 0.7174 0
0.0001 0.7174 0.0000
0.0000 0.6661 0.0512
n =
2
Pero si declaro mi algoritmo en la ventana de comando así, obviando el h:
[L,n]=terceraderivada(f,0.8,0.001)
Obtengo para el mismo f, f(x)=cos(x) lo siguiente:
>> [L,n]=terceraderivada('f',0.8,1,0.001)
===============================
derivada 3
===============================
El resultado es:
1
2
3
4
5
6
7
8
9
10
11
12
L =
1.0000 0.5550 0
0.1000 0.7156 0.1606
0.0100 0.7173 0.0018
0.0010 0.7174 0.0000
0.0001 0.7174 0.0000
n =
4
Obtengo distintos valores en las columnas para cada declaración de mi algoritmo y distintos valores de n. Me doy cuenta que declarando o no el h obtengo dichos valores distintos. Mi problema es que no detecto porque declarar o no el h ocasiona tales inconvenientes para saber cual es la respuesta correcta. espero me puedan ayudar . Gracias
Valora esta pregunta


0