Linux slogan
Visite também: BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Ewerton Daniel de Lima em (última atualização em 12/03/2010)   [ 5604 hits ]

Login: ewertondaniel, 198326 pontos

Download:


Descrição

Implementação de uma aplicação que resolve derivação em função polinomial de uma variável usando técnicas de derivação.


[ Download: derivação.rar ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

# -*- coding: utf-8 -*-

'''
Implementação de programa que resolve derivação em função de uma
variável usando técnicas de derivação
'''

from estruturas.equacao import Equacao
from copy import copy

def derivar(equacao, em_funcao):
    '''
    Função base, que identifica a derivada e executa recursivamente
    a derivação de acordo com a regra aplicável a derivação do termo.
    '''
    assert isinstance(equacao, Equacao), 'É esperado um objeto do\
                     tipo Equacao'
    assert isinstance(em_funcao, str),'É esperado um objeto do tipo str'
    #Condicional definido para a regra 4 - derivar_simples
    if isinstance(equacao[0], (int, float)):
        return derivar_simples(equacao, em_funcao)
    #Condicional definido para a regra 2, derivada de uma soma
    elif equacao[0] == '+':
        return derivar_soma(equacao, em_funcao)
    #Condicional definido para a regra 1, derivada de uma multiplicação
    elif equacao[0] == '*':
        return derivar_mult(equacao, em_funcao)
    #Condicional definido para  a regra 3, derivada de um quociente.
    elif equacao[0] == '/':
        return derivar_div(equacao, em_funcao)

def derivar_simples(equacao, em_funcao):
    '''
    Aplica a derivação de acordo com a Regra 4
    O índice 0 corresponde ao multiplicador.
    O índice 1 corresponde a variável.
    O índice 2 corresponde ao valor da exponencial.
    '''
    #Deriva, se a derivada está em função da função fornecida.
    if equacao[1] == em_funcao:
        eq_aux = Equacao()
        eq_aux.append(equacao[0]*equacao[2])
        eq_aux.append(equacao[1] if equacao[0]*equacao[2] !=0 else 'del')
        eq_aux.append(equacao[2]-1)
        return eq_aux
    else:
        eq_aux = Equacao()
        eq_aux.append(0)
        eq_aux.append(equacao[1])
        eq_aux.append(equacao[2])
        return eq_aux


def derivar_soma(equacao, em_funcao):
    '''
    Aplica a derivação de acordo com a regra 2 e aplica recursivamente
    a função derivar, para derivar os termos, de acordo com respectiva
    técnica de derivação.
    O índice 0 corresponde ao valor da operação, no caso sempre será '+'
    O índice 1 corresponde ao primeiro termo da soma.
    O índice 2 corresponde ao segundo termo da soma.
    '''
    eq_aux = Equacao()
    eq_aux.append(equacao[0])
    eq_aux.append(derivar(equacao[1], em_funcao))
    eq_aux.append(derivar(equacao[2], em_funcao))
    return eq_aux


def derivar_mult(equacao, em_funcao):
    '''
    Aplica a derivação de acordo com a regra 1 e aplica recursivamente
    a funçao derivar, para derivar os termos, de acordo com respectiva
    técnica de derivação.
    '''
    eq_aux = Equacao()
    eq_aux.append('+')

    #Define equação formada pelo primeiro termo
    #O primeiro termo vezes a derivada do segundo termo
    eq_termo1_aux = Equacao()
    eq_termo1_aux.append('*')
    eq_termo1_aux.append(equacao[1])
    eq_termo1_aux.append(derivar(equacao[2], em_funcao))

    #Define equação formaa pelo segundo termo
    #A derivada do primeiro termo vezes o segundo termo
    eq_termo2_aux = Equacao()
    eq_termo2_aux.append('*')
    eq_termo2_aux.append(derivar(equacao[1], em_funcao))
    eq_termo2_aux.append(equacao[2])

    #Adiciona os termos a equação resultante
    eq_aux.append(eq_termo1_aux)
    eq_aux.append(eq_termo2_aux)

    return eq_aux
    
def derivar_div(equacao, em_funcao):
    '''
    Aplica a derivação de acordo com a regra 3 e efetua recursivamente
    a funçao derivar, para derivar os termos, de acordo com respectiva
    técnica de derivação.
    '''
    #Define o primeiro termo da derivada, derivada do primeiro termo vezes o
    #segundo
    eq_termo1a_aux = Equacao()
    eq_termo1a_aux.append('*')
    eq_termo1a_aux.append(derivar(equacao[1], em_funcao))
    eq_termo1a_aux.append(equacao[2])

    #Define a segunda parte do primeiro termo.
    eq_termo1b_aux = Equacao()
    eq_termo1b_aux.append('*')
    #Torna o primeiro termo negativo, para a operação '+' ser usada mesmo se
    #tratando de uma subtração
    termo_aux = copy(equacao[1]) #Necessário?
    termo_aux[0] *= -1
    eq_termo1b_aux.append(termo_aux)
    eq_termo1b_aux.append(derivar(equacao[2], em_funcao))

    eq_termo1_aux = Equacao()
    eq_termo1_aux.append('+')
    eq_termo1_aux.append(eq_termo1a_aux)
    eq_termo1_aux.append(eq_termo1b_aux)  
    
    #Define o termo 2 da divisão, o segundo termo da divisão ao quadrado
    eq_termo2_aux = Equacao()
    #Tratar caso que o quociente for uma equação
    if isinstance(equacao[2][0], str):
        eq_termo2_aux.append('*')
        eq_termo2_aux.append(equacao[2])
        eq_termo2_aux.append(copy(equacao[2]))
    else:
        eq_termo2_aux.append(equacao[2][0]*equacao[2][0])
        eq_termo2_aux.append(equacao[2][1])
        eq_termo2_aux.append(equacao[2][2]*2)

    #Define a equacão resultande
    eq_aux = Equacao()
    eq_aux.append('/')
    eq_aux.append(eq_termo1_aux)
    eq_aux.append(eq_termo2_aux)

    return eq_aux





Scripts recomendados
   Script Linux recomendado Advinha v0.0.1
   Script Linux recomendado Correios - Rastreador de encomendas
   Script Linux recomendado Geometria Analítica
   Script Linux recomendado QFacil 0.2 - Qemu simplificado.
   Script Linux recomendado Password generator

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.