java-xsc: módulo complexo intervalar · java-xsc: módulo complexo intervalar marciano lourenço...

261
UNIVERSIDADE DO RIO GRANDE DO NORTE FEDERAL UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE I NFORMÁTICA E MATEMÁTICA APLICADA PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO JAVA-XSC: Módulo Complexo Intervalar Marciano Lourenço da Silva Gonçalves Orientador: Prof. Dr. Regivan Hugo Nunes Santiago Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Sistemas e Computação da UFRN (área de concentra- ção: Teoria da Computação) como parte dos requisitos para obtenção do título de Mestre em Sistemas e Computação. Natal, RN, fevereiro de 2012

Upload: vanlien

Post on 13-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE DO RIO GRANDE DO NORTEFEDERAL

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEDEPARTAMENTO DE INFORMTICA E MATEMTICA APLICADA

PROGRAMA DE PS-GRADUAO EM SISTEMAS E COMPUTAO

JAVA-XSC: Mdulo Complexo Intervalar

Marciano Loureno da Silva Gonalves

Orientador: Prof. Dr. Regivan Hugo Nunes Santiago

Dissertao de Mestrado apresentada aoPrograma de Ps-Graduao em Sistemas eComputao da UFRN (rea de concentra-o: Teoria da Computao) como parte dosrequisitos para obteno do ttulo de Mestreem Sistemas e Computao.

Natal, RN, fevereiro de 2012

Diviso de Servios Tcnicos

Catalogao da publicao na fonte. UFRN / Biblioteca Central Zila Mamede

Pereira, Fulano dos Anzis.Sobre a Preparao de Propostas de Tema, Dissertaes e Teses no Programa

de Ps-Graduao em Engenharia Eltrica da UFRN / Fulano dos Anzis Pereira- Natal, RN, 2006

23 p.

Orientador: Sicrano Matosinho de MeloCo-orientador: Beltrano Catandura do Amaral

Tese (doutorado) - Universidade Federal do Rio Grande do Norte. Centro deTecnologia. Programa de Ps-Graduao em Engenharia Eltrica.

1. Redao tcnica - Tese. 2. LATEX- Tese. I. Melo, Sicrano Matosinho de. II.Amaral, Beltrano Catandura do. III. Ttulo.

RN/UF/BCZM CDU 004.932(043.2)

Java-XSC: Mdulos Complexo e ComplexoIntervalar

Marciano Loureno da Silva Gonalves

Dissertao de Mestrado aprovada em 15 de fevereiro de 2012 pela banca examinadoracomposta pelos seguintes membros:

Prof. Dr. Regivan Hugo Nunes Santiago (orientador) . . . . . . . . . DIMAp/UFRN

Prof. Dr. Benjamin Rene Callejas Bedregal . . . . . . . . . . . . . . . . . . DIMAp/UFFN

Prof. Dr. Gibeon Soares de Aquinho Jnior . . . . . . . . . . . . . . . . . . DIMAp/UFRN

Este trabalho dedicado aos meuspais pela confiana que depositaram

em mim e por seu imenso carinho.

Agradecimentos

Ao meu orientador, professor Regivan Hugo Nunes Santiago, sou grato por suas obser-vaes, empenho e dedicao com que me orientou, tornando possvel a realizao destadissertao.

Aos colegas Regina Parente Rosa, pelo apoio nos momentos difceis. Emannuely Mon-teiro e Fabrcio Costa pelas interminveis horas estudando lgica.

Aos demais colegas de ps-graduao, pelas crticas e sugestes.

Aos amigos Reginaldo Aquino, Joafran Paiva e Leonardo Mozer, pelos momentos dedescontrao que me mantiveram so diante de tanto estudo.

minha famlia pelo apoio durante esta jornada.

CAPES, pelo apoio financeiro.

Resumo

Este trabalho tem por finalidade desenvolver mdulos que venham aumentar o po-der computacional da biblioteca JAVA-XSC, sendo XSC1 um acrnimo para LanguageExtensions for Scientific Computation. Essa biblioteca na verdade uma extenso da lin-guagem de programao JAVA que possui rotinas elementares e funes padro teis damatemtica intervalar. Neste trabalho foram acrescentados dois mdulos biblioteca; asaber: o mdulo dos nmeros complexos e o mdulo dos nmeros complexos intervalaresque em conjunto com os mdulos originais visam possibilitar que aplicaes numricas,como por exemplo na rea da engenharia, possam ser usadas em dispositivos que execu-tam programas JAVA.

Palavras-chave: JAVA, JAVA-XSC, Matemtica Intervalar, Nmeros Complexos,Nmeros Complexos Intervalares.

1http://www.xsc.de/

Abstract

This work aims to develop modules that will increase the computational power of theJava-XSC library, and XSC an acronym for "Language Extensions for Scientific Com-putation. This library is actually an extension of the Java programming language thathas standard functions and routines elementary mathematics useful interval. in this studytwo modules were added to the library, namely, the modulus of complex numbers andcomplex numbers of module interval which together with the modules original numericalapplications that are designed to allow, for example in the engineering field, can be usedin devices running Java programs.

Keywords: JAVA, JAVA-XSC, Interval Mathematics, Complex Numbers, ComplexNumbers Interval.

Sumrio

Sumrio i

Lista de Figuras iv

Lista de Tabelas v

1 Introduo 11.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Organizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Nmeros complexos 62.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Os Nmeros Complexos . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.1 Representao Algbrica . . . . . . . . . . . . . . . . . . . . . . 92.2.2 Representao Polar . . . . . . . . . . . . . . . . . . . . . . . . 112.2.3 Funes Complexas Elementares . . . . . . . . . . . . . . . . . 14

2.3 Nmeros complexos intervalares . . . . . . . . . . . . . . . . . . . . . . 162.3.1 Aritmtica Intervalar Real . . . . . . . . . . . . . . . . . . . . . 162.3.2 Aritmtica Complexa Intervalar Retangular . . . . . . . . . . . . 182.3.3 Aritmtica Complexa Intervalar Circular . . . . . . . . . . . . . 192.3.4 Aritmtica Complexa Intervalar Usando a Forma Polar . . . . . . 202.3.5 Funes Complexas Intervalares Elementares . . . . . . . . . . . 22

2.4 Consideraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3 Algumas ferramentas para clculo numrico 263.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.2 CLN (Class Library for Numbers) . . . . . . . . . . . . . . . . . . . . . 26

3.2.1 Tipos Numricos . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2.2 Nmeros Exatos . . . . . . . . . . . . . . . . . . . . . . . . . . 27

i

3.2.3 Nmeros de Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . 293.2.4 Nmeros Complexos . . . . . . . . . . . . . . . . . . . . . . . . 293.2.5 Funes de Arredondamento . . . . . . . . . . . . . . . . . . . . 30

3.3 GNU MP (GMP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.3.1 Nmeros Racionais . . . . . . . . . . . . . . . . . . . . . . . . . 313.3.2 Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.4 MPFR (Multiple Precision Floating-Point Reliable) . . . . . . . . . . . . 333.4.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 333.4.2 Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.5 MPFI (Multiple Precision Floating-Point Interval) . . . . . . . . . . . . 353.5.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 36

3.6 MPC (Multiple Precision Complex) . . . . . . . . . . . . . . . . . . . . 363.6.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 363.6.2 Funes Complexas . . . . . . . . . . . . . . . . . . . . . . . . 37

3.7 INTLIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.7.1 Simulao de Arredondamento Direcionado . . . . . . . . . . . . 40

3.8 COMMONS MATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.8.1 Organizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.8.2 Nmeros Complexos . . . . . . . . . . . . . . . . . . . . . . . . 42

3.9 Linguagens XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.9.1 PASCAL-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.9.2 C-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3.10 JAVA-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.10.1 A Linguagem de Programao JAVA . . . . . . . . . . . . . . . . 583.10.2 Desenvolvimento da Biblioteca . . . . . . . . . . . . . . . . . . 593.10.3 Pacote IAMath . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.10.4 Modo de Arredondamento . . . . . . . . . . . . . . . . . . . . . 61

3.11 Resumo Comparativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.12 Consideraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4 Mdulos Complexo e Complexo Intervalar 654.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.2 Os Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.2.1 Mdulo Complexo . . . . . . . . . . . . . . . . . . . . . . . . . 664.2.2 Mdulo Complexo Intervalar . . . . . . . . . . . . . . . . . . . . 69

4.3 Comparao entre C-XSC e JAVA-XSC . . . . . . . . . . . . . . . . . . 72

4.4 Consideraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5 Concluso 75

Referncias bibliogrficas 77

A Modos de Arredondamento 81A.1 Tipos de Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . . 81A.2 Arredondamento com o Incremento Pr-Determinado . . . . . . . . . . . 82A.3 Arredondamento para Inteiro . . . . . . . . . . . . . . . . . . . . . . . . 82A.4 Regras de Desempate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83A.5 Arredondamento Escalado . . . . . . . . . . . . . . . . . . . . . . . . . 85A.6 Arredondamento em Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . 86

B Cdigo Fonte da biblioteca JAVA-XSC 87

C Cdigo Fonte da Classe Complex 111

D Cdigo Fonte da Classe Cinterval 125

E Complexos Intervalares Utilizados no Teste T 193

Lista de Figuras

2.1 Interpretao geomtrica dos nmeros complexos . . . . . . . . . . . . . 122.2 Forma algbrica e polar do complexo c = 5+ i3 . . . . . . . . . . . . . . 13

3.1 Hierarquia dos tipos numricos em CLN . . . . . . . . . . . . . . . . . 283.2 Tamanho de uma varivel do tipo dotprecision . . . . . . . . . . . . . . . 513.3 Formato de um ponto-flutuante . . . . . . . . . . . . . . . . . . . . . . . 543.4 Complexo Intervalar [3.0,4.5] + i[1.0,2.0] . . . . . . . . . . . . . . . . . 56

4.1 Interface grfica da ferramenta GraphPad . . . . . . . . . . . . . . . . . 73

iv

Lista de Tabelas

3.1 Mdulos do INTLIB: Aritmtica elementar para intervalos . . . . . . . . 383.2 Mdulos do INTLIB: Funes padres para intervalos . . . . . . . . . . . 383.3 Mdulos do INTLIB: Funes teis . . . . . . . . . . . . . . . . . . . . 393.4 Mtodos da classe Complex . . . . . . . . . . . . . . . . . . . . . . . . . 423.5 Mtodos da classe ComplexFormat . . . . . . . . . . . . . . . . . . . . . 463.6 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . 633.7 Resumo comparativo entre as ferramentas . . . . . . . . . . . . . . . . . 63

4.1 Mtodos da classe Complex . . . . . . . . . . . . . . . . . . . . . . . . 674.2 Mtodos da classe Cinterval . . . . . . . . . . . . . . . . . . . . . . . . 70

E.1 Complexos Intervalares Utilizados no Teste T . . . . . . . . . . . . . . . 193

v

Captulo 1

Introduo

No surgimento dos primeiros computadores, e por alguns anos mais, o principal obje-tivo dos pesquisadores era obter ganhos de tempo com ferramentas que automatizassemos clculos matemticos e que tais clculos retornassem uma resposta o mais rpido pos-svel. Na medida em que surgem novas tecnologias e as antigas vo sendo aperfeioadas,chegou-se um ponto em que a velocidade do processamento das informaes deixou deser uma preocupao. A preocupao agora representar essas informaes de formacada vez mais precisa.

Alm disso, segundo [Santiago et al. 2006], um dos principais problemas encontradosna computao numrica eram os erros de arredondamento. Observe este exemplo deRump [Muller et al. 2009] que calcula

y = 333.75b6 +a2(11a2b2b6121b42)+5.5b8 +a/(2b)Para a = 77617.0 e b = 33096.0.

Esta funo foi computada por Rump em um IBM S/370 e ele usou trs tipos depreciso: simples (com resultado y = 1.172603...), dupla (y = 1.1726039400531...) e es-tendida (y = 1.172603940053178...). Apesar de aparentemente o resultado estar correto,ele est errado. O resultado correto encontra-se no intervalo 0.8273960599468213551017, pode-se observar que inclusive o sinal est errado. Este exemplo foi revisadoe computado em outras mquinas, mas o resultado permanecia errado.

Uma das propostas desenvolvidas para controlar os erros computacionais foi a mate-mtica intervalar. Em 1966, Moore props uma aritmtica intervalar que possibilitou umgrande avano nas pesquisas sobre o controle de erros computacionais. Esta aritmticatem por objetivos solucionar problemas que se concentram fundamentalmente em dois

CAPTULO 1. INTRODUO 2

aspectos: na criao de um modelo computacional que reflita sobre o controle e anlisedos erros que ocorrem no processo computacional, e na escolha de tcnicas de progra-mao adequadas para desenvolvimento de softwares cientficos buscando minimizar oserros nos resultados [Moore 1966].

A necessidade de ferramentas que dessem suporte a essa aritmtica fez com que sur-gissem algumas bibliotecas e tambm as linguagens com extenses cientficas, conhecidascomo XSC (Language Extensions Scientific Computation). Essas ferramentas favorecemo controle automtico de erros atravs de mtodos que se encarregam de verificar e ga-rantir a exatido dos clculos efetuados [Garrozi & Albuquerque 2009].

Algumas bibliotecas como a MPFI e INTLIB (Captulo 3), apresentam mdulos es-pecficos para o uso da aritmtica intervalar. Nestes mdulos foram desenvolvidos tantooperaes elementares; como: adio, subtrao, diviso e multiplicao, quanto funesmais elaboradas, tais como funes trigonomtricas.

As linguagens XSC permitem que desenvolvedores de softwares numricos possamcriar seus aplicativos atravs de uma linguagem bastante rica que tem como caractersticasfundamentais: controle de arredondamento, tipos de dados com exatido aps a vrgula,bibliotecas com as principais rotinas matemticas, arrays dinmicos, a utilizao dos ti-pos complexo e intervalo, entre diversas outras [Dutra 2000]. Ao longo do tempo vriaslinguagens XSC foram sendo desenvolvidas a partir de algumas linguagens de programa-o, o caso da PASCAL-XSC e C-XSC, que sero apresentadas no Captulo 3.

JAVA-XSC foi desenvolvida no Departamento de Informtica e Matemtica Aplicadada Universidade Federal do Rio Grande do Norte e d suporte a intervalos de extremos re-ais linguagem JAVA. Ela composta por seis mdulos: operaes bsicas, funes entreconjuntos, funes geomtricas, funes elementares, funes trigonomtricas e funesde converso entre tipos e definio de constantes. Apesar de estar em um nvel avan-ado, JAVA-XSC ainda no est completa. Uma das necessidades atuais da linguagem um mdulo que possa trabalhar tanto com nmeros complexos quanto com uma aritm-tica intervalar complexa.

Os nmeros complexos so na verdade uma extenso dos nmeros reais. Eles sugiramda necessidade de se obter solues em razes quadradas negativas, pois os matemticosrepresentavam os nmeros reais como pontos em uma reta, onde cada ponto corresponde

CAPTULO 1. INTRODUO 3

um nico nmero real. Com isso surgiu um grande problema, j que razes quadradas denmeros negativos no podem ser representados nesta reta.

O matemtico alemo Karl Friedrich Gauss props uma associao entre nmerosimaginrios e pontos sobre uma reta perpendicular reta real, passando pelo ponto zero,e assim surgiu um sistema de coordenadas cartesianas, onde os nmeros reais so postossobre o eixo horizontal (eixo real) e os nmeros imaginrios sobre a reta perpendicular(eixo imaginrio). Sendo assim, podemos representar

a como sendo

1

a ondea parte imaginria seria exatamente

1 e so colocados no eixo imaginrio como seus

mltiplos. Desta forma surgiram os nmeros complexos, onde no s os imaginrios sorepresentados, mas as possveis combinaes entre reais e imaginrios [Menochi 2004].

Com a ajuda da matemtica intervalar, possvel representar os nmeros complexosde uma forma mais precisa. Isto associado uma ferramenta numrica, poder facilitar acriao de novos aplicativos cientficos. E esta a proposta deste trabalho, o desenvolvi-mento de um mdulo complexo intervalar para a biblioteca JAVA-XSC.

1.1 Motivao

Neste trabalho foi tido como motivao a escassez de ferramentas de clculo num-rico desenvolvido para a linguagem de programao JAVA, principalmente em se tratandode uma ferramenta que d suporte a complexos intervalares. Existem algumas ferramen-tas como MPFI (Multiple Precision Floating-Point Interval) e MPC (Multiple PrecisionComplex), que trabalham respectivamente com intervalos e nmeros complexos, mas am-bas foram desenvolvidas para serem usadas com o compilador C ou C++ e a ferramentaCommons Math que especfica para JAVA, mas no apresenta funes que trabalhemcom complexos em sua forma polar.

A linguagem C-XSC possui mdulos especficos para trabalhar com complexos in-tervalares, como os tipos complexo (complex), intervalo (interval) e complexo intervalar(cinterval), mas como o prprio nome sugere, ela tambm foi desenvolvida para ser usadacom C e C++.

JAVA-XSC uma biblioteca desenvolvida especificamente para a linguagem Java queprov a utilizao de clculos numricos com controle dos erros. Segundo [Dutra 2000],para JAVA-XSC, existe a necessidade de serem elaborados mdulos que venham a traba-

CAPTULO 1. INTRODUO 4

lhar com matrizes, vetores intervalares e aritmtica intervalar complexa.

Por estas deficincias, tem-se por motivao a criao de dois mdulos em JAVA-XSCque venham a trabalhar com nmeros complexos e nmeros complexos intervalares, queno caso corresponderiam aos tipos complex e cinterval da C-XSC. Estes mdulos serocompostos por rotinas de aritmtica elementares, alm de funes padres e outras fun-es teis.

1.2 Objetivo

Este trabalho tem como pretenso, atravs do desenvolvimento destes mdulos, darcontinuidade ao trabalho que j vem sendo desenvolvido pelo Departamento de Inform-tica e Matemtica Aplicada da Universidade Federal do Rio Grande do Norte desde 2000, JAVA-XSC. Esta ferramenta uma extenso de suporte computao de alta exatidopara a linguagem de programao JAVA [da Silva 2007]. Nesta nova verso da ferramenta dado um mdulo especfico que prov meios para trabalhar com nmeros complexos in-tervalares.

Sendo assim, o objetivo principal deste trabalho est na construo de mdulos paraJAVA-XSC que ir aumentar, o j enorme, espectro de aplicao da linguagem JAVA,possibilitando que instrumentos como tablets e smartphones possam conter aplicaes deengenharia baseados na aritmtica retangular complexa.

1.3 Organizao

A presente dissertao se desenvolve em 5 Captulos, organizados conforme descritoa seguir.

No Captulo 2 apresentada uma breve introduo aos nmeros complexos e nmeroscomplexos intervalares, com seus histricos, conceitos, operaes e funes bsicas.

No Captulo 3 so apresentadas algumas ferramentas que do suporte ao clculo nu-mrico. Neste captulo sero descritas as caractersticas, funes e operaes de algumaslinguagens XSC, como PASCAL-XSC e C-XSC, que so linguagens apropriadas para

CAPTULO 1. INTRODUO 5

computao cientfica, alm da biblioteca JAVA-XSC.

No Captulo 4 mostram-se o desenvolvimento dos mdulos complexo e complexo in-tervalar para a ferramenta JAVA-XSC.

No Captulo 5 so apresentados as consideraes finais.

Alm disso o trabalho apresenta anexos contendo todos os cdigos fontes utilizadosno desenvolvimento dos mdulos, alm de um anexo especfico sobre modos de arredon-damento.

Captulo 2

Nmeros complexos

2.1 Introduo

De acordo com [Cerri & Monteir 2001], na primeira metade do sculo XVII os mate-mticos franceses Pierre de Fermat e Ren Descartes construram a Geometria Analtica.Com o domnio dessa nova linguagem da geometria, Descartes estudou, entre outras coi-sas, as equaes algbricas. Descartes mencionou em seu texto Discurso do Mtodo aseguinte afirmao: Nem sempre as razes verdadeiras ou falsas de uma equao soreais. s vezes elas so imaginrias. Com isto, at hoje o nmero

1 chamado de

nmero imaginrio.

Alguns personagens contriburam no desenvolvimento da teoria dos nmeros com-plexos, mas quem fez o trabalho mais importante e decisivo sobre o assunto foi LeonharEuler. Muitas das notaes que conhecemos hoje foram introduzidas por ele, inclusive asubstituio de

1 por i.

Euler passou a estudar nmeros da forma z = a+ bi onde a e b so nmeros reais ei2 = -1. Esses nmeros so chamados de nmeros complexos. Segundo [Ezequias 1998],diversas aplicaes foram surgindo atravs do conceito de tais nmeros.

A partir dos nmeros complexos os matemticos tiveram a possibilidade de criar no-vas lgebras. Gauss, em 1801, estendeu os inteiros (nmeros da forma a+ bi em quea e b so inteiros e i2 = -1) na sua lgebra das congruncias (aritmtica modular). Em1843, Hamilton introduziu uma multiplicao de vetores no espao de quatro dimenses,construindo a lgebra, no comutativa, dos Quatrnions. O grupo dos quatrnions foiimportante no desenvolvimento da lgebra abstrata e na construo da Fsica moderna[Boyer 1974], [Baumgart 1969] e [Felzenszwalb 1979].

CAPTULO 2. NMEROS COMPLEXOS 7

Na aerodinmica, os complexos tambm tiveram sua utilidade. Em 1906, Joukowskiutilizando transformaes geomtricas, construiu uma curva fechada no plano complexoque representa o perfil de uma asa de avio (aeroflio de Joukowski) e, usando o prin-cpio de Bernoulli e a teoria das funes complexas, deduziu a frmula F = x + yi =iei(VkLp), que permite calcular a fora de levantamento responsvel pela sustentaodo voo de um avio.

Na eletrnica e na eletricidade, a anlise de circuitos de corrente alternada feita coma ajuda de nmeros complexos. Grandezas como a impedncia (em ohms) e a potnciaaparente (em volt-ampere) so exemplos de quantidades complexas.

Os algoritmos recursivos no plano complexo criaram na maioria das vezes figurasinvariantes por escala denominadas fractais. Estas formas geomtricas de dimenso fra-cionria servem como ferramenta para: descrever as formas irregulares da superfcie daterra; modelar fenmenos, aparentemente imprevisveis ( teoria do caos ), de naturezameteorolgica, astronmica, econmica, biolgica, entre outras.

Antes de iniciar a definio completa sobre nmeros complexos necessrio fazeruma breve explanao da evoluo do conceito de nmero.

Os nmeros no qual tm-se contato pela primeira vez so os chamados nmeros natu-rais. Eles so representados pela letra N, como no formato abaixo:

N = {0,1,2,...,n,...}

No intuito de expandir este conjunto de nmeros,para admitir que a subtrao de doisnmeros naturais seja possivel, surgiram os nmeros inteiros que so representados pelaletra Z:

Z = {..., -n, ..., -2, -1, 0, 1, 2, ..., n,...}

Motivado pela imperfeio [da Justa Medeiros 1972], pois a diviso no bem defi-nida em Z, ou seja, dados dois inteiros, a e b (b 6= 0), nem sempre possvel encontraro quociente de a por b em Z. Para incluir a diviso de dois nmeros naturais quaisquer,faz-se necessrio a criao dos nmeros racionais, representados por Q.

CAPTULO 2. NMEROS COMPLEXOS 8

Mas em Q ainda existem certas imperfeies, como por exemplo, a soluo da equa-o x2 = 3 no pode ser encontrada em Q. Desta maneira para construir um conjuntomais amplo que permitisse uma soluo a este tipo de equao, surgiram os nmeros re-ais, representado por R. Desta forma pode-se dizer que os nmeros naturais seriam umsubconjunto dos nmeros inteiros, que por consequente seria um subconjunto dos racio-nais e este um subconjunto dos reais.

Mas este sistema j mencionado ainda no suficiente, pois no permite encontrara soluo para a equao x2 + 4 = 0. Neste caso no possvel encontrar uma soluodentro dos conjuntos citados. a que entra a definio de nmeros complexos.

2.2 Os Nmeros Complexos

As definies contidas neste captulo esto mencionadas em [Dias & Dantas 2006],[Santos 2001], [Lohner et al. 1985],[Alefeld & Herberger 1983], [Petkovic & Petkovic1998], [Candu et al. 2006] e [Blomquist et al. 2005a].

Seja R o conjunto dos nmeros reais e o produto cartesiano

R2={(a,b) | a R e b R}

Ou seja, R2 o conjunto dos pares ordenados (a,b) em que a e b so nmeros reais.

O conjunto dos nmeros complexos consiste no conjunto de todos os pares ordenadosde nmeros reais (a, b) R2, juntamente com as regras pelas quais estes sero igualados,adicionados, multiplicados e assim por diante. Este conjunto representado pela letra C.Para exemplificar sero levados em considerao os dois pares ordenados (a,b) e (c, d) deR2, como segue abaixo:

1. Igualdade: dois pares ordenados so iguais se, e somente se, seus primeiros eltimos termos forem iguais.

(a,b) = (c,d) a = c e b = d2. Adio: para obter um novo par ordenado a partir da soma dos dois primeiros,

necessrio fazer a soma dos primeiros e ltimos termos dos pares fornecidos.(a,b)+(c,d) = (a+ c,b+d)

CAPTULO 2. NMEROS COMPLEXOS 9

3. Multiplicao: para obter o primeiro elemento do novo par ordenado necessriofazer a diferena entre o produto dos primeiros termos e o produto dos ltimostermos fornecidos e para obter o segundo elemento preciso somar os produtos doprimeiro termo de cada par pelo segundo termo do outro.

(a,b) (c,d) = (acbd,ad +bc)4. Subtrao: pode-se subtrair dois pares ordenados fazendo as diferena entre pri-

meiros e ltimos termos.(a,b) (c,d) = (a c,bd)

5. Diviso: obtm-se um novo par ordenado a partir de uma operao de diviso fa-zendo uma multiplicao entre dois pares ordenados. Sendo que o primeiro pardesta multiplicao o primeiro par fornecido, o primeiro termo do segundo par composto pela diviso do primeiro termo do segundo par informado pela somados quadrados destes termos e o segundo termo do novo par composto pela dife-rena da diviso entre o segundo termo do segundo par informado pela soma dosquadrados destes termos.

(c,d)(a,b)

= (c,d)(

aa2 +b2

, ba2 +b2

)=

(ca+dba2 +b2

,da cba2 +b2

)Exemplos:

1 - Adio (2,5) + (3,7) = (2 + 3, 5 + 7)=(5,12)

2 - Multiplicao (1,2).(3,5) = (1.3 - 2.5, 1.5 + 2.3)=(-7, 11)

3 - Subtrao (4,6) - (3,1) = (4 - 3,6 - 1)=(1,5)

4 - Diviso(1,2)(3,4)

= (1,2) (

332 +42

, 432 +42

)= (1,2)

(3

25, 4

25

)=

(1125

,2

25

)Dessa forma, o conjunto dos nmeros complexos podem ser vistos como uma estru-

tura algbrica da forma R =< R2,+,, ,/ >.

Apesar de um nmero complexo ser um par ordenado (r,g) R2, pode-se represent-los ainda de duas formas distintas, chamadas: forma algbrica e forma polar.

2.2.1 Representao Algbrica

Um nmero complexo c = (a,b) pode ser representado como c = a+ ib, com a eb R, onde a chamada parte real e b parte imaginria. Essa representao chama-se

CAPTULO 2. NMEROS COMPLEXOS 10

representao algbrica.O segundo componente de um complexo c = (a,b) chama-se parte imaginria. Ob-

serve que c = (a,b) pode ser representado como c = a(1,0) + b(0,1). (0,1) chama-seunidade imaginria e representado pela letra i. A representao algbrica c = a+ ib naverdade expressa a combinao linear c = a(1,0)+b(0,1).

Um complexo c dito um nmero real se, somente se, sua parte imaginria for iguala zero, dito imaginrio puro quando sua parte real igual a zero e chamado de nuloquando ambas as partes so iguais a zero.

Sendo assim, observe que i2 = (0,1).(0,1) = (0.0 1.1,0.1+ 1.0) = (1,0), quecorresponde ao nmero real -1. Portanto, possvel escrever

i2 =1Logo,

1 = i.

Uma noo importante que ajuda a operacionalidade dos nmeros complexos a deconjugado. Chamamos conjugado de um complexo c = a+ ib, o complexo c = a ib.Dessa maneira, a forma algbrica z = a+ ib torna-se muito mais operacional que a depar ordenado (a,b) como representao de nmeros complexos. A seguir sero nova-mente apresentadas as definies de igualdade, adio e multiplicao de complexos,agora usando a representao algbrica.

1. Igualdade: Dois nmeros complexos so iguais se tanto suas partes reais quantosuas partes imaginrias so iguais.

a+ ib = c+ id a = c e b = d2. Adio: Obtm-se um novo complexo a partir de uma adio realizando uma soma

onde sua parte real composta pela soma das partes reais das parcelas e sua parteimaginria formada pela soma das partes imaginrias da parcela.

(a+ ib)+(c+ id) = (a+ c)+(b+d)i

3. Multiplicao: Um novo complexo obtido a partir de uma multiplicao o resul-tado do desenvolvimento de (a+ ib)(c+ id), encarando ib e id como se fossemnmeros reais, aplicando a propriedade distributiva e levando em considerao quei2 =1. Tem-se o seguinte:

(a+ ib)(c+ id) = a(c+ id)+ ib(c+ id) = ac+ iad + ibc+ ibd2 =

(acbd)+ i(ad +bc).

CAPTULO 2. NMEROS COMPLEXOS 11

4. Diviso: A diviso agora bem mais simples de ser obtida. Basta multiplicar onumerador, c1 = c+ id e denominador pelo conjugado do denominador c2 = a+ ib,com c2 6= 0+0i.

c1c2

=c+ id(a ib)(a+ ib)(a ib)

=ca+dba2 +b2

+da cba2 +b2

i

Exemplos:

1 - Adio: (5+ i3)+(3+ i4) = (8+ i7)

2 - Conjugado: c = 6+ i9 c = 6 i9

3 - Multiplicao: (2+ i3).(5+ i4) = 2(5+ i4)+ i3(5+ i4) = 10+ i8+ i15+ i212 =10+ i8+ i1512 =2+ i23

4 - Diviso:(3+ i)(4+ i2)

=(3+ i)(4 i2)(4+ i2)(4 i2)

=14 i2

12+ i16

2.2.2 Representao Polar

possvel associar um ponto P = (a,b) no plano cartesiano ao nmero complexoc = a+ ib, onde pode-se representar a parte real por um ponto no eixo real e a parteimaginria por um ponto no eixo imaginrio. A Figura 2.1 representa a interpretaogeomtrica de um nmero complexo.

Figura 2.1: Interpretao geomtrica dos nmeros complexos

Pode-se perceber que a distncia entre P e O o mdulo de c, ou seja, OP=

a2 +b2 =

|c|, e o ngulo composto por OP com o eixo real , logo o argumento principal de c.Isso d origem as seguintes definies:

CAPTULO 2. NMEROS COMPLEXOS 12

1. Norma: A norma de um nmero complexo c = a+ ib definida por N(c) = a2+b2;

2. Mdulo ou valor absoluto: O mdulo de um nmero complexo representado pelaraiz quadrada da sua norma; ou seja: |c|=

N(c) =

a2 +b2. Geralmente usa-se

a letra grega para representar |c|;

3. Argumento: O argumento de um nmero complexo c = a+ ib, denotado por arg(c) o ngulo , medido em radianos, 0 2, formado pelo vetor com o eixo real,tal que, cos =

a|c|

e sen =b|c|

.

A forma polar de um nmero complexo c = a+ ib o par (,) associado a C.

A Figura 2.2 apresenta a representao polar do nmero complexo c = 5+ i3 no planode Argand-Gauss.

Figura 2.2: Forma algbrica e polar do complexo c = 5+ i3

A representao polar de um nmero complexo pode ser convertida para a represen-tao algbrica e vice-versa, como determinado a seguir atravs dos exemplos:

1. Transformao do nmero complexo algbrico c = 2+ i2 na forma polar:

CAPTULO 2. NMEROS COMPLEXOS 13

|c|=

22 +22 =

4+4 =

8 = 2

2.

cos =2

2

2=

12. Portanto = arcsin cos = arcsin

12

= 45.

Logo a representao polar para c = 2+ i2 o par (2

2,45) = (2.828417, 45).

2. Transformao do nmero complexo polar (4.47, 26.57o) na forma algbrica:

cos =a|c|

= cos26,57o =a

4,47. Portanto a = 4.

sin =b|c|

= sin26,57o =b

4,47Portanto b = 2.

Logo a representao algbrica do nmero complexo polar (4.47, 26.57o) 4+ i2.

2.2.3 Funes Complexas Elementares

Alm da aritmtica complexa, existem operaes sobre C que so elementares. Nestaseo expomos algumas funes sobre C:

Funo multiplicao por complexo na forma polar

Seja A = r0(cos0 + isen0) e z = r(cos + isen), ento Az = rr0[cos( + 0) +sen(+0))], ou seja, o cumprimento de z multiplicado pelo cumprimento de A e seungulo modificado para +0.

Funo quadrtica

Sendo z = r(cos+ isen), ento z2 = r2(cos2+ isen2). Neste caso, z2 dobra ongulo de z. Sendo assim, quando 0 2 , ento 0 2 .

Funo inverso

Esta funo definida por w = 1z .

Algumas observaes devem ser levadas em considerao:

Quando |z|= 1, ento |w|= 1|z|

= 1.

CAPTULO 2. NMEROS COMPLEXOS 14

Quando |z| < 1, ento |w| = 1|z|

> 1, ou seja, w leva o interior do crculo unitrio

em seu exterior. Quando |z| > 1, ento |w| = 1

|z|< 1, ou seja, w leva o exterior do crculo unitrio

no seu interior.

w =1z=

z|z|2

. Ento w leva primeiro z no seu complexo conjugado z e em seguida

multiplica-o pelo inverso do quadrado do seu comprimento1|z|2

.

Funo exponencial

Na funo exponencial real f , sabe-se que f (x+ x) = ex+x= exex

, onde e a base

do logaritmo natural e vale aproximadamente 2,718281828459045. Ou seja, f (x+ x) =f (x) f (x) e f (0) = 1. Estendendo este conceito para nmeros complexos, toma-se a fun-o g(y) = cosy+ isiny. Logo g(y)g(y) = g(y+y) e g(0) = 1. Ou seja, ela tem a mesmapropriedade que a exponencial real. Sendo assim pode-se definir eiy = cosy+ isiny, ondey R.

Mantendo esta propriedade, para z = x+ iy, ento ez = ex+iy = ex.eiy. Como eiy =cosy+ isiny ento ez = ex(cosy+ isiny),z C.

Observao 1: Como a exponencial leva o nmero complexo z = x+ iy no nmerow = ei, em que = ex e = y, ento todo nmero complexo na forma z = x+ iy podeser expresso na forma z = eiy, chama-se forma polar de z, que, como foi visto, pode serresumido como o par (,y)

A funo exponencial leva o nmero z = x+ iy ao nmero w = ex.eiy transformandocoordenadas cartesianas em coordenadas polares.

Se z e z so dois nmeros complexos, ento temos as seguintes propriedades da ex-ponencial complexa:

Propriedade 1: e0 = 1; Propriedade 2: ez+z = ezez; Propriedade 3: ezz = ez

ez;

Propriedade 4: ez 6= 0; Propriedade 5: ez+2i = ez;

CAPTULO 2. NMEROS COMPLEXOS 15

A demonstrao destas propriedades podem ser vistas em [Dias & Dantas 2006].

Funes trigonomtricas

Em nmeros complexos as funes trigonomtricas so definidas por: cosz=eiz + eiz

z

e senz =eiz eiz

2i.

Funo logartmica

So definidas logz atravs das seguintes equivalncias: logz = w se, somente se,ew = z. Determinando w= u+ iv, ento |ew|= |eu+iv|= |eu||eiv|= eu. Escrevendo z= rei,de ew = z, segue-se que |ew|= |z|, ou seja, eu = r, o que d u = lnr, onde ln o logaritmonatural de r.

Mas ew = z tambm pode ser visto como eueiv = rei, como eu = r ento eiv = ei,donde v = +2k,k Z. Substituindo estes dados na equao original, obtm-se logz =lnr+ i(+2k),k Z. Sendo r = |z| e +2k = argz, ento logz = ln|z|+ iargz.

Desta forma, possvel observar que existem diversos valores do logaritmo para ummesmo nmero complexo. Para obter apenas um resultado preciso tomar como valordo argumento de z, seu argumento principal, 0 argz < 2, resultando no logaritmoprincipal de z denotado por logz = ln|z|+ iargz. Caso z = rei ento logz = lnr+ i.

2.3 Nmeros complexos intervalares

A matemtica intervalar foi uma das solues propostas para reduzir o custo dos er-ros de uma computao numrica e aumentar a informao com respeito a exatido dosclculos matemticos. Criada paralelamente por Moore e Sunaga na dcada de 50, elausa intervalos fechados como forma de representar dados de entrada inexatos ou que nopodem ser representados finitamente numa mquina e que causam erros de truncamentoou arredondamento durante a execuo de um programa [Santos 2001].

Segundo [Lohner et al. 1985], na aritmtica complexa intervalar existem trs diferen-tes tipos de intervalos: retangulares, circulares e setoriais. Neste captulo sero apresenta-dos e definidos os nmeros complexos intervales, em conjunto com suas aritmticas. Masantes preciso entender como desenvolvida uma aritmtica intervalar no conjunto dos

CAPTULO 2. NMEROS COMPLEXOS 16

nmeros reais, pois assim como um nmero complexo obtido a partir de nmeros re-ais, espera-se que os nmeros complexos intervalares sejam obtidos a partir de intervalosreais. o que ser visto nas prximas sees.

2.3.1 Aritmtica Intervalar Real

Aqui sero apresentadas a aritmtica intervalar de Moore, algumas propriedades refe-rentes s operaes, bem como relaes que so definidas sobre intervalos reais.

Definio 2.3.1.1 (Intervalo real) Um intervalo [a,b] definido como sendo um con-junto de nmeros reais da forma

[a,b] = {x R |a x b}

O conjunto de todos os intervalos definido por

I(R) = {[a,b] R|a b}

Definio 2.3.1.2 (Igualdade) Dados X = [x1,x2] e Y = [y1,y2]. Ento X = Y se, esomente se x1 = y1 e x2 = y2.

Definio 2.3.1.3 (Interseo) Dados os intervalos X = [x1,x2] e Y = [y1,y2]. A in-terseo dos intervalos dado por

X Y = [max{x1,y1},min{x2,y2}], se max{x1,y1} min{x2,y2}]. Se max{x1,y1} >min{x2,y2}], ento X Y no est definida.

Definio 2.3.1.4 (Unio) Sejam X = [x1,x2] e Y = [y1,y2]. Se X Y 6== 0, ento aunio entre os intervalos X e Y definida por

X Y = [min{x1,y1},max{x2,y2}]

Aritmtica de Moore

Uma aritmtica intervalar um conjunto de operaes compostas por soma, diferena,multiplicao e diviso sobre o conjunto I(R). No que segue, apresenta-se a aritmticaintervalar proposta por Moore.

(Soma) Dados X = [x1,x2] e Y = [y1,y2]. A soma X +Y dada por

CAPTULO 2. NMEROS COMPLEXOS 17

X +Y = [x1 + y1,x2 + y2] = {x+ y | (x X)&(y Y )}

(Pseudo inverso Aditivo) Seja X = [x1,x2]. Ento

X = [x2,x1] = {x | x X}

(Intervalo simtrico) Seja X um intervalo. Diz-se que X um intervalo simtrico seX =X

(Subtrao) Sejam X = [x1,x2] e Y = [y1,y2]. A subtrao XY dada por

XY = [x1 y2,x2 y1] = {x y | (x X)&(y Y )}

(Multiplicao) Sejam X = [x1,x2] e Y = [y1,y2]. Ento

X .Y = {x.y | (x X)&(y Y )}=[min{x1y1,x1y2,x2y1,x2y2},max{x1y1,x1y2,x2y1,x2y2}

(Pseudo inverso multiplicativo) Seja X = [x1,x2] tal que 0 / X . Ento

X1 = [ 1x2 ,1x1] = {1x | x X}

(Diviso) Sejam X = [x1,x2] e Y = [y1,y2] tal que 0 / Y . Ento

X/Y = {x/y | (x X)&(y Y )}=[min{x1/y2,x1/y1,x2/y2,x2/y1},max{x1/y2,x1/y1,x2/y2,x2/y1}

As subsees 2.3.2 a 2.3.4 apresentam trs abordagens para a representao de nme-ros complexos intervalares. Este trabalho implementar apenas a primeira abordagem.

2.3.2 Aritmtica Complexa Intervalar Retangular

Sejam A e B I(R). Ento o conjunto de nmeros complexos

Z = {z1 + iz2|z1 A,z2 B}

chamado intervalo complexo.

Os intervalos complexos constituem retngulos no plano complexo com lados parale-los aos eixos das coordenadas e, portanto, assim como os nmeros complexos pode serrepresentado como o par (A,B), ou na forma algbrica A + iB, para A e B I(R). Oconjunto desses retngulos denotado por I(C), onde C o conjunto dos nmeros com-plexos. Assim, um nmero complexo z = z1 + iz2 portanto, um elemento de intervalo

CAPTULO 2. NMEROS COMPLEXOS 18

complexo Z = [a,b]+ i[c,d] I(C), onde z1 [a,b] e z2 [c,d].

Seja A = A1 + iA2 e B = B1 + iB2 dois membros de I(C). Diz-se que A e B so iguaisse, somente se,

A1 = B1 e A2 = B2

De acordo com [Alefeld & Herberger 1983], a relao de igualdade entre elementosde I(C) proposta anteriormente : reflexiva, simtrica e transitiva.

Sejam as seguintes operaes binrias definidas sobre os elementos de I(C) operaesque sejam as conhecidas na literatura como aritmtica retangular [Petkovic & Petkovic1998]:

1. A+B = (A1 +B1)+ i(A2 +B2);

2. AB = (A1B1) i(A2B2);

3. A.B = (A1B1A2B2)+ i(A1B2 +A2B1);

4. A : B =A1B1 +A2B2(B1)2 +(B2)2

+iA2B1A1B2(B1)2 +(B2)2

, onde 0 / (B1)2 +(B2)2.

2.3.3 Aritmtica Complexa Intervalar Circular

Seja c C um nmero complexo e r R, tal que r 0. [Petkovic & Petkovic 1998]define o conjunto

Z = {z C | |z c| r}

como sendo um intervalo circular ou disco. O conjunto de intervalos circulares re-presentado por K(C). Um disco com centro c e raio r escrito como Z = (c;r).

Dois discos A = (c1,r1) e B = (c2,r2) so iguais se, e somente se,

c1 = c2 e r1 = r2

Esta relao de igualdade reflexiva, simtrica e transitiva.

Sejam {+,, ., :} operaes binrias sobre os nmeros complexos. Se A = (a;r1) eB = (b;r2) pode-se definir as seguintes operaes:

CAPTULO 2. NMEROS COMPLEXOS 19

1. A+B = (a+b;r1 + r2);

2. AB = (ab;r1 + r2);

3. 1B =b

|b|2(r2)2, r2|b|2(r2)2

para 0 / B;

4. A.B = (ab; |a|r2 + |b|r1 + r1r2);

5. A : B = A. 1B para B / 0.

Dado um complexo arbitrrio w C, tem-se alguns casos especiais de adio, subtra-o e multiplicao de discos:

1. w+(c;r) = (w+ c;r);

2. w (c;r) = (w c;r);

3. w.(c;r) = (wc; |w|r);

Sendo W = (c;r) K(C), ento

(a) |W |= |c|+ r chamado de valor absoluto de W e

(b) d(A) = 2r chamado de amplitude de W .

2.3.4 Aritmtica Complexa Intervalar Usando a Forma Polar

Esta subseo baseada no artigo "Complex Interval Arithmetic Using Polar Form"[Canduet al. 2006].

Definio

Sejam ,+,,+ R+ e os intervalos de extremos reais [] = [,+] e [] =[,+] . O conjunto definido por

Z = {z C|z = ei, [], []}

CAPTULO 2. NMEROS COMPLEXOS 20

chamado intervalo complexo polar ou setor intervalar e denotado por ([], []) 1

Os intervalos [] e [] so as representaes intervalares, respectivamente, do mduloe do ngulo de um complexo z Z. Para garantir a exclusividade da representao,sempre possvel escolher os limites do ltimo intervalo (+ 2, 0 < 2 e0 + < 4). O conjunto de todos os setores intervalares denotado por S(C).

Aritmtica de intervalos polares

Sejam Z1 e Z2 dois setores de S(C) e * uma das quatro operaes aritmticas em C.Como o conjunto de intervalos reais fechado com relao adio e multiplicao, possvel observar que o produto de dois setores intervalares tambm um setor intervalar:

Z1 Z2 = {z1 z2|z1 Z1,z2 Z2} {1

i(1+2)2 |1 [1],2 [2],1 [1],2 [2]}

{[1] [2], [1]+ [2]}.

No caso da diviso obtm-se:

Z1/Z2 = ([1]/[2], [1] [2]).

Nestas operaes, os intervalos [1]+ [2] e [1] [2], embora computados pela arit-mtica intervalar, j no podem ser verificadas pelas condies citadas anteriormente. Noentanto, como todos os ngulos no possuem valores de mdulo 2, pode-se ajustar adi-cionando ou subtraindo 2 do seus limites inferiores e superiores at que as condiessejam cumpridas.

O conjunto

Z1Z2 = {z1 + z2|z1 Z1,z2 Z2},

conhecido como soma de Minkowski, no um setor mas possui uma forma complexa.Para definir adio como uma operao em S(C) preciso determinar alguns elementosde S(C) que contm este conjunto. Z1 + Z2 definido como o menor setor contendoZ1Z2:

Z1 +Z2 = Z,Z S(C),Z1Z2 Z1Lembre-se que z = ei outra forma de representao de um complexo. Ver Observao 1.

CAPTULO 2. NMEROS COMPLEXOS 21

A subtrao definida da mesma maneira.

Caracterizao da soma de setores

Seja Z1 = ([1], [1]) e Z2 = ([2], [2]) dois setores e Z sua soma, ento os limites

e + de [] devem verificar:

= min|z|,z Z1Z2+ = max|z|,z Z1Z2

Da mesma forma, os limites de [] so solues de:

= minA(z),z Z1Z2+ = maxA(z),z Z1Z2

onde A(z), o ngulo de um complexo z, definido sobre Z1 Z2 tal que A(z) [,+].

2.3.5 Funes Complexas Intervalares Elementares

A seguir sero apresentadas as definies formais de cada uma das funes complexasintervalares elementares, na representao polar, elas estendem as suas respectivas fun-es reais [Blomquist et al. 2005a].

Funo quadrada (Z2)

Seja Z = X +Yi I(C)

Z2 = (XY ) (X +Y )+ i.(2.X .Y ). (2.1)

As funes potncia, raiz quadrada e logaritmo assumem Z = ([], []), onde [] =[;+] e [] = [;+].

Funo potncia (Zn)

Para n = -1, 0, 1 e 2 as funes para Zn so implementadas como 1/Z,1,Z, e Z2,respectivamente. Para n2 ou n 3 ver [Blomquist et al. 2005b].

CAPTULO 2. NMEROS COMPLEXOS 22

Raiz quadrada (

Z)

Sejasqrt(z) =

{cos(/2)+ i.sin(/2)}, < +. (2.2)

Podemos definir sqrt(Z) como:

sqrt(Z) = {sqrt(z)|z Z I(C)}. (2.3)

Funo logaritmo

ln(Z) = ln(abs(Z))+ i.arg(Z). (2.4)

Funes Trigonomtricas

De acordo com [da Silva 2007], a forma de onda das funes seno e cosseno so res-ponsveis pela grande utilidade nas aplicaes matemticas. A seguir sero apresentadasalgumas funes trigonomtricas.

Funo seno

sen(Z) = sen(X).cosh(Y )+ i.cos(X).senh(Y ). (2.5)

Funo cosseno

cos(Z) = cos(X).cosh(Y ) i.sen(X).senh(Y ). (2.6)

Funo tangente

tan(Z) =sin(2X)

cos(2X)+ cosh(2Y )+ i.

sinh(2Y )cos(2X)+ cosh(2Y )

. (2.7)

Funo co-tangente

cot(Z) = tan(

2Z). (2.8)

CAPTULO 2. NMEROS COMPLEXOS 23

Funes Trigonomtricas Inversas

Funo arco cosseno

arccos(Z) = tan(

2arcsen(Z)

). (2.9)

Funo arco tangente

arctan(Z) = tan(

12i.Ln

1+ iZ1 iZ

). (2.10)

Funo arco co-tangente

arccot(Z) = arctan(

1Z

). (2.11)

Funes Hiperblicas

Funo seno hiperblico

senh(Z) = senh(X).cos(Y )+ i.cosh(X).sen(Y ) (2.12)

Funo cosseno hiperblico

cosh(Z) = cosh(X).cos(Y )+ i.senh(X).sen(Y ). (2.13)

Funo tangente hiperblico

tanh(Z) =i.tan(iZ). (2.14)

Funo co-tangente hiperblico

coth(Z) = i.cot(iZ). (2.15)

CAPTULO 2. NMEROS COMPLEXOS 24

2.4 Consideraes

Este captulo apresentou os nmeros complexos com suas representaes e aritmti-cas. Pde-se observar que a escolha entre a representao retangular e a polar vai dependerda aplicao que est sendo desenvolvida.

As principais funes foram includas no trabalho com o intuito de nortear o leitor aose deparar com a proposta do mesmo, j que tais funes, tanto as complexas quanto ascomplexas intervalares, sero implementadas para JAVA-XSC. No mdulo complexo foiimplementado tanto a forma retangular, quanto funes de converso para a forma polar.J no mdulo complexo intervalar apenas a forma retangular foi implementada.

Foi visto tambm que os nmeros complexos intervalares so obtidos a partir de in-tervalos reais, sendo assim este captulo apresentou a aritmtica intervalar real e logo emseguida a aritmtica complexa intervalar em suas representaes retangular e polar.

No prximo captulo sero vistas algumas ferramentas que auxiliam na resoluo deproblemas matemticos. Algumas delas, como CLN e MPC, trabalham com nmeroscomplexos, ambas na forma retangular. Alm disso, sero apresentadas algumas lingua-gens XSC que tambm implementam funes complexas.

Captulo 3

Algumas ferramentas para clculonumrico

3.1 Introduo

Neste captulo sero apresentadas algumas das bibliotecas desenvolvidas para o aper-feioamento do clculo numrico computacional, em especial, as que trabalham com amatemtica intervalar. Estas ferramentas utilizam diversos modos de arredondamentopara tratar a forma como seus resultados sero exibidos. Os modos de arredondamentoso melhores esclarecidos no Anexo A.

Para cada ferramenta/biblioteca sero informados dados gerais de sua criao, os tiposnumricos implementados e os modos de arredondamento implementados.

3.2 CLN (Class Library for Numbers)

As informaes contidas nesta seo foram baseadas no Manual da CLN ([Haible2005]).

CLN1 uma biblioteca eficiente para computao que contm todos os tipos de nme-ros com preciso arbitrria. Ela foi escrita por Bruno Haible e sua verso atual mantidapor Richard Kreckel. A biblioteca distribuda sobre a GNU General Public License[Brent & Zimmermann 2009]. CLN foi escrita em C++ e as motivaes para isto quea linguagem prov eficincia (compilada em cdigo de mquina), segurana (C++ nopermite que uma varivel de um tipo assuma um valor que no seja daquele tipo) e uma

1http://www.ginac.de/CLN/

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 26

sintaxe algbrica.

Esta biblioteca tem por principais caractersticas:

Rico conjunto de classes numricas: Inteiro(preciso ilimitada), racional, float (short,single, double e long), complexo, inteiro modular, polinomial univariada. Funes elementares (+, -, *, /, sqrt, comparaes, ...), lgicas(and, or, not, ...) e

transcendentais(exponencial, logaritmo, trigonometria, funes hiperblicas e suasfunes inversas). Eficincia de Memria. Eficincia de velocidade: O kernel da CLN foi escrito em linguagem assembly para

algumas CPUs e ela usa diviso binria para avaliao rpida da srie de nmerosracionais medida que ocorrem na avaliao de funes elementares e algumasconstantes. Interoperabilidade: Apresenta coleta de lixo sem qualquer obrigao para a aplica-

o principal e ganchos para alocao de memria e excees.

3.2.1 Tipos Numricos

A CLN implementa as classes nmericas presentes na hierarquia ilustrada na Figura3.1.

A classe base cl_number uma classe abstrata, sendo assim, no pode ser usada paradeclarar uma varivel. A classe cl_N compreende aos tipos real e nmeros complexos.

A classe cl_R tambm uma classe abstrata e compreende os nmeros reais de dife-rentes tipos. A classe cl_RA corresponde exatamente aos nmeros reais: nmeros racio-nais, incluindo inteiros. A classe cl_F uma classe abstrata que implementa aproxima-es de ponto-flutuante para nmeros reais.

3.2.2 Nmeros Exatos

Alguns nmeros so apresentados como nmeros exatos, ou seja, no h perda deinformaes quando os nmeros so convertidos de um valor matemtico para sua repre-sentao interna. Em CLN os nmeros exatos so: nmeros racionais (incluindo inteiros)e os nmeros complexos no qual as partes real e imaginria so nmeros racionais.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 27

Figura 3.1: Hierarquia dos tipos numricos em CLN

Os nmeros racionais so sempre normalizados na forma numerador/denominadoronde ambos so inteiros comprimidos e o denominador positivo, se o resultado do de-nominador for 1, o nmero racional convertido para inteiro.

3.2.3 Nmeros de Ponto-Flutuante

Como nem todos os nmeros podem ser representados de forma exata, algumas apro-ximaes so necessrias. CLN implementa nmeros de ponto-flutuante com mantissa eexpoente. Os nmeros de ponto-flutuante podem ser de quatro tipos distintos:

Flutuantes curtos (cl_SF): possui 1 bit de sinal, 8 bits de expoente (incluindo o sinaldo expoente) e 17 bits de mantissa (incluindo o bit oculto). Flutuantes simples (cl_FF): possui 1 bit de sinal, 8 bits de expoente (incluindo o si-

nal do expoente) e 24 bits de mantissa (incluindo o bit oculto). So representadoscomo os pontos-flutuantes de preciso simples da IEEE e corresponde ao tipo floatda C/C++. Flutuantes duplos (cl_DF): possui 1 bit de sinal, 11 bits de expoente (incluindo o

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 28

sinal do expoente) e 53 bits de mantissa (incluindo o bit oculto). So represen-tados como os pontos-flutuantes de preciso dupla da IEEE e corresponde ao tipodouble da C/C++. Flutuantes longos (cl_LF): possui 1 bit de sinal, 32 bits de expoente (incluindo o

sinal do expoente) e n bits de mantissa (incluindo o bit oculto), onde n >= 64. Suapreciso ilimitada, mas uma vez criada, um flutuante longo tem uma preciso fixa.

CLN no implementa recursos como NaNs, nmeros desnormalizados e estouro (un-derflow). Se o alcance do expoente de alguns tipos de pontos-flutuantes limitado paraalguma aplicao, ento necessrio optar por outro com o expoente maior.

3.2.4 Nmeros Complexos

Os nmeros complexos implementados na classe cl_N possuem uma parte real e umaimaginria, ambos nmeros reais. Um nmero complexo cuja parte imaginria o n-mero exato 0 ser automaticamente convertido para um nmero real.

Nmeros complexos podem originar-se apenas de nmeros reais. A classe cl_N definea seguinte operao:

cl_N complex (const cl_R& a, const cl_R& b)Retorna o nmero complexo a+bi, onde a a parte real e b a parte imaginria.

Cada uma das classes cl_N e cl_R definem as seguintes operaes:

cl_R realpart (const type& x)Retorna a parte real de x.

cl_R imagpart (const type& x)Retorna a parte imaginria de x.

type conjugate (const type& x)Retorna o complexo conjugado de x.

3.2.5 Funes de Arredondamento

Quando um nmero real convertido para um inteiro, no h um arredondamentomelhor. A forma de arredondamento varia de aplicao para aplicao. The Common

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 29

Lisp e o padro ISO LISP fornece quatro funes de arredondamento:

floor(x): maior inteiro; ceiling(x): menor inteiro; truncate(x): inteiros entre 0 e x (inclusive) o mais prximo de x. round(x): o mais prximo de x. Se x est exatamente na metade entre dois inteiros

escolhe-se um deles.

3.3 GNU MP (GMP)

As informaes contidas nesta seo foram baseadas no Manual da GMP ([Granlund& the GMP development team 2010]).

GMP 2 uma biblioteca escrita em C com uma aritmtica de preciso arbitrria parainteiros, nmeros racionais e nmeros de ponto flutuante [Granlund & the GMP develop-ment team 2010]. Ela foi desenvolvida por Torbjorn Granlund e outros contribuintes noano de 1993, sendo que uma verso preliminar foi criada em 1991. A biblioteca distri-buda sobre a GNU LGPL (esta licena torna a biblioteca livre para usar, compartilhar emelhorar, e permite o repasse do resultado).

As aplicaes mais interessadas na GNP so aplicaes para criptografia e pesqui-sas, segurana na Internet, sistemas algbricos, pesquisa algbrica computacional, entrediversas outras. Algumas aplicaes usam apenas poucas centenas de bits na precisomas outras podem precisar de milhares de bits. A GNP foi desenvolvida para trabalharem ambas as situaes com bom desempenho, podendo escolher algoritmos baseados notamanho dos operadores. Essa uma vantagem em relao a JAVA-XSC pois a mesmaest presa a extenso do tamanho por no termos inteiros no sinalizados.

Existem vrias categorias de funes em GMP:

Inteiro (mpz): esta categoria apresenta cerca de 140 funes aritmticas e lgicas. Racional (mpq): esta categoria contm cerca de 35 funes, mas todas as funes

da aritmtica de inteiros podem ser utilizadas aqui tambm. Ponto Flutuante (mpf): Esta categoria utilizada quando o tipo double de C no

fornece preciso suficiente para uma aplicao. Aqui encontram-se cerca de 65funes.

2http://gmplib.org/

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 30

Funes de baixo nvel que operam com nmeros naturais. Aqui existe cerca de 30funes. Funes diversas: funes para criao de atribuies e funes personalizadas para

a gerao de nmeros aleatrios. Suporte externo: Funes aritmticas de ponto-flutuante com arredondamento pre-

ciso (MPFR). A partir do GMP 4.2, MPFR distribudo separadamente do GMP.

3.3.1 Nmeros Racionais

Os nmeros racionais so armazenados em objetos do tipo mpq_t.

De acordo com [Granlund & the GMP development team 2010], todas as funes daaritmtica racional assumem operandos na forma padro. Forma padro quer dizer queo denominador e o numerador no possuem fatores em comum e que o denominador

positivo. Zero tem uma representao nica01

.

3.3.2 Ponto-Flutuante

Ainda segundo [Granlund & the GMP development team 2010], a mantissa de cadaf loat tem uma preciso determinada pelo usurio, limitada somente pela capacidade dememria. Cada varivel possui sua prpria preciso que pode ser incrementada ou decre-mentada a qualquer momento.

O expoente de cada f loat uma preciso fixa, uma palavra de mquina na maioriados sistemas. Na verso mais recente (5.0.1), o expoente uma contagem de membros,por exemplo, sobre um sistema de 32-bit, significa um intervalo de cerca de 268719476768

a 268719476736. Sobre um sistema de 64-bit isto ser maior.

Cada varivel mantm os dados do tamanho da mantissa atualmente em uso. Isso sig-nifica que se o f loat representado exatamente em apenas poucos bits ento apenas essesbits sero usados no clculo, mesmo se a preciso selecionada for alta.

Todos os clculos so realizados com preciso da varivel de destino. Cada funo definida para calcular com preciso infinita seguida pelo truncamento da preciso dedestino. A preciso selecionada para a varivel possui um valor mnimo.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 31

A mantissa armazenada em binrio. Uma consequncia disto que fraes decimaiscomo 0.1 no podem ser representadas de forma exata, o mesmo tambm ocorre no IEEEdouble f loats.

Funes mpf e variveis no possuem uma notao especial para infinito ou NaN, eas aplicaes devem tomar cuidado para no sobrecarregar o expoente ou os resultados setornaro imprevisveis.

As funes mp f no so extenses do IEEE-754, sendo assim, os resultados obtidosem um computador, muitas vezes diferem dos resultados em um computador com umapalavra de tamanho diferente.

Esta ferramenta no possui funes para se trabalhar com nmeros complexos.

3.4 MPFR (Multiple Precision Floating-Point Reliable)

As informaes contidas nesta seo foram baseadas no Manual da MPFR ([Hanrotet al. 2011]).

A MPFR3 uma biblioteca que trabalha com uma aritmtica altamente precisa sobrenmeros de ponto flutuante. Escrita em C e baseada na biblioteca GNU MP vista anteri-ormente, ela prov uma classe de ponto flutuante com semntica precisa. Suas principaiscaractersticas so:

Apresenta um cdigo portvel, ou seja, o resultado da operao no depende damquina na qual esta sendo executada. a preciso em bits pode ser definida exatamente para qualquer valor vlido para

cada varivel. MPFR oferece cinco modos de arredondamento do padro IEEE 754-2008 (prov

arredondamento correto e excees).

Com isto, a biblioteca MPFR prov operaes de aritmtica bsica, algumas funeselementares e vrias funes especiais, com arredondamento correto a qualquer preciso.

3http://www.mpfr.org/

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 32

3.4.1 Modos de Arredondamento

Em MPFR so suportados cinco tipos de arredondamento [Hanrot et al. 2011]:

MPFR_RNDN: Arredondamento para o mais prximo (roundTiesToEven no IEEE754-2008); MPFR_RNDZ: Arredondamento para o zero (roundTowardZero no IEEE 754-

2008); MPFR_RNDU : Arredondamento em direo ao infinito positivo (roundTowardPo-

sitive no IEEE 754-2008); MPFR_RNDD: Arredondamento em direo ao infinito negativo (roundToward-

Negative no IEEE 754-2008); MPFR_RNDA: Arredondamento distante do zero (experimental).

O arredondamento para o mais prximo trabalha tal qual o padro IEEE 754, ou seja,no caso do nmero estar arredondado exatamente entre dois nmeros representveis, ele arredondado para aquele com o bit menos significativo de zero. Por exemplo, o nmero2.5, que representado por 10.1 em binrio, arredondado para 10.0 = 2 com preciso dedois bits e no para 11.0 = 3.

A maioria das funes em MPFR utilizam trs argumentos, o primeiro a varivel dedestino, o segundo so as variveis de entrada e por ltimo um modo de arredondamento.Estas funes retornam um valor do tipo inteiro, chamado de valor ternrio. O valor arma-zenado na varivel de destino corretamente arredondado, ou seja, MPFR comporta-secomo se ela computasse os resultados com uma preciso infinita, ento arredonda para apreciso desta varivel.

Em consequncia, no caso de um resultado de arredondamento diferente de zero, o

erro no resultado menor ou igual a12

ulp (unit in the last place), que o peso do l-timo bit significativo representado no resultado aps o arredondamento, resultando emum arredondamento para o mais prximo, e menos que 1 ulp resultando nos modos dearredondamento direcionado.

Se o valor do resultado de arredondamento for zero, o valor armazenado na varivel dedestino o resultado exato da funo matemtica correspondente. Se o valor for positivo(negativo), o valor armazenado na varivel de destino maior (menor) que o resultadoexato. No caso de um resultado infinito, o resultado considerado como inexato quando

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 33

obtido por overflow e exato caso contrrio. Um resultado NaN sempre corresponde a umvalor de retorno exato.

3.4.2 Ponto-Flutuante

De acordo com [Fousse et al. 2007], um nmero de ponto-flutuante x em MPFR representado por uma mantissa m, um sinal s e um expoente sinalizado e. O tamanho (embits) da mantissa ser de acordo com a preciso, p, de x. Neste caso a mantissa ter p bits

significantes e interpretada como12 m < 1.

A MPFR utiliza uma estratgia onde cada parte de um nmero de ponto flutuanteapresenta uma preciso local. Segundo [Muller et al. 2009], esta estratgia muito efici-ente, pois o usurio pode alocar grandes precises somente para variveis que realmentenecessitam delas e pequenas precises para as outras.

Esta ferramenta no possui funes para se trabalhar com nmeros complexos nemintervalos. Mas algumas ferramentas foram construdas baseadas nela, entre elas temosa MPFI, que possui funes especficas para o uso de intervalos, e a MPC, que trabalhacom nmeros complexos.

3.5 MPFI (Multiple Precision Floating-Point Interval)

As informaes contidas nesta seo foram baseadas no Manual da MPFI ([Revol2002]).

MPFI4 uma biblioteca para aritmtica intervalar com preciso mltipla desenvolvidapor [Revol & Rouillier 2002]. Esta biblioteca foi escrita em C e desenvolvida seguindo osconceitos da MPFR e GNP. Por ser um software livre ela pode ser adquirida gratuitamenteatravs do site do projeto.

Segundo [Revol & Rouillier 2002], mltipla preciso significa que a preciso com-putada no limitada preciso simples ou dupla da mquina dos nmeros de ponto-flutuante, no contrrio, precises arbitrrias devem estar disponveis. Alm disso, esta

4http://perso.ens-lyon.fr/nathalie.revol/software.html

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 34

computao precisa deve ser ajustada dinamicamente para cumprir a exatido necess-ria. Uma das exigncias mais requeridas pela aritmtica intervalar facilitar o arredon-damento: isso garante que para cada operao, o intervalo computado usando aritmticade ponto-flutuante contenha o intervalo obtido se a aritmtica real exata est sendo usada.Ainda mais desejvel um arredondamento direcionado exato para evitar perda de acur-cia.

No MPFI os intervalos so implementados usando seus extremos que so nmeros depontos-flutuantes MPFR seguros.

3.5.1 Modos de Arredondamento

De acordo com [Revol 2002], apenas dois modos de arredondamento so usados nomanuseio de intervalos representados por seus extremos:

MPFI_RNDU: Arredondamento em direo ao infinito positivo; MPFI_RNDD: Arredondamento em direo ao infinito negativo.

A MPFI ainda est em fase de desenvolvimento, no futuro, planeja-se incrementar abiblioteca com novas facilidades tais como diferenciao automtica e lgebra linear.

3.6 MPC (Multiple Precision Complex)

As informaes contidas nesta seo foram baseadas no Manual da MPC ([team2011]).

MPC5, desenvolvida por [Enge et al. 2011], uma biblioteca tambm escrita em Cque apresenta uma aritmtica precisa sobre nmeros complexos provendo um arredonda-mento correto. Ela foi escrita baseando-se nas bibliotecas GNU MP e na GNU MPFR.Todas as declaraes necessrias para usar MPC esto no arquivo mpc.h, que pode tra-balhar tanto com o compilador C quando com C++.

Esta biblioteca utiliza a representao cartesiana: o nmero complexo x+ iy armaze-nada como um par (x,y) de dois nmeros de ponto-flutuante de preciso arbitrria (pares

5http://www.lix.polytechnique.fr/Labo/Andreas.Enge/Mpc.html

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 35

real e imaginria). A preciso o nmero de bits usados para representar a mantissa daspartes real e imaginria.

3.6.1 Modos de Arredondamento

O modo de arredondamento especifica a maneira de arredondar o resultado de umaoperao complexa, no caso o resultado exato no pode ser representado exatamente namantissa de destino. O modo de arredondamento de complexos um par de dois modosde arredondamento: um para a parte real e outra para a parte imaginria.

Um modo de arredondamento complexo da forma MPC_RNDxy, onde x e y per-tencem a N (mais prximo), Z (direo ao zero), U (direo ao infinito positivo) ou D(direo ao infinito negativo). O primeiro refere-se ao modo de arredondamento da partereal e o segundo da parte imaginria. Por exemplo: MPC_RNNZ indica que a parte realusar o arrendondamento para o mais prximo e a parte imaginria utilizar o arredonda-mento em direo ao zero.

O arredondamento para o mais prximo trabalha como no padro IEEE P754, ou seja,no caso do nmero estar arredondado exatamente no meio de dois nmeros representveis,ele arredondado de forma que o ltimo bit significante seja igual a zero. Por exemplo:o nmero 5 (101 em binrio), arredondado para 4 (100) com uma preciso de dois bitse no para 6 (110).

3.6.2 Funes Complexas

As funes ponto-flutuante MPC possuem uma interface que similar s funes in-teiras GMP. O prefixo da funo para operaes sobre nmeros complexos mpc_.

A computao da preciso acontece da seguinte forma: calcula-se exatamente a ope-rao solicitada (com preciso infinita) e arredonda o resultado na varivel de destino como modo de arredondamento informado.

As funes complexas MPC foram desenvolvidas conforme o padro IEEE P754. Oresultado obtido em uma mquina pode ser diferente do resultado que foi executado emoutra mquina.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 36

Existem diversas funes divididas em mdulos, tais como: funes de atribuio,funes de converso, funes de comparaes, funes de projees e decomposies,funes aritmticas bsicas, funes de potncia e logaritmo, funes trigonomtricas,funes diversas e funes avanadas.

3.7 INTLIB

INTLIB uma biblioteca desenvolvida para a linguagem Fortran 77 que oferece umpadro nas operaes com intervalos, facilitando desta forma, a utilizao da aritmticaintervalar. Ela alcana portabilidade com arredondamento e pode ser utilizada tanto porFortran 77 quanto por Fortran 90. A INTLIB tem como principais caractersticas [Kearfottet al. 1994]:

Portabilidade. Desta forma os usurios conseguem transferir programas de aplica-o de uma mquina para outra e o programa executar eficazmente sem nenhumaalterao, e apresenta uma rigorosa aritimtica intervalar para a comunidade For-tran. Apresenta uma grande quantidade de documentos para as diversas verses dispon-

veis. A biblioteca suporta sobrecarga de operador em Fortran 90. Apresenta um paradigma de teste razovel. Sinalizao de erros simples mas eficiente.

As rotinas desta biblioteca so consideradas significativamente legveis para os usu-rios, sendo precisas e sem grande nmero de funes desnecessrias, ou que gerem ambi-guidade de interpretao matemtica. A INTLIB dividida em cinco mdulos, que so:mdulo para aritmtica intervalar elementar (Tabela 3.1), mdulo de funes intervalareselementares (Tabela 3.2), mdulo de funes teis (Tabela 3.3), mdulo de impresso deerros e mdulo de constantes matemticas de programas que utilizada para inicializarparmetros e constantes globais.

Tabela 3.1: Mdulos do INTLIB: Aritmtica elementar para intervalos

Nome Funo

ADD Adio

SUB Subtrao

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 37

MULT Multiplicao

IDIV Diviso

RNDOUNT Arredondamento

SCLADD Adio de intervalos e nmeros re-ais

SCLMLT Multiplicao de escalar

Tabela 3.2: Mdulos do INTLIB: Funes padres para intervalos

Nome Funo

IEXP Exponencial

ISQRT Raiz quadrada

POWR Potncia inteira

HIIPOWR Potncia para um intervalo no ne-gativo

ILOG Logaritmo

ISIN Seno

ICOS Co-seno

IASIN Arco seno

IACOS Arco co-seno

IATAN Arco tangente

IACOT Arco co-tangente

ISINH Seno hiperblico

Tabela 3.3: Mdulos do INTLIB: Funes teis

Nome Funo

ICAP Interseo

IDISJ Dois intervalos disjuntos

IHULL Unio convexa

IILEI Incluso no fechamento do inter-valo

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 38

IILTI Incluso no interior

IINF Retorna a esquerda do ponto final

IMID Ponto mdio de um intervalo

IMIG Magnitude

IRLEI Incluso de ponto no fechamento dointervalo

IRLTI Incluso de ponto no interior do in-tervalo

ISUP Retorna o ponto final direito

IVL1 Constroi intervalo para um ponto

IVLABS Construo de um intervalo a partirde outro

IVLI Atribuir um intervalo a outro

IWID Dimetro de um intervalo

3.7.1 Simulao de Arredondamento Direcionado

O arredondamento direcionado simulado uma forma com a qual fechamentos rigo-rosos para resultados de pontos-flutuantes podem ser obtidos em FORTRAN 77 e outraslinguagens e mquinas que no possuem acesso ao arredondamento direcionado verda-deiro. A nica exigncia que os parmetros aritmticos, tais como a exatido de umaoperao elementar, sejam conhecidos. Para mais detalhes ver [Kearfott 1995].

3.8 COMMONS MATH

Commons Math uma biblioteca desenvolvida em JAVA composta de um pequenoconjunto de utilitrios com objetivo de resolver alguns problemas de programao, comoos citados abaixo:

Varincias e estatsticas de resumo para uma lista de nmeros; Ajuste de uma reta a um conjunto de pontos por meio de regresso linear; Encontrar uma curva suave que passe atravs de uma coleo de pontos (interpola-

o);

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 39

Colocao de um modelo paramtrico para um conjunto de medidas usando mto-dos de mnimos quadrados; Resoluo de equaes envolvendo funes reais Resoluo de sistemas de equaes lineares; Soluo de equaes diferenciais ordinrias; Minimizao de funes multi-dimensional; Gerao de nmeros aleatrios com mais restries (por exemplo, a distribuio

gama), do que possvel usar no JDK; Realizao de testes de significncia estatstica; Diversas funes matemticas tais como fatoriais, coeficientes binomial e "funes

especiais".

3.8.1 Organizao

Commons Math dividido em catorze sub-pacotes, com base na funcionalidade for-necida. Estes sub-pacotes so:

1. org.apache.commons.math.stat - estatsticas, testes estatsticos.

2. org.apache.commons.math.analysis - integrao, interpolao, polinmios.

3. org.apache.commons.math.random - nmeros aleatrios, cordas e de gerao dedados.

4. org.apache.commons.math.special - funes especiais (Gama, Beta).

5. org.apache.commons.math.linear - matrizes, resoluo de sistemas lineares.

6. org.apache.commons.math.util - matemtica comum/ funes estendendo java.lang.Math.

7. org.apache.commons.math.complex - nmeros complexos.

8. org.apache.commons.math.distribution - distribuies de probabilidade.

9. org.apache.commons.math.fraction - nmeros racionais.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 40

10. org.apache.commons.math.transform - mtodos de transformao (Fast Fou-rier).

11. org.apache.commons.math.geometry - geometria (espaos euclidianos e Parti-cionamento Espacial Binria).

12. org.apache.commons.math.optimization - maximizao ou minimizao dafuno.

13. org.apache.commons.math.ode - equaes diferenciais ordinrias integrao.

14. org.apache.commons.math.genetics - algoritmos genticos.

3.8.2 Nmeros Complexos

O pacote org.apache.commons.math.complex responsvel pela criao do tipo n-mero complexo e pela implementao das suas funes.

Este pacote composto pelas seguintes classes:

Complex

Esta classe responsvel pela representao do nmero complexo, ou seja, um n-mero com uma parte real e uma parte imaginria.

As implementaes de operaes aritmticas lidam com NaN e valores infinitos deacordo com as regras para o tipo Double, ou seja, equals (java.lang.Object) uma relaode equivalncia para todas as instncias que tm um NaN, na parte real ou imaginria, porexemplo, so considerados iguais:

1 + NaNi NaN + i NaN + NaNi

Construtores:

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 41

1. Complex(double real): Cria um nmero complexo dado sua parte real.

2. Complex(double real, double imaginaria): Cria um nmero complexo dado suaparte real e imaginria.

Mtodos:

A Tabela 3.4 apresenta todos os mtodos implementados na classe Complex:

Tabela 3.4: Mtodos da classe Complex

Mtodo Funo

abs() Retorna o valor absoluto de um nmero com-plexo

acos() Calcula o arco-cosseno de um nmero com-plexo

add(Complex c) Retorna o complexo cujo valor (this + c)

add(double d) Retorna o complexo cujo valor (this + d)

asin() Calcula o arco-seno de um nmero complexo

atan() Calcula o arco-tangente de um nmero com-plexo

cosh() Calcula o cosseno hiperblico de um nmerocomplexo

createComplex(double r, double i) Cria um nmero complexo dado sua parte reale imaginria

divide(Complex divisor) Retorna um nmero complexo cujo valor (this/ divisor)

Divide(double divisor) Retorna um nmero complexo cujo valor (this/ divisor)

equals(java.lang.Object outro) Testa se dois Complexos so iguais

exp() Calcula a funo exponencial de um nmerocomplexo

getArgument() Calcula o argumento de um nmero complexo

getField() Obtem o campo ao qual a instncia pertence.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 42

getImaginary() Retorna aparte imaginria de um nmero com-plexo

getReal() Retorna a parte real de um nmero complexo

hasCode() Obter um hashCode para o nmero complexo

isInfinity() Verifica se ambas as partes de um nmero com-plexo tem um valor infinito

isNaN() Verifica se uma ou ambas as partes de um n-mero complexo NaN.

log() Calcula o logaritmo natural de um nmero com-plexo

multiplay(Complex f) Retorna um nmero complexo cujo valor (this* f)

multiplay(double f) Retorna um nmero complexo cujo valor (this* f)

multiplay(int f) Retorna um nmero complexo cujo valor (this* f)

negate() Retorna um nmero complexo cujo valor (-this)

nthRoot(int n) Calcula as n razes de um nmero complexo

pow(Complex x) Retorna um nmero complexo elevado x

pow(double x) Retorna um nmero complexo elevado x

reciprocal() Retorna o inverso multiplicativo

sin() Calcula o seno de um nmero complexo

sinh() Calcula o seno hiperblico de um nmero com-plexo

sqrt() Calcula a raiz quadrada de um nmero com-plexo

sqrt1z() Calcula a raiz quadrada de (this -1)

substract(Complex s) Retorna um nmero complexo cujo valor (this-s)

substract(double s) Retorna um nmero complexo cujo valor (this-s)

tan() Calcula a tangente de um nmero complexo

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 43

tanh() Calcula a tangente hiperblica de um nmerocomplexo

toString() Complex valueOf(double realPart) Cria um n-mero complexo dado a parte real

valueOf(double r, double i) Cria um nmero complexo dado ambas as par-tes

ComplexField

Esta classe responsvel pela representao dos nmeros complexos. compostapelos seguintes mtodos:

getInstance(): Obtm uma instncia nica retornando um ComplexField;

getOne(): Obtm a identidade multiplicativa e retorna um Complex;

getRuntimeClass(): Retorna a classe runtime do FieldElement e

getZero(): Obtm a identidade aditiva e retorna um Complex;

ComplexFormat

Esta classe responsvel pelo formato de um nmero complexo, Re(c) + Im(c)i. ipode ser substitudo por j (ou qualquer outra coisa), e o formato de nmero de peas reaise imaginrias podem ser configurados.

Construtores:

1. ComplexFormat (): Cria uma instncia com a parte imaginria padro, i, e o for-mato de nmero padro para ambas as partes reais e imaginrias.

2. ComplexFormat (formato java.text.NumberFormat): Cria uma instncia com umformato de nmero personalizado para as partes reais e imaginrias.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 44

3. ComplexFormat (java.text.NumberFormat realFormat, java.text.NumberFormat ima-ginaryFormat): Cria uma instncia com um formato de nmero personalizado para a partereal e um formato de nmero personalizado para a parte imaginria.

4. ComplexFormat (imaginaryCharacter java.lang.String): Cria uma instncia comum carcter personalizado imaginrio, e no formato de nmero padro para ambas as par-tes reais e imaginrias.

5. ComplexFormat (imaginaryCharacter java.lang.String, formato java.text.NumberFormat):Cria uma instncia com um carcter personalizado imaginrio, e um formato de nmeropersonalizado para as partes reais e imaginrias.

6. ComplexFormat (imaginaryCharacter java.lang.String, java.text.NumberFormat re-alFormat, java.text.NumberFormat imaginaryFormat): Cria uma instncia com um carc-ter personalizado imaginrio, um formato de nmero personalizado para a parte real, eum formato de nmero personalizado para a parte imaginria.

Mtodos:

A Tabela 3.5 apresenta todos os mtodos implementados na classe ComplexFormat:

Tabela 3.5: Mtodos da classe ComplexFormat

Mtodo Funo

format(Complex c) Este mtodo chama for-mat(Object,StringBuffer,FieldPosition).

format(Complex complexo,StringBuffer sb, FieldPosi-tion pos)

Formata um objeto complexo para produzir umastring.

format(Double c) Esse mtodo chama for-mat(Object,StringBuffer,FieldPosition).

format(Object obj, String-Buffer sb, FieldPosition pos)

Formata um objeto para produzir uma string

getAvailableLocales() Obtm um conjunto de localidades para as quais for-matos complexos esto disponveis.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 45

getImaginaryCharacter() Acessa o ImaginaryCharacter

getImaginaryFormat() Formata o imaginaryFormat

getInstance() Retorna o formato padro complexo para o localatual.

getInstance(Locale locale) Retorna o formato padro complexo para a determi-nada localidade.

getInstance(String ima-ginaryCharacter, Localelocale)

Retorna o formato padro complexo para a determi-nada localidade.

getRealFormat() Acessa o realFormat

parse(String source) Analisa uma string para produzir um objeto com-plexo.

parse(String source, ParsePo-sition pos)

Analisa uma string para produzir um objeto com-plexo.

3.9 Linguagens XSC

H cinco dcadas que esto sendo desenvolvidas pesquisas com o intuito de possibi-litar que mquinas suportem uma aritmtica mais poderosa que a do ponto flutuante. Apartir da surgiram as linguagens XSC (eXtended Scientific Computing) que so lingua-gens para computao cientfica com algoritmos precisos carregando seu prprio controlede preciso.

No final da dcada de setenta, mais precisamente entre 1976 e 1979, duas universi-dades alems a Universidade Karlshure e Kaiserlautern se uniram para desenvolver umaextenso do PASCAL, que ficou conhecida como PASCAL-SC. Nos anos seguintes, jun-tamente com a IBM, foi lanada uma verso do FORTRAN 77 implementada em compu-tadores IBM/370 chamada ACRITH-SC.

A primeira gerao das linguagens cientficas foram as linguagens SC. As primeiraslinguagens desenvolvidas foram FORTRAN-SC e PASCAL-SC, sendo esta ltima bas-tante citada na literatura sobre computao intervalar. Diversos pacotes foram criadospara estas linguagens tanto para tarefas numricas usuais quanto para resoluo de sis-

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 46

temas lineares. Uma grande desvantagem desta linguagem que s estavam disponveispara uma variedade limitada de computadores [Kearfott 1996].

O desenvolvimento de novas linguagens de programao, como C++ e JAVA, torna-ram mais fcil a portabilidade das linguagens, ou seja, C++ e JAVA so capazes de seadaptar a hardwares e softwares. Deste fato surgiram as linguagens XSC, uma segundagerao de linguagens com maior exatido com suporte a operaes intervalares.

De acordo com [Dutra 2000], estas novas linguagens para computao cientfica tmcomo caractersticas principais:

Sobrecarga de operadores, Agrupamento das funes em mdulos especficos, Vetores dinmicos, Arredondamento direcionado, Tipos numricos primitivos simples, como real, complexo e intervalo; Operadores aritmticos de maior exatido para os tipos numricos e Funes elementares de maior exatido para os tipos numricos.

Nas prximas subsees sero apresentadas duas destas linguagens: PASCAL-XSC eC-XSC.

3.9.1 PASCAL-XSC

A linguagem de programao PASCAL-XSC6 uma ferramenta desenvolvida parasolucionar problemas numricos. Esta nova verso, diferente da PASCAL-SC, tem avantagem de ser portvel para outros hardwares e possui tipos de dados especficos paraintervalos, nmeros complexos e matrizes.

PASCAL-XSC foi desenvolvida na linguagem e programao C e seus compiladoresso utilizados por uma variedade de computadores tais como computadores pessoais, es-taes de trabalho, mainframes e supercomputadores.

Os principais conceitos de Pascal-XSC so [Klatte et al. 1999]:

Padro ISO do PASCAL;6http://www2.math.uni-wuppertal.de/wrswt/xsc/pxsc.html

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 47

Conceito de operador universal; Funes e operadores com tipo de resultado arbitrrio; Sobrecarga de procedimentos; Rotinas de leitura e escrita; Conceito de mdulo; Arrays dinmicos, acesso e subarrays; Conceito de string; Arredondamento controlado; Produto escalar timo; Tipo de padro dotprecision e tipos aritmticos adicionais; Aritmtica de alta-exatido para todos os tipos; Funes de alta-exatido e avaliao exata de expresses; Funes e operadores.

Esta linguagem pode implementar aplicaes em mdulos, cuja funo simplificarum programa (cdigo) grande em pequenos blocos de cdigos, para resolver problemasnumricos comuns, tais como:

Sistemas de equaes lineares e no-lineares; Inverso de matrizes; Autovalores e Autovetores; Avaliao de expresses aritmticas; Avaliao de polinmios e busca de zeros de polinmios; Quadratura numrica; Equaes diferenciais; Equaes integrais; Diferenciao automtica; Otimizao.

Descrio dos tipos bsicos

PASCAL-XSC baseado na linguagem de programao PASCAL. Aqui sero apre-sentados os tipos bsicos de PASCAL e as alteraes que foram necessrias durante odesenvolvimento de PASCAL-XSC. Os tipos bsicos em Pascal so os tipos integer,boolean, char, tipos de enumerao e subtipos. A seguir eles so definidos: [Klatteet al. 1999]

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 48

Integer: Uma constante literal do tipo integer uma sequncia de dgitos (decimais)com ou sem um sinal de + ou -. Em PASCAL-XSC, um valor do tipo inteiro pode tambmser escrito como uma constante hexadecimal inicializada com o caractere $ e seguido poruma sequncia de dgitos hexadecimais composto pelos dgitos 0, 1, ..., 9 e as letras A, B,..., F e a, b, ..., f.

Real: Uma constante literal do tipo real tem a seguinte representao:

mantissa E expoente.

A mantissa uma sequncia de dgitos com o sem ponto decimal e o expoente umvalor inteiro. A notao mantissa, onde o expoente omitido, tambm permitida.

Em Pascal-XSC, para realizar a converso de constantes literais real dentro do for-mato de dados internos de maneira controlada, necessria uma notao adicional paraestas constantes. Enquanto a notao de real em PASCAL implica na converso comarredondamento para o numero de ponto-flutuante mais prximo, ela possibilita a espe-cificao de constantes reais que so convertidas com arredondamento para o nmero deponto-flutuante menor mais prximo ou para o maior mais prximo com notaes (< mantissa E expoente) e (> mantissa E expoente) respectivamente. O E e o expoentepodem ser omitidos mas os parnteses so obrigatrios.

Boolean: Este tipo composto pelas constantes lgicas true e false, onde false < true.

Char: Estas constantes so fechadas entre aspas simples. A ordem de relao aseguinte:

0 < 1 < ... < 9 e a < b < ... < z.

Tipos e enumerao: Este tipo consiste de constantes listadas na definio de tipos.A relao de ordem definida pela ordem da enumerao. Um tipo de enumerao definido pelo programador em uma definio de tipos. As constantes literais que so oselementos de uma enumerao no podem colidir com nenhum valor de outra enumera-o.

Subtipos: Subtipos podem ser definidos pela especificao limite inferior e do limitesuperior (constante ... constante). O conjunto dos valores de um subtipo consiste em to-dos os valores que esto entre esses limites.

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 49

Dotprecision: PASCAL-XSC introduz esse novo tipo que baseado no tipo real epermite a representao de produtos de dois nmeros reais arbitrrios e a adio de umnmero arbitrrio de tais produtos em um formato de ponto-flutuante fixo de tamanhoadequado. Se o formato real interno fixado pela mantissa de tamanho l e os expoen-tes mximo (emax) e mnimo (emin) ento uma varivel dotprecission ocupa espao dearmazenamento da forma

Figura 3.2: Tamanho de uma varivel do tipo dotprecision

O tamanho total : L = g + 2emax + 2|emin| + 2l dgitos, onde g denota o nmero dedgitos guardados na acumulao de carga durante a adio.

Valores do tipo dotprecision tipicamente ocorrem durante a multiplicao de vetorese matrizes.

Os Tipos Intervalo e Complexo

PASCAL-XSC prov uma aritmtica adicional para os tipos complex, interval e cin-terval. Eles no possuem constantes nem operadores como sua linguagem, portanto, tam-bm no h expresses. O uso de operadores e funes padres requer o uso dos mdulosaritmticos correspondentes (C_ARI, I_ARI e CI_ARI, respectivamente).

O tipo complex: O nmero complexo z = x+ iy, com x sendo a parte real e y a parteimaginria podem ser declaradas em PASCAL como:

type complex = record re, im: real end;

Em PASCAL-XSC, este tipo um tipo pr-definido. A declarao da varivel

var z:complex;

especifica uma varivel complexa z. As partes real e imaginria de z podem ser aces-sadas por z.re e z.im, respectivamente.

O tipo interval: Para intervalos reais

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 50

a = [a,a] := {x R|a x a}

com a sendo o limite inferior e a o limite superior, PASCAL-XSC prov um tipointerval pr-definido, declarado da seguinte forma:

type interval = record inf, sup: real end;

A declarao de varivel

var a: interval;

especifica uma varivel a do tipo intervalo. Os limites superior e inferior podem seracessados por a.inf e a.sup, respectivamente.

O tipo cinterval: Intervalos complexos so retngulos com lados paralelos aos eixosno plano complexo. O tipo pr-definido cinterval definido por:

type cinterval: record re, im: interval end;

As partes de um complexo intervalar c, declarado como

var c: cinterval;

podem ser acessados por c.re (um intervalo para a parte real) e c.im (um intervalo paraa parte imaginria). Os seus limites podem ser acessados por c.re.inf, c.re.sup, c.im.inf ec.im.sup.

3.9.2 C-XSC

Segundo [Hofschuster & Krmer 2010], a linguagem C-XSC7 uma ferramenta bas-tante poderosa e fcil de ser manuseada. Esta linguagem tem como principal objetivoauxiliar no desenvolvimento de algoritmos numricos que necessitam de alta preciso.As caractersticas, ou tipos, mais importantes em C-XSC so os tipos real, complexo, in-tervalo e complexo intervalar.

A escolha da linguagem de programao C++ ao invs de C se d pelo fato que estasegunda no ser apropriada para programar algoritmos numricos, j que no fornece asestruturas de dados numricas bsicas como vetores e matrizes e no faz a checagem daindexao em arrays [Wiethoff 1996]. J a linguagem C++, que uma extenso da C

7http://www2.math.uni-wuppertal.de/wrswt/xsc/cxsc.html

CAPTULO 3. ALGUMAS FERRAMENTAS PARA CLCULO NUMRICO 51

orientada objetos, fornece vrias facilidades que suprem as deficincias da C, j queagora a linguagem apresenta o conceito de classes e sobrecarga de operadores.

As caractersticas bsicas da C-XSC so:

Tipos de dados real (real), complexos (complex), intervalo (interval) e complexointervalar (cinterval); Fornece uma notao especfica para manipular subarrays de vetores e matrizes

tornando-os tipos dinmicos; Dotprecision, ou seja, tipos com preciso aps a vrgula; Maior preciso em operadores aritmticos pr-definidos; Funes padres de alta ocorrncia; O controle de arredondamento durante operaes de entrada e sada de dados se

d pelo conceito de sobrecarga dos operadores > da C++. Sendo assim, possvel especificar o nmero de casas decimais do valor impresso. Fornece uma aritmtica dinmica de mltipla preciso, como o real longo (l_real)

e o intervalo longo (l_interval), bem como tambm so implementados vetoresdinmicos correspondentes a matrizes, includo operaes vetoriais. Fornece uma biblioteca para resoluo de problemas, que nada mais do que uma

coleo de rotinas de problemas padres para anlises numricas, com isto, garanteresultados de alta preciso.

Descrio dos tipos bsicos

C-XSC prov os tipos de dados numricos simples como real, interval, complex ecinterval. Cada um com suas prprias aritmticas, operadores relacionais e funes arit-mticas padro. Todos os operadores aritmticos pr-definidos fornecem resultados comuma preciso de pelo menos 1 ulp(unidade na ltima casa decimal), desta forma poss-vel ter a mxima preciso na computao cientfica nos seus tipos.

O arredondamento dos operadores aritmticos pode ser controlado usando os tiposinterval e cinterval. Funes esto disponveis para todas as combinaes matematica-mente teis. Constantes literais podem ser convertidas com