Sharednotebooks / 2.ExpressoesSimbolicas-Equacoes.ipynbOpen in CoCalc
%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>
%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>
# Exemplo: Manipulando Expressões Simbólicas com subs
a,x=var('a,x'); y=cos(x+a)*(x+1);y
show(y)
# 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
# Mesmo Exemplo: Procedimento Alternativo
y(a=-x);
y(x=pi/2,a=pi/3);
y(x=0.5,a=2.3);
%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>
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 =)
%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>
# 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
# 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))
%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>

# 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())
%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>
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())
%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>
# 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())
# 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
# Exemplo: reduce_trig ("lineariza")
f = cos(x)^6;
show(f.reduce_trig())
# Exemplo: expand_trig
f = sin(5 * x);
show(f.expand_trig())
#Exemplo: Simplificação de Fatoriais
n = var('n'); f = factorial(n+1)/factorial(n)
f.simplify_factorial()
# 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
%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>
#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)
#Exemplo: Raiz quadrada de número não negativo: Agora, OK
y=var('y')
# Usando forget(): OK
forget(y<0)
sqrt(y)
# Outro Exemplo: Assumindo que n é inteiro
n = var('n'); assume(n, 'integer'); sin(n*pi).simplify()
%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>
# 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))
# Exemplo: Caso (b)
y = var('y'); solve(y^6==y, y)
show(solve(y^6==y, y))
# 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
%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>
# 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)
# Solução Numérica com find_root no intervalo [0.1,pi]
find_root(expr,0.1,pi)
# Solução com transformação da expressão
f=expr.simplify_trig();show(f)
solve(f,x)