Bem vindo ao site pauloferreira.pt. Esta página e todos os seus conteúdos são propriedade de Paulo Ferreira. Encontrará temas relacionados com a sua actividade profissional, nomeadamente a informática, o AutoCAD, o Revit, o Civil 3D ou o 3ds max, a fotografia e o timelapse.

Formula resolvente em lisp

Escrito por Paulo Ferreira. Publicado em Profissional

Tutorial - [Formula resolvente em Lisp]

Para quem já ouviu falar na fórmula resolvente, deixo aqui algumas linhas sobre a forma de conseguir que, com base na linguagem Lisp, consigamos por a funcionar esta formula. Para isso necessitamos do Autocad para executar um pequeno programa capaz de resolver esta equação. Ela permite resolver equações com uma variável, podendo essa variável ser elevada ao quadrado. A isto dá-se o nome de polinómio de segundo grau. Normalmente conhecemos a forma canónica desse polinómio da seguinte maneira: a.x?+b.x+c=0

Sendo a, b e c numeros reais, x é o valor que se pretende calcular de forma que a equação seja verdadeira.

Verificando-se a situação de os valores de a, b e c não serem todos diferentes de 0, a solução é sempre mais simples. Pelo contrário, se forem todos diferentes de 0,  é aqui que entra a chamada formula resolvente, que permite a produção de dois resultados, que verificam a condição. Em algumas situações podem surgir uma única solução, ou que não exista nenhuma solução real, sendo este o caso em que a solução dever ser sempre em numeros complexos.

A fórmula resolvente é conhecida desta forma:

 

 

As duas soluções dizem respeito cada uma, é utilização diferente de um sinal ( + ou - )

Ora,  é aqui que entra o Autolisp para resolver estas duas equações, que se representam da seguinte forma (mudando apenas o sinal):

  1. ( / (+ (-b) (sqrt (- (expt b 2) (*4 a c)))) (*2 a)))
  2. ( / (- (-b) (sqrt (- (expt b 2) (*4 a c)))) (*2 a)))

A diferença é visível no segundo operador, em que no primeiro caso é soma e no segundo é a subtracção. Em baixo deixo o código Lisp para a rotina poder ser carregada no Autocad:

(defun c:resolvente ( )

; primeiro, pedimos a introdução dos 3 coeficientes
(setq a (getreal "\n Introduza o valor de a :"))
(setq b (getreal "\n Introduza o valor de b :"))
(setq c (getreal "\n Introduza o valor de c :"))
; depois, aplicamos a fórmula que dá as duas soluções reais
(setq sol1 (/ (- (- b) (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a)))
(setq sol2 (/ (+ (- b) (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a)))
; por fim mostram-se os resultados
(prompt "\nsolução 1 = ")<br />?(prompt (rtos sol1 2 2))<br />?(prompt "\nsolu??o 2 = ")<br />?(prompt (rtos sol2 2 2))<br />?(prompt "\n")<br />)</span></p> <p>A resposta após introdução dos valores de a=2 b=4 e c=1 dá o seguinte:</p> <p>Command: <strong>resolvente<br /></strong>Introduza o valor de a :<span style="color: #ff6600;">2</span><br />Introduza o valor de b :<span style="color: #ff6600;">4<br /></span>Introduza o valor de c :<span style="color: #ff6600;">1

solução 1 = -1.71
solução 2 = -0.29
nil

Para que consiga "rodar" esta rotina deverá copiar o código em cima (a azul) e colocá-lo num ficheiro do tipo txt e grava-lo. De seguida mude a terminação txt para lsp. Finalmente deverá carregar a rotina no Autocad através do Menu Tools - Load Application.

Escreva resolvente na linha de comando e entre com os valores pedidos para que a solução seja apresentada.

Espero que este tutorial seja útil e até breve.