Matlab - Problema al derivar una función en programación

 
Vista:

Problema al derivar una función en programación

Publicado por Oier (3 intervenciones) el 27/02/2012 13:15:02
Estoy haciendo el algoritmo de Newton Raphson en matlab y al llegar a la parte de la derivada no me la realiza. Me da este error y no sé resolverlo.

??? Error using ==> diff
Function 'diff' is not supported for class 'inline'.

Error in ==> newton at 8
dx=diff(f);

El código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear
clc
disp ('NEWTON-RAPHSON');
xo=input('Introduza el valor inicial:');
n=input('Introduzca el número de iteraciones:');
fun=input('Introduzca la función f(x)=','s');
f=inline(fun);
dx=diff(f);
salida=ones(n,3);
for i=1:n
    x1=x0-(f(x0)/dx(x0))
    vsal=[xo;x1];
    error=abs((x1-xo)/x1);
    xo=x1;
    salida(i,1)=i;
    salida(i,2)=x1;
    salida(i,3)=error;
end
disp('Iterac.	Raiz        Error');
disp(num2str(salida));


Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema al derivar una función en programación

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/02/2012 13:38:54
Hola Oier


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

clear all

clc
disp ('NEWTON-RAPHSON');
fprintf('\nPROBAR CON LA FUNCION f(x)=exp(-x)-x\n')
fprintf('xo=1, n=10\n\n')
xo=input('Introduza el valor inicial xo:');
n=input('Introduzca el número de iteraciones n:');
fun=input('Introduzca la función f(x)=','s');
f=inline(fun);
dxf=diff(sym(fun));
dx=inline(dxf);
salida=ones(n,3);
for i=1:n
    x1=xo-(f(xo)/dx(xo));
    vsal=[xo;x1];
    error=abs((x1-xo)/x1);
    xo=x1;
    salida(i,1)=i;
    salida(i,2)=x1;
    salida(i,3)=error;
end
disp('Iterac.	 Raiz        Error');
disp(num2str(salida));


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EJECUCION
>> newtonraphson3
NEWTON-RAPHSON
 
PROBAR CON LA FUNCION f(x)=exp(-x)-x
xo=1, n=10
 
Introduza el valor inicial xo:1
Introduzca el número de iteraciones n:10
Introduzca la función f(x)=exp(-x)-x
Iterac.	 Raiz        Error
 1     0.537883     0.859141
 2     0.566987    0.0513312
 3     0.567143  0.000275582
 4     0.567143 7.79461e-009
 5     0.567143 1.95757e-016
 6     0.567143 1.95757e-016
 7     0.567143 1.95757e-016
 8     0.567143 1.95757e-016
 9     0.567143 1.95757e-016
10     0.567143 1.95757e-016



Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
"Detalladar sus preguntas, para recibir respuestas acertadas"
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 8 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Problema al derivar una función en programación

Publicado por Luis Alberto (4 intervenciones) el 01/04/2019 08:29:54
Hola Jose Jeremias
La verdad es que yo no soy un experto y estoy aprendiendo a programar MATLAB pero te comento que me justo el programa de Oier y lo quise correr en mi maquina con tu corrección Juan pero me salio error, así que después de intentar hice el siguiente cambio y me salio los resultados que tu pusiste, aquí dejo el código,

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
clear all
clc
disp ('NEWTON-RAPHSON');
fprintf('\nPROBAR CON LA FUNCION f(x)=exp(-x)-x\n')
fprintf('xo=1, n=10\n\n')
xo=input('Introduza el valor inicial xo:');
n=input('Introduzca el número de iteraciones n:');
fun=input('Introduzca la función f(x)=','s');
f=str2sym(fun);
dxf=diff(f);
f=inline(f);
dx=inline(dxf);
 
salida=ones(n,3);
for i=1:n
    x1=xo-(f(xo)/dx(xo));
    vsal=[xo;x1];
    error=abs((x1-xo)/x1);
    xo=x1;
    salida(i,1)=i;
    salida(i,2)=x1;
    salida(i,3)=error;
end
disp('Iterac.	 Raiz        Error');
disp(num2str(salida));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar