• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Octainne

[MatLab] Derivar uma funcao

8 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é que escreveste

func = @(x) func  e não  func = @(x) func1

?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, era isso que queria dizer, enganei-me a passar para o fórum.

já alterei a resposta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se quiseres derivar à bruta simbolicamente usa o Mathematica :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora