How can i call an equation and it's derivative inside a matlab function?
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ömer Utku Örengül
el 7 de Nov. de 2021
Editada: Ömer Utku Örengül
el 8 de Nov. de 2021
As a newbie, i like to ask a simple question. I am trying to impliment a newton-rapson method for a simple equation as an example. I create a different matlab function from main function for the equation and call it inside the main function. However when I try to call the functions derivative it gives an error. I am aimin to not to take the derivative inside the main function for optimization concerns. I did try different methods but they give errors all the same.
function nr(x0,TC)
% TC is given in terms of percentage!
if nargin<2, x0=0; TC=10^-4;end
error=TC+1; i=0;
x(1)=x0;
while(error>TC)
x(i+2)=x(i+1)-f(x(i+1))/fd(x(i+1));
error=100*abs((x(i+2)-x(i+1))/x(i+2));
i=i+1;
end
fprintf('After %d iterations an approximate root is %f',i,x(i));
end
function [fx]=f(x)
fx=exp(-x)-x;
end
function fd=fd(x)
% syms x %These parts where i need help.
% fx=exp(-x)-x;
% fd=matlabFunction(diff(fx))
fd=-exp(-x)-1;
end
0 comentarios
Respuesta aceptada
Ömer Utku Örengül
el 8 de Nov. de 2021
Editada: Ömer Utku Örengül
el 8 de Nov. de 2021
0 comentarios
Más respuestas (1)
Alan Stevens
el 7 de Nov. de 2021
Like this, perhaps:
% TC is given in terms of percentage!
x0=0; TC=10^-4;
error=TC+1; i=0;
x(1)=x0;
while(error>TC)
[fx, fd] = f(x(i+1));
x(i+2)=x(i+1)-fx/fd;
error=100*abs((x(i+2)-x(i+1))/x(i+2));
i=i+1;
end
fprintf('After %d iterations an approximate root is %f',i,x(i));
function [fx, fd]=f(x)
fx=exp(-x)-x;
fd = -exp(-x)-1;
end
3 comentarios
Walter Roberson
el 7 de Nov. de 2021
Editada: Walter Roberson
el 8 de Nov. de 2021
There are two notable diff() functions. One of them only applies if the first parameter is symbolic or symbolic function.
syms x
fd = matlabFunction(diff(f(x),x))
function [fx]=f(x)
fx=exp(-x)-x;
end
Alan Stevens
el 8 de Nov. de 2021
Editada: Alan Stevens
el 8 de Nov. de 2021
You could always try something like this:
% TC is given in terms of percentage!
fx = @(x) exp(-x)-x;
dx = 10^-10; % Choose a suitably small value
fd = @(x) (fx(x+dx) - fx(x))/dx;
x0=0; TC=10^-4;
error=TC+1; i=0;
x(1)=x0;
while(error>TC)
x(i+2)=x(i+1)-fx(x(i+1))/fd(x(i+1));
error=100*abs((x(i+2)-x(i+1))/x(i+2));
i=i+1;
end
fprintf('After %d iterations an approximate root is %f',i,x(i));
but, if you have the Symbolic Maths package, Walter's suggestion is best.
Ver también
Categorías
Más información sobre Number Theory en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!