Sharednotebooks / 2.ExpressoesSimbolicas-Equacoes.ipynbOpen in CoCalc
Author: Sergio Luis Lopes Verardi
In [ ]:
%html <h2 style="color: rgb(51, 102, 255);">1. Resumo do Tutorial</h2> <br style="font-family: Verdana;"> <span style="font-family: Verdana;">Através de exemplos simples serão apresentadas algumas funções úteis no estudo de Álgebra e Análise.<br> Em particular, estudaremos as <span style="color: rgb(51, 102, 255);">expressões simbólicas</span> no Sage e procedimentos de <span style="color: rgb(51, 102, 255);">simplificação</span> dessas expressões.<br> Finalmente, veremos exemplos de <span style="color: rgb(51, 102, 255);">resolução</span> de equações algébricas e transcendentes.<br> </span>
In [ ]:
%html <h2 style="color: rgb(51, 102, 255);">2. Expressões Simbólicas</h2> <br style="font-family: Verdana;"> <span style="font-family: Verdana;">O Sage permite efetuar todo tipo de cálculo a partir de expressões simbólicas que combinam números, variáveis simbólicas, operações aritméticas e funções básicas (sqrt, sin, exp, etc).<br> Em consequência, manipulando a expressão podemos transformá-la de modo que, no final do processo, a expressão se apresente da maneira que julgamos mais adequada.<br> <br> O Exemplo dado a seguir, consiste em avaliar uma fórmula matemática que contém, além da variável, um parâmetro. Através do comando <span style="font-style: italic;">subs</span> a fórmula (geral) pode ser avaliada para diferentes valores (não necessariamente numéricos) da variável e do parâmetro. Em seguida, é apresentado um procedimento alternativo ao comando subs (e mais direto).<br> </span>
In [ ]:
# Exemplo: Manipulando Expressões Simbólicas com subs a,x=var('a,x'); y=cos(x+a)*(x+1);y show(y)
In [ ]:
# Três diferentes substituições para a e x # Mas observe que y, ou seja,a expressão y=cos(x+a)*(x+1) nunca se altera; apenas o resultado da substituição se modifica # E poderia ser atribuido a outra variável ( o y estará sempre disponível para uso futuro) y.subs(a=-x); # após o subs, o Sage simplifica o resultado como você faria no papel; verifique ! y.subs(x=pi/2, a=pi/3); # subs simbólico, o resultado não é avaliado numericamente y.subs(x=0.5, a=2.3) # subs com valores numéricos (ponto decimal!); neste caso o resultado é numérico gg = y.subs(x=pi/2, a=pi/3); # atribui resultado do subs à variável gg show(gg) # exibe conteúdo de gg como uma fórmula
In [ ]:
# Mesmo Exemplo: Procedimento Alternativo y(a=-x); y(x=pi/2,a=pi/3); y(x=0.5,a=2.3);
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 102, 255);">Substituição de Sub-expressões<br> <br> </span></span><span style="font-family: Verdana;">Além de substituir variáveis, podemos também substituir sub-expressões inteiras dentro de uma expressão simbólica.<br> Para tanto, é usado o comando <span style="color: rgb(51, 102, 255);">substitute</span>. Observe, no exemplo, que $x^3$ é substituído simbolicamente por $y^2$; observe, também, o uso de um duplo igual (==).<br> <br> </span>
In [ ]:
y,z=var('y,z') # define variáveis f=x^3+y^2+z # definição inicial da função f f.substitute(x^3==y^2) # manipulação simbólica de f (para sub-expressões, usar ==; para variáveis, usar =)
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 102, 255);"><span style="color: rgb(51, 51, 255);">Transformações de Expressões</span><br> <br> </span></span><span style="font-family: Verdana;">Mais especificamente, veremos comandos do Sage que permitem a manipulação de polinômios e funções racionais.<br> <br> <span style="color: rgb(51, 51, 255);">Polinômios</span><br> <br> O comando <span style="font-style: italic; color: rgb(51, 102, 255);">expand</span> permite desenvolver um polinômio enquanto o comando <span style="font-style: italic; color: rgb(51, 102, 255);">collect</span> agrupa os termos do polinômio de acordo com a potência da variável fornecida.<br> </span>
In [ ]:
# Exemplo: Aplicando expand a um Polinômio x, y = var('x,y') p = (x+y)*(x+1)^2 # define o polinômio p p2 = p.expand(); p2 # desenvolve o polinômio p, atribui a p2 e exibe # Agora, agrupa termos de acordo com as potências da variável x p3=p2.collect(x); p3 # Os polinômios são iguais? Confira a resposta bool(p3==p2) # Agrupa termos de acordo com as potencias de y p4=p2.collect(y); p4
In [ ]:
# Exemplo Mais Complexo: Agrupando termos de acordo com potências de sub-expressão (sin(x)) f=(x+y+sin(x))^2 g=f.expand() g.collect(sin(x)) # Comandos aninhados (mesmo resultado) f.expand().collect(sin(x))
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Funções Racionais</span><br> <br> Considere a função $r=\frac{x^3+x^2y+3x^2+3xy+2x+2y}{x^3+2x^2+xy+2y}$; acompanhe os exemplos fornecidoa seguir.<br> <br> </span>
In [ ]:
In [ ]:
# Exemplo de vários comandos aplicados a Funções Racionais x, y = var('x,y') r=(x^3+x^2*y+3*(x^2)+3*x*y+2*x+2*y)/(x^3+2*(x^2)+x*y+2*y);show(r) # Usando show() para facilitar visualização show(r.simplify_rational()) show(r.factor()) show(r.factor().expand())
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Outro Exemplo de Funções Racionais</span><br> <br> Considere, agora, a função $r=\frac{(x-1)x}{x^2-7}+\frac{y^2}{x^2-7}+\frac{b}{a}+\frac{c}{a}+\frac{1}{x+1}$; acompanhe os exemplos fornecidos a seguir.<br> Observe o comando&nbsp;<span style="font-style: italic; color: rgb(51, 102, 255);">combine</span> que agrupa termos que têm o mesmo denominador;<br> <br> </span>
In [ ]:
a, c, b, x,y=var('a','b','c','x','y') rr=((x-1)*x)/(x^2-7)+(y^2)/(x^2-7)+b/a+c/a+1/(x+1) show(rr.combine())
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Funções Matemáticas Elementares e suas Transformações</span><br> <br> O Sage fornece, entre outras, as seguintes funções elementares:<br> <br> <span style="color: rgb(51, 51, 255);">exp, log, log(x,a) (logaritmo de x na base a), sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, sqrt, hth_root (raiz n-ésima)</span><br> <br> A seguir, são apresentados vários exemplos de transformações aplicáveis a essas funções matemáticas. Verifique, com lápis e papel, cada uma delas.<br> </span><span style="font-family: Verdana;"><br> <br> </span>
In [ ]:
# Exemplo: Simplificação da Função Exponencial (anteriormente era simplify_exp, abandonada em favor de canonicalize_radical) f = (e^x-1) / (1+e^(x/2)); show(f) show(f.canonicalize_radical())
In [ ]:
# Exemplos: Transformação de Funções Trigonométricas f = cos(x)^6 + sin(x)^6 + 3 * sin(x)^2 * cos(x)^2 show(f) show(f.simplify_trig()) # Simplificação
In [ ]:
# Exemplo: reduce_trig ("lineariza") f = cos(x)^6; show(f.reduce_trig())
In [ ]:
# Exemplo: expand_trig f = sin(5 * x); show(f.expand_trig())
In [ ]:
#Exemplo: Simplificação de Fatoriais n = var('n'); f = factorial(n+1)/factorial(n) f.simplify_factorial()
In [ ]:
# Exemplo: Simplificação de Funções Raiz Quadrada, Exponencial, Logaritmo (anteriormente, era simplify_radical) f1 = sqrt(abs(x)^2); f1.canonicalize_radical() # Raiz Quadrada f2 = log(x*y); f2.canonicalize_radical() # Logaritmo
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 102, 255);"><span style="color: rgb(51, 51, 255);"></span></span></span><span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Condições Sobre Variáveis Simbólicas</span><br> <br> Em muitas situações, as variáveis não podem assumir qualquer valor, estando restritas a um domínio particular, por exemplo, os reais positivos.<br> O Sage fornece os comandos <span style="font-style: italic; color: rgb(51, 102, 255);">assume()</span> e <span style="color: rgb(51, 102, 255); font-style: italic;">forget()</span> para impor (ou retirar) restrições deste tipo.<br> <br> Um caso típico é o da simplificação da raiz quadrada $\sqrt{x^2}$.<br> </span>
In [ ]:
#Exemplo: Raiz quadrada de número negativo: o Sage avisa que está errado ("Assumption is inconsistent") #y=var('y') forget(y>0) assume(y<0) sqrt(y)
In [ ]:
#Exemplo: Raiz quadrada de número não negativo: Agora, OK y=var('y') # Usando forget(): OK forget(y<0) sqrt(y)
In [ ]:
# Outro Exemplo: Assumindo que n é inteiro n = var('n'); assume(n, 'integer'); sin(n*pi).simplify()
In [ ]:
%html <h2 style="color: rgb(51, 102, 255);"><span style="font-family: LMMono10-Regular;">3</span>. Resolução de Equações</h2> <br style="font-family: Verdana;"> <span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Solução Simbólica Explícita<br> <br> </span></span><span style="font-family: Verdana;">O Sage permite resolver equações tanto simbolicamente como numericamente e também sistemas de equações e, até mesmo, inequações.<br> Primeiro, vamos exemplificar a resolução simbólica das seguintes equações, o que é feito através do comando <span style="color: rgb(51, 102, 255); font-weight: bold; font-style: italic;">solve()</span>:<br> <br> a)$ z^2-\frac{2}{\cos{\phi}}z+\frac{5}{\cos^2{\phi}}-4=0$<br> b)$ y^6=y$<br> c)$ x+y=3,\quad 2x+2y=6$<br> <br> </span>
In [ ]:
# Exemplo: Caso (a) z, phi = var('z, phi') eq = z**2 - 2/cos(phi)*z + 5/cos(phi)**2 - 4 == 0; eq solve(eq, z) show(solve(eq,z))
In [ ]:
# Exemplo: Caso (b) y = var('y'); solve(y^6==y, y) show(solve(y^6==y, y))
In [ ]:
# Exemplo: Caso (c) solve([x+y == 3, 2*x+2*y == 6], x, y) # OBSERVAÇÃO IMPORTANTE: Este é um sistema indeterminado; então a solução é parametrizada em função de uma incógnita secundária, neste caso, r6
In [ ]:
%html <span style="font-family: Verdana;"><span style="color: rgb(51, 51, 255);">Solução Numérica Explícita<br> <br> </span></span><span style="font-family: Verdana;">No exemplo apresentado a seguir, o Sage não encontra a solução simbólica da equação. Neste caso específico, temos duas opções: resolver <span style="color: rgb(51, 102, 255);">numericamente</span>, através do comando <span style="font-style: italic; color: rgb(51, 102, 255);">find_root</span>, fornecendo um intervalo para o Sage determinar a raiz ou fazer uma <span style="color: rgb(51, 102, 255);">transformação</span> prévia que permita a solução numérica completa, de forma explícita, usando o comando <span style="color: rgb(51, 102, 255);">solve</span>.<br> A equação é:<br> <br> $ \sin{x}+\sin{2x}+\sin{3x}=0$<br> <br> <br> </span>
In [ ]:
# Exemplo: Solução não encontrada, observe que o Sage simplesmente repete a equação de outra maneira expr=sin(x)+sin(2*x)+sin(3*x) solve(expr,x)
In [ ]:
# Solução Numérica com find_root no intervalo [0.1,pi] find_root(expr,0.1,pi)
In [ ]:
# Solução com transformação da expressão f=expr.simplify_trig();show(f) solve(f,x)
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: