Aritmética com Maple: Capítulo 3 Objetivos: 1. Estudar os tipos de dados numéricos disponíveis no Maple 2. Estudar as operações ariméticas disponíveis no Maple 3. Apresentar as funções de uso mais frequente Constantes Operadores e Funções: Se podemos usar o Maple como uma calculadora para calcularmos expressões aritméticas, podemos dispor também das constantes matemáticas , numéricas e simbólicas. O sistema distingue entre valores exatos e valores aproximados. Os inteiros, racionais e algébricos , as constantes simbólicas , , , true e false , são exatas . Os decimais são aproximados. Os complexos , ambas as partes , real e imaginária , são exatas ; em outros casos , são aproximados. Estas constantes podem combinar entre si , inclusive com as variáveis descritas nopróximo capítulo, para formar expressões. Funções matemáticas Função , ln x, no Maple exp(x), ln(x) ou log(x), log[b](x) sqrt(x) |x| abs(x) Mínimo, máximo min( , ,..., ), max( , ,..., ) Quociente e resto iquo(m,n), irem(m,n) Truncamento round(x), trunc(x) Parte fracionária frac(x) Máximo Divisor Comum gcd( , , ... , Sinal ), lcm( , , ... , ) signum(x), csgn(x) Trigonométricas sin(x), cos(x), tan(x) sec(x), csc(x), cot(x) Trigonométricas inversas arcsin(x), arcos(x), arctan(x) arcsec(x), arccsc(x), arccot(x) Hiperbólicas sinh(x), cosh(x), tanh(x) sech(x), csch(x), coth(x) Hiperbólicas inversas arcsinh(x), arccosh(x), arctanh(x) arcsech(x), arccsch(x), arccoth(x) GAMMA(x) --------------------------------------------------------------Operadores Racionais e lógicos operação Menor Menor ou igual Maior Maior ou igual Igual Diferente Conjunção Disjunção Negação símbolo < <= > >= = <> and or not exemplos 1<Pi, x+2<5 -(2+3)<=3*a 3*5>b, 3*y>6+3*x 6/4*x=6/(4*x) 6/4*x<>6/(4*x) 6/4*x<>6/(4*x) a and (b<1) a or b not(b<1) Números Inteiros e Racionais: O Maple pode armazenar e operar com números inteiros de grande tamanho sem transformá-los em números decimais, e portanto sem erros de arrendondamento. A representação e manipulação de inteiros se faz com a notação matemática usual: > restart; > 6/4, -2/3, 4/(-3); (1) > (1) > 6/4+(-2/3)*4/(-3)+abs(-4); (2) O quociente e o resto inteiros se obtêm através das funções: > iquo(17,3), irem(17,3); (3) O sistema pode manipular dados de grande tamanho: > 5!!/30^50; (4) O caracter \, que aparece no resultado anterior, serve para indicar que o dado continua na linha seguinte. O racional anterior pode se decompor em fatores primos por meio da função ifactor: > ifactor(%); (5) Expandindo o resultado anterior com a função expand comprova-se a sua validez: > expand(%); (6) Alguns valores excedem a capacidade do Maple: > 13!!; > 8!!; A capacidade do Maple de manipular dados de grande tamanho se deve à representação interna dos mesmos. De fato, um natural representa-se como um registro: O primeiro campo contém o INTPOS, que codifica informação sobre a estrutura dos dados, indicando dentre outras coisas, que se trata de um número positivo e o seu tamanho. O resto dos campos contém os dígitos do número da base B (B= numa máquina de 32 bits), do menos ao mais significativo e sem zeros na cabeceira. Esta estrutura representa o inteiro + +...+ . As limitações no tamanho dos dados que se podem manipular com essa representação são duas: - Em primeiro lugar, como a cabeceira armazena a longitude do inteiro, é decidir , o número de dígitos em base B, em um espaço de tamanho fixo (17 bits), essa longitude possui valor de ( *4=524288 dígitos decimais). É improvável alcançar este valor na prática, ainda que isso tenha ocorrido no exemplo anterior ao tentar calcular 8!! - Em segundo lugar, é possível que o Maple seja capaz de manipular um dado concreto, mas que este não cabe na memória disponível no ordenador que está usando. Com a informação anterior, pode-se imaginar que o Maple representa internamente um racional como um registro com três campos, o segundo e terceiro dosquais contêm o numerador e denominador da fração uma vez normalizada. Esta suposição é correta, salvo que os campos que contém os inteiros em questão, são ponteiros deles mesmos. Desta forma, se segue a regra que no Maple cada expressão se armazena somente uma vez. Números Algébricos O Maple pode operar com números algébricos utilizando dois tipos de representação. Uma, mediante os radicais, para números como que saõ expressáveis deste mmodo. Outra, mediante raízes de polinômios, que permite expressar todos os números algébricos. Em ambos os casos, a aritmética é exata. O Maple sabe passar de uma representação a outra quando o é possível. Exemplo de números algébricos representados como radicais. Obs: o sistema representa o número algébrico i, unidade imaginária, como I: > restart; > (-1)^(1/2); > O Maple realiza certas simplificações elementares como racionalizar: > (-2)^(9/2); reduzir expoentes: > (-2)^(9/2); simplificá-los: > (3^(1/2))^2,I^2,((-2)^(2/3))^(9/2); ou distribuí-los sobre fatores: > (3*2^(1/2))^(1/2); algumas simplificações mais complexas, que não se realizam de modo automático, podem obter-se com a função simplify : > (3^2)^(1/2),(2/27)^(2/3),1/(2^(1/2)+1); > simplify([%]); Como podemos observar, a função simplify não racionaliza .Para realizar este tipo de simplificação com expressões com radicais , e outras expressões mais complexas em geral, usa-se as funções descritas nos capítulos 9 e 10 . A função sqrt , também permite expressar raíz quadrada : > sqrt(3),sqrt(9),sqrt(-9),sqrt(12); > sqrt(4-2*sqrt(3)),sqrt(5+sqrt(24))+sqrt(5-sqrt(24)); Como podemos ver ,esta função realiza automáticamente certas simplificações. A representação interna dos radicais, se mostra como um registro com três campos , onde o segundo e o terceiro ponteiro apontam para a base e o expoente , respectivamente : A maioria dos números algébricos , não se pode expressar mediante radiacais, somente como raízes de polinômios. No Maple, conseguimos isto, usando uma função: que representa a raíz de um polinômio indeterminado , porém mais próximo deste valor.Se omitirmos o terceiro argumento, ela expressará qualquer uma das raízes do polinômio. Se omitirmos o segundo argumento, o Maple extrai a indeterminada do polinomio autmáticamente. Esta expressão corresponde tanto a representação externa como interna. Exemplo 1 (Números algébricos como raízes de polinõmios) Neste exemplo , expressamos quadrado do objeto 2. como uma das raízes do polinômio .Este sistema usará o > restart; > RootOf(x^2-2); Internamente, o Maple utiliza a variável _Z para todas as expressões RootOf . Igualmente como nas expressões com radicais , a aritmética e as simplificações com expressões RootOf não são automáticas. Para obtermos , utilizaremos as funções evala, que realizam um cálculo algébrico, o simplify : > %^2,1/%; > evala([%]); É comum utilizarmos um apelido para as expressões RootOf , utilizamos então um nome simbólico tanto para a entrada como para a saída : > alias(alfa=RootOf(x^5+9*x+3)); Ao utilizarmos a função alias , o Maple informa todos os alias definidos até o momento. Em particular, observamos que I é um alias. > evala([alfa^5+alfa,1/alfa,1/(alfa+1)]); Se o polinômio utilizado com RootOf for grau 1 , o Maple resulta uma variável indeterminada. Se for grau 0 , se produz um erro: > RootOf(2*x+1); > RootOf(2); > Através da função convert, o Maple pode passar da representação de um radical dada por RootOf, e vice-versa , quando há possibilidade : > convert(2^(1/2),RootOf),convert((1-2^(1/2))^(1/3),RootOf); > ### WARNING: note that `I` is no longer of type `radical` convert([%],radical); > ### WARNING: note that `I` is no longer of type `radical` convert(alfa,radical); Neste último caso , o Maple não pode realizar a conversão, pois o polinômio não é definido por radicais. Se o polinômio utilizado com RootOf não é redutível , a função simplify opera até onde pode , utilizando a raíz do número do polinômio em questão : > alias(beta=RootOf(x^2-x)); > simplify([beta^2,1/beta]); Ao contrario, evala verifica qual polinômio é redutível : > evala(beta^2); > evala(1/beta); > evala(beta); O sistema informa o surgimento das raízes 0 e 1 . Números transcendentes e funções elementares A menos de constantes numéricas, como os inteiros, racionais e radicais, o Maple pode manipular constantes simbólicas, como os números algébricos vistos na seção anterior , como os números transcendentes , , . Em todos os casos, se trata de valores exatos , dos quais o sistema conhece certas propriedades . Exemplo 2 (números transcendentes e funções elementares) Entre as constantes simbólicas, encontram-se os números e , representados como Pi e exp(1) , respectivamente : > restart; > abs(exp(1)-Pi),signum(2-exp(1)); As funções elementares (veja 3.3) quando atuam sobre dados exatos , devolvem resultados exatos: > sin(-Pi/6),sin(Pi/5),tan(Pi/12)^2,exp(0); > tan(Pi/2); Se o Maple não pode obter uma expressão mais simples para o resultado , nem automáticamente , nem com a ajuda da função simplify , ele devolve a expressão introduzida: > sin(Pi/7),exp(1/2),exp(-1); > simplify([%]); Estas expressões também são constantes simbólicas. Algumas funções admitem um número variável de argumentos: > min(1,-2),min(3,Pi,abs(I)),min(Pi,sqrt(10),a+1,a-1,a); Neste exemplo, verificamos que a função min, igual a outras como max, trunc, round, floor e ceil , são capazes de realizar simplificações simbólicas. Entre outras coisas, existe o uso da função signum para determinar que . Números Decimais Os números decimais se escrevem no Maple usando ponto decimal, notação científica da função : . cujos argumentos são inteiros e representam o número Exemplo 3 (Representação de números decimais) Todas as expressões seguintes representam o mesmo número decimal : > restart; . > -4.70,-0.47E1,-4700e-3; > Float(-470,-2),Float(-47,-1),Float(-4700,-3); Ao contrário, veja o seguinte racional: > -470*10^(-2); A representação externa dos decimais através da função Float, se correspnde diretamente a representação interna , esquematizada abaixo: Os números decimais são dados aproximados. Quando o Maple os manipula, os arredonda utlizando arimética decimal de precisão arbitrária, o que significa que o número de dígitos a utilizar , é finito, pode ser tão grande como se queira. Exemplo 4 (Aritmética decimal de precisão arbitrária) Quando uma expressão está formada por dados exatos , o Maple calcula de modo exato, devolvendo em forma simbólica aquelas subexpressões que não pode calcular : > restart; > 4/6+2,exp(2),sqrt(12)/2^4-tan(Pi/4)+cos(1); Por outro lado, quando uma expressão contém algum dado aproximado, o Maple calcula utilizando aritmética aproximada. O número de dígitos que o sistema usa para as operações aritméticas decimais não é o número de operandos , mas sim o valor da variável global Digits, que por default é 10. > Digits; > 4/6+2.,exp(2),sqrt(12.)/2^4-tan(Pi/4)+cos(1.); Ao modificarmos o valor da variável Digits , as operações aritméticas aproximadas subsequentes , serão feitas com a nova precisão: > Digits:=4; > > 4/6+2.,exp(2),sqrt(12.)/2^4-tan(Pi/4)+cos(1.); A aritmética decimal está sujeita a erros de arredondamento : > (1+.0003)+.0003<>1+(.0003+.0003); Este exemplo, nos mostra que , a soma em modo aproximado não é associativa, pois se faz um arredondamento em cada operação. O Maple não reconhece imediatamente o resultado seguido como zero : > (1+sqrt(2))^2-3-2*sqrt(2); > simplify(%)<>(1+sqrt(2.))^2-3-2*sqrt(2.); Desta forma vemos que , se usarmos a simplificação em modo exato o resultado é diferente do modo aproximado devido aos erros de arredondamento. Para obtermos uma aproximação decimal de uma expressão, utilizamos a função evalf(expressão,n) que aproxima para o primeiro argumento o número de dígitos expecificado no segundo. Este segundo argumento é opcional, e caso seja omitido o Maple utiliza o valor da variável Digits . Exemplo 5 (Cálculos Aproximados) Podemos aproximar os valores de várias constantes e funções elementares e especias: > restart; > Pi<>evalf(Pi,200); > Digits:=50:exp(1)<>evalf(exp(1));Digits:=10: > sin(3)<>evalf(sin(3)); Podemos produzir diferenças entre calcular com aritmética decimal e logo em seguida fazermos o arredondamento, e calcularmos com aritmética decimal o arredondamento em cada etapa : > evalf((1/9)^1000)<>(1/9.)^1000; A capacidade das funções como min de realizar simplificações simbólicas tem algumas limitações. Por exemplo, Maple não é capaz de calcular o mínimo entre e uma aproximação decimal de seu valor com a precisão atual dada por Digits : > min(Pi , evalf(Pi)); A função evalf aproxim os números algébricos expressados na forma RootOf a uma raíz mais próxima do argumento numérico quando este é utilizado : > evalf([RootOf(x^2-2,-1),RootOf(x^2-2,1),RootOf(x^2-2)]); > evalf([RootOf(x^3+8),RootOf(x^3+8,1+I)]); Números Complexos Já vimos que a unidade imaginária I , é um alias de um número algébrico .Os números complexos são polinômios em I . Quando operamos com estes números , o Maple usa a informação de que .Para realizar operações com complexos , ele dispõem das funções da tabela 3.5. Tabela 3.5 Funções para operar com números complexos Exemplo 6 (Operações com números complexos) Quando os dados são numéricos , a aritmética complexa realiza automáticamente. E inclui a aritmética racional complexa e a aritmética decimal complexa : > restart; > (1/2+I)*(2+I)/(5-3*I)^2,sin(1./3-1/2*I)^2; Quando aparecem dados simbólicos e se deseja uma expansão completa, é preciso utilizar a função evalc , que calcula o argumento a um número complexo expressado de forma binomial : > exp(1)^(I*Pi),(sqrt(2)+I)*I,I^(1/2),2^I; > evalc([%]); > exp(2+Pi/3*I),ln(2+Pi/3*I); > evalc([%]); > ((-2)^3)^(1/3); > evalc(%),simplify(%); > sqrt(55/36+4/3*I); Como podemos observar pelos exemplos anteriores, o Maple utiliza a parte principal para simplificar as raízes complexas. As funções Re e Im calculam as partes real e imaginária de um complexo . Estas funções realizam simplificações simbólicas. > ln(Pi-sqrt(10))+sqrt(cos(2)); > Re(%),Im(%); As funções comjugate , abs e argument retornam o conjugado, módulo e argumento principal de um complexo, respectivamente : > conjugate(2+3*I),conjugate(exp(3*I)); > abs(2+3*I),abs(exp(2-3*I)),abs(-1); > argument(2+3*I),argument(exp(2-3*I)),argument(-1); A função csgn calcula o sinal do complexo, definindo como, 1 se a parte real é positiva ou se a parte real é 0 e imaginária positiva ; 0 se o complexo é 0 , e -1 em outros casos. Esta função é utilizada para aplicar certas regras de simplificação : > csgn(1-2/3*I),csgn(-1-2/3*I),csgn(0); A função evalc assume que as variáveis apresentadas em uma expressão são reais : > Re(a+I*b),abs(a+I*b),conjugate((2+3*I)*x); > evalc([%]); Aritmética Modular Para realizarmos aritmética modular com o Maple, utilizaremos o operador mod . Exemplo 7 (Aritmética modular) É possível realizar as operações aritméticas soma, resto e módulo de um produto de um inteiro dado , assim como o inverso quando este existir : > restart; > 2345 mod 6,3-11 mod 6,24*45 mod 6,1/5 mod 6; O número 4 não é inversível para o conjunto dos inteiros módulo 6 : > 1/4 mod 6; Ao contrário, vimos que , se ele pertencer ao conjunto primo : , veremos que existe por 7 ser um número > 1/4 mod 7; O inconveniente da aritmética modular, tal como ela é implementada no Maple, é a necessidade de utilizarmos o operador mod em cada operação. Não é possível para o Maple realizar todos os cálculos subsequentes módulo a um inteiro fixo.