Programa para derivação de funções matemáticas polinomiais
Publicado por Ewerton Daniel de Lima (última atualização em 12/03/2010)
[ Hits: 13.094 ]
Implementação de uma aplicação que resolve derivação em função polinomial de uma variável usando técnicas de derivação.
# -*- 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
Unescape de caracteres especiais ISO-8859-1
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Não consigo acessar os modos de desempenho (2)
Ubuntu — tentando iniciar o windows? (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba