Jump to content

Derivar uma função


Octainne
 Share

Recommended Posts

Boas,

De momento ando a fazer um projecto o qual requer a utilização do programa MatLab.

O meu grande problema é derivar a variável de entrada func, que é enviada como uma function handle (@), declarada de forma anónima.

handle = @(x) x^2

Junto envio o código da função até agora desenvolvido:

function raiz = newton(func,a,b,ref,tipo)
%Metodo de Newton para a funcao f(x) = 0
%
%  raiz = newton(func,a,b,ref,tipo)
%
%INPUT:
% - func = funcao f(x), deverá ser inserida na forma "@(variavel) funcao".
% - a,b  = limites do intervalo I=[a,b] onde a raiz esta contida
% - ref  = numero de iteracoes ou tolerancia pretendida
% - tipo = - 'iter' -> se fornecer o numero de iteracoes a efectuar
%          - 'tole' -> se fornecer a tolerancia a alcancar
%
%OUTPUT:
% - raiz = valor aproximado da raiz obtido a partir da  referencia enviada

%
if nargin ~= 5
   error('Argumentos em falta ou em excesso! Consulte o comando help newton .')

else
   if (~isreal(a) || ~isreal(b) || ~isreal(ref) || ~ischar(tipo))
       error('Argumentos mal inseridos! Consulte o comando help newton .')

   else
       if strcmp(tipo,'iter')

           disp('Calculo atraves do numero de iteracoes')
           %Calculo do x0
           xp=(a+b)/2;
           %Calculo da 1ª e 2ª derivada da funcao
           [b]syms x;
           dfunct=diff(func(x),x);
           ddfunct=diff(func(x),x,2);
           dfunc = @(x) dfunct;
           ddfunc =@(x) ddfunct;[/b]


           for i=0:ref
               xs=xp-(feval(func,xp)/feval(dfunc,xp));
               erro=abs(xs-xp);
               erros=(feval(ddfunc,xp)*erro^2)/(2*feval(dfunc,xp));
               printf('Ite:%d -> Z:%f -> Erro:%f ->Erro Seguinte:%f',i,xs,erro,erros);
               xp=xs;
           end

           error('Escreva no 5º argumento: iter-> se fornecer o numerod e iteracoes; tole-> se fornecer a tolerancia a alcancar.')


       end

   end
end

return;

Desde já um obrigado.

Octainne

Link to comment
Share on other sites

O polyder permite-te diferenciar polinómios, mas têm que ser polinómios sob a forma de arrays em que cada elemento representa um coeficiente... Não sei como converter function handles em arrays, e provavelmente precisas de derivar funções que não sejam polinómios.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Eu já sou capaz de derivar a função, só que a sua derivada não e uma function handle, e o que se vão passar é o seguinte:

>> syms x
>> func1 = x^2

func1 =

x^2


>> func=@(x) func1

func = 

    @(x)func1

>> func(3)

ans =

x^2

E o que eu pretendo é:

>> func=@(x) x^2

func = 

    @(x)x^2

>> func(3)

ans =

     9
Link to comment
Share on other sites

O matlab não é um programa de cálculo algébrico, é um interpretador de funções matemáticas.

como tal não é possível aplicar uma operação algébrica a uma função arbitrária.

A forma de derivar uma função é numéricamente recorrendo à definição.

Se quiseres definir a derivada de uma função, cria uma outra função que chame a primeira, pega no array resultante, calcula a Taxa de Variação média entre cada dois pontos consecutivos, e devolve esse array. Tão simples quanto isso.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.