Title: POO para Computa
1 POO para Computação Científica
- MAC-5715 Tópicos de Programação
- Orientada a Objetos
- Paulo Machado
- Wellington Pinheiro
2Assuntos Abordados
- Aplicações da Computação Científica
- Bibliotecas para Computação Científica
- Por que OO para Computação Científica
- Algumas Bibliotecas
- JScience
- Exemplos
- Resumo
- Conclusão
3 O que é Computação Científica?
- Definição da Wikipedia
- Computação científica (ou ciência computacional)
é o campo de estudo interessado na construção de
modelos matemáticos e técnicas de soluções
numéricas utilizando computadores para analisar e
resolver problemas científicos e de engenharia.
3
4Motivação
- Por que OO e Computação Científica ?
- Relação entre OO e Computação Científica ainda
pouco explorada - Grande ênfase no desenvolvimento utilizando
Fortran (John Backus 1954-1957) - Algum desenvolvimento feito em Linguagem C
- Muito pouco utilizando C
- Quase nada feito em Java
5Aplicações
Situações que necessitam de Análise Numérica
como
- Simulação computacional
- Reconhecimento de Padrões
- Otimização
- Predições
6Áreas que Utilizam Computação Científica
- Modelagem Financeira
- Sistemas de Informações Geográficos
- Química Computacional
- Bio-Computação
- Física Matemática
- Mecânica Computacional
- várias outras
6
7OO e a Computação Científica
- Por que utilizar OO na Computação Científica?
- Mais intuitivo para quem usa
- Melhor adaptação de estruturas matemáticas
- Encapsulamento garante que os dados não estejam
espalhados - Facilidade de personalizações através de
extensões ou composições
7
8Ferramentas Bibliotecas
O que há disponível para Computação Científica?
- CAS Computer Algebra System (Mapple,
Mathematica, Derive, etc) - Biblioteca de Funções e Classes (CLN, GiNaC,
JCalculus, JScience, Jakarta Commons Math) - Desenvolvimento proprietário
8
9Características de Bibliotecas
- Representam conceitos matemáticos
- Capazes de resolver alguns tipos de problemas
matemáticos - Podem ser integrados em aplicações
- São otimizados
- Permitem customizações
- Existem soluções de Código Aberto
9
10 Bibliotecas
- Bibliotecas Open Source disponíveis
- CNL Class Library For Numbers
- GiNaC GiNaC is Not a CAS
- JScience
- Jakarta Math Commons
- O foco principal dessa apresentação será o
JScience.
10
11 CLN Class Library for Numbers
- CLN tem as seguintes características
- Escrita em C
- Define vários tipos de dados
- Disponibiliza um bom conjuntos de funções
elementares, lógicas e trancedentais - Provê mecanismo de Coleta de Lixo
11
12 CLN Class Library for Numbers
12
13 CLN Class Library for Numbers
- cl_I a 5
- cl_I b 2
- cl_I c -3
- cl_F r (ab)c
- r (acb)/a r abs(c)
- r sqrt(c) r sin(r)
- r gcd(a, 25)
- r pi((float_format_t)10000)
13
14GiNaC GiNaC is Not CAS
- GiNaC tem as seguintes características
- Escrito em C
- Estende as capacidades do C através de
manipulações simbólicas - Construído em cima do CLN
- Suporte para funções polinomiais e racionais
- Disponibiliza várias outras funções
- Possui ambiente para emular um CAS ginsh.
14
15GiNaC GiNaC is Not CAS
- Funcionalidades do GiNaC
- Expressões e Avaliação Automática
- Definição de Símbolos
- Contêineres para Somas, Produtos e Potências
- Definições de Listas
- Integração e Diferenciação
- Suporte ao uso de Matrizes
- E várias outras.
16GiNaC Funções e Símbolos
16
17GiNaC Exemplo Símbolo
- ex f(int n, const ex x)
- return pow(x, n)
-
- int main()
- symbol x("x")
- symbol. ex e f(6, x)
- cout ltlt e.degree(x) ltlt endl
-
18GiNaC Exemplo Derivada
- int main()
-
- symbol x("x"), y("y")
- ex P pow(x, 5) pow(x, 2) y
- cout ltlt P.diff(x,1) ltlt endl
- // 5x4 2x
- cout ltlt P.diff(x, 2) ltlt endl
- // 20x3 2
- cout ltlt P.diff(y) ltlt endl
- // 1 // -gt 1
-
19Jakarta Commons Math (JCM)
- Jakarta Commons Math tem as características
- Escrito em Java
- Possui uma representação OO intuitiva dos
conceitos matemáticos - Disponibiliza funcionalidades mais poderosas
(como resolução de sistemas lineares e análise
matemática) - Abrange área de estatística
- Faz parte do projeto Jakarta do Apache Group
19
20JCM Representação de Funções
20
21JCM Solucionadores
21
22JCM Exemplo Matrizes
- double coef 1d,1d, 1d,-1d
- double s 2,0
-
- BigMatrixImpl m
- new BigMatrixImpl(coef)
- BigDecimal x m.solve(s)
- for (BigDecimal d x)
- System.out.println(d.doubleValue()
- "\t")
22
23JCM Exemplo Raízes
- try
- UnivariateRealFunction f
- new PolynomialFunction(new double 0, 1, 1,
1) - UnivariateRealSolver solver new
BisectionSolver(f) - System.out.println(Math.round(solver.solve(-1,
1))) - catch (FunctionEvaluationException ex)
- System.out.println(
- "\nOcorreu um erro avaliando a expressão.")
- System.exit(-1)
- catch (ConvergenceException ex)
- System.out.println(
- "\nExpressão não tem uma raíz no "
- "intervalo definido.")
- System.exit(-1)
23
24JCM Exemplo Estatística
- / evaluation approach /
- double values
- new double 1, 2, 3, 4, 5
- UnivariateStatistic stat new Mean()
- System.out.println("mean "
- stat.evaluate(values))
- stat.clear()
- System.out.println(
- "mean after clear is NaN "
- stat.getResult())
25JCM Exemplo Estatística
- / incremental approach /
- double values new double 1, 2, 3, 4, 5
- StorelessUnivariateStatistic stat new Mean()
- System.out.println("mean before adding a value is
- NaN " stat.getResult())
- for (int i 0 i lt values.length i)
- stat.increment(valuesi)
- System.out.println("current mean "
- stat.getResult())
- stat.clear()
- System.out.println("mean after clear is NaN "
- stat.getResult())
26POO para Computação Científica
JScience
27JScience - Visão
- Prover a mais compreensível biblioteca Java para
a comunidade científica - Criar sinergia entre todas as ciências pela
integração do conhecimento em uma mesma
estrutura - Prover serviços de qualidade para cálculo
científico.
28JScience - Sobre
- Projeto de código aberto
- Primeira versão lançada em 26/01/2005
- Versão atual adere as especificações JSR 275
Units Specification do JCP - Mais de 70 membros registrados que o utilizam
(entre eles o projeto MathEclipse) - Projeto em constante evolução
- Tempo médio de lançamento de versões 2 meses
29JScience - Módulos
- Mapeamento de estruturas matemáticas
- Sistema de coordenadas para aplicações
geográficas - Álgebra linear
- Funções
- Números
- Medidas e unidades de medida
- Modelos físicos
- Sistema monetário.
30JScience - Estruturas
30
31JScience - Funções
31
32JScience - Exemplos
- import static org.jscience.physics.units.SI.
- MeasureltElectricResistancegt R1
Measure.valueOf(100, 1, OHM) - // 1 precision.
- MeasureltElectricResistancegt R2
Measure.valueOf(300, 3, OHM) - // 1 precision.
- MeasureltElectricPotentialgt U0
Measure.valueOf(28, 0.01, VOLT) - // 0.01 V fluctuation.
- MatrixltMeasuregt A Matrix.valueOf(new
Measure - Measure.ONE , Measure.ONE
, Measure.valueOf(0, OHM), - Measure.ONE.opposite() , Measure.ZERO
, R1, - Measure.ZERO , Measure.ONE.opposite(
), R2 - )
- VectorltMeasuregt B Vector.valueOf((Measure)U0,
- Measure.valueOf(0, VOLT), Measure.valueOf(0,
VOLT)) - VectorltMeasuregt X A.solve(B)
- System.out.println(X)
- System.out.println(X.get(2).to(MILLI(AMPERE)))
33JScience - Exemplos
- // Define duas variaveis locais (x, y).
- VariableltComplexgt varX new
- Variable.LocalltComplexgt("x")
- // f(x) ix² 2x 1
- PolynomialltComplexgt x
- Polynomial.valueOf(Complex.ONE, varX)
- PolynomialltComplexgt fx
- x.pow(2).times(Complex.I).plus(
- x.times(Complex.valueOf(2, 0)).plus(Complex.ONE
)) - System.out.println(fx) System.out.println(fx.pow(
2)) - System.out.println(fx.differentiate(varX))
- System.out.println(fx.integrate(varY))
- System.out.println(fx.compose(fx))
- // Calcula a expressao
- varX.set(Complex.valueOf(2, 3))
- System.out.println(fx.evaluate())
34JScience - Módulos Previstos (2006)
- Transformada de Fourier
- Física Nuclear
- Integração
- Algoritmos genéticos
- Redes Neurais
- Geradores de massa de dados aleatórios
- Calendários
- Elementos Químicos
- Biologia Molecular
35Resumo
- CLN é vastamente utilizada, dispõe de mecanismos
interessantes porém sua biblioteca de funções é
limitada - GiNaC disponibiliza um mecanismo interessante
(manipulação simbólica) aliado a uma biblioteca
potente porém é complexa na sua instalação e
utilização - Jakarta Commons Math é muito potente, bem
planejada porém não disponibiliza uma gama muito
grande de funcionalidades - JScience possui uma arquitetura estável e baseada
em definições matemáticas. Entretanto, possui
poucas classes implementadas.
36Conclusão
- Ramo pouco evoluído
- Esforços estão na direção de construir
bibliotecas de cálculo científico - Nenhum padrão de projeto criado
- Tópico interessante e vasto para desenvolvimento
de teses.
37Referências
- Wikipedia http//en.wikipedia.org/wiki/Scientific
_computing - JScience
- http//jscience.org/
- https//jscience.dev.java.net/
- GiNaC http//www.ginac.de/
- CLN http//www.ginac.de/CLN/
- Jakarta Commons Math http//jakarta.apache.org/co
mmons/math/ - Java Community Process JSR 275
- http//www.jcp.org/en/jsr/detail?id275
- MathEclipse
- http//www.plog4u.org/index.php/Using_MathEclipse
38E por fim.