0%
Pular para o conteúdo principal
0%

2.3.2 Exemplo: Diferenciação Simbólica

Como uma ilustração de manipulação de símbolos e um exemplo adicional de abstração de dados, considere o design de uma função que realiza diferenciação simbólica de expressões algébricas.

Regras de Derivação

O programa implementa quatro regras básicas de diferenciação:

dcdx=0(constante)dxdx=1(variaˊvel)d(u+v)dx=dudx+dvdx(soma)d(uv)dx=udvdx+vdudx(produto)\begin{array}{ll} \dfrac{dc}{dx} = 0 & \text{(constante)} \\[10pt] \dfrac{dx}{dx} = 1 & \text{(variável)} \\[10pt] \dfrac{d(u+v)}{dx} = \dfrac{du}{dx} + \dfrac{dv}{dx} & \text{(soma)} \\[10pt] \dfrac{d(uv)}{dx} = u\dfrac{dv}{dx} + v\dfrac{du}{dx} & \text{(produto)} \end{array}

Representação de Expressões Algébricas

Usamos notação de prefixo para representar expressões. Por exemplo, a expressão ax + b é representada como:

list("+", list("*", "a", "x"), "b")

O Programa de Diferenciação

Carregando playground de código...

Representando Expressões Algébricas

Implementamos os seletores e construtores para expressões:

Carregando playground de código...

Simplificação Algébrica

Podemos melhorar o programa fazendo os construtores realizarem simplificação:

Carregando playground de código...

Exercícios

Exercício 2.56: Estenda o programa básico de diferenciação para lidar com mais regras de diferenciação, como a regra da potência.

Exercício 2.57: Estenda o programa de diferenciação para lidar com somas e produtos de quantidades arbitrárias de termos (dois ou mais).

Exercício 2.58: Suponha que queremos modificar o programa de diferenciação para que ele funcione com notação algébrica ordinária (infixa), em que + e * são operadores infixos. Como o programa precisaria ser modificado?

📝 Encontrou algo errado nesta página?

Sua ajuda é muito importante para melhorar a qualidade da tradução!

🐛 Encontrou um erro?

Se você encontrou:

  • Erro de tradução (palavra incorreta, termo técnico errado)
  • Erro de ortografia ou gramática
  • Link quebrado
  • Código de exemplo que não funciona
  • Problema de formatação

Reporte um bug →

❓ Tem uma dúvida?

Se você tem:

  • Dúvida sobre o conteúdo desta seção
  • Pergunta sobre um conceito do SICP
  • Dificuldade em entender algum exemplo
  • Questão sobre a tradução de algum termo

Inicie uma discussão →

💡 Tem uma sugestão de melhoria?

Se você quer sugerir:

  • Melhoria na explicação
  • Exemplo adicional
  • Recurso visual (diagrama, ilustração)
  • Qualquer outra ideia

Sugira uma melhoria →

🌍 Quer discutir a tradução?

Se você quer debater:

  • Escolha de tradução de algum termo
  • Consistência de terminologia
  • Nuances do português

Discussão de tradução →

Obrigado por ajudar a melhorar o SICP.js PT-BR! ✨