Sie sind auf Seite 1von 38

POO para Computao Cientfica

MAC-5715: Tpicos de Programao Orientada a Objetos Paulo Machado Wellington Pinheiro

Assuntos Abordados
Aplicaes da Computao Cientfica Bibliotecas para Computao Cientfica Por que OO para Computao Cientfica Algumas Bibliotecas JScience Exemplos Resumo Concluso
2

O que Computao Cientfica?


Definio da Wikipedia Computao cientfica (ou cincia computacional) o campo de estudo interessado na construo de modelos matemticos e tcnicas de solues numricas utilizando computadores para analisar e resolver problemas cientficos e de engenharia.

Motivao
Por que OO e Computao Cientfica ? Relao entre OO e Computao Cientfica 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
4

Aplicaes
Situaes que necessitam de Anlise Numrica como: Simulao computacional Reconhecimento de Padres Otimizao Predies

reas que Utilizam Computao Cientfica


Modelagem Financeira Sistemas de Informaes Geogrficos Qumica Computacional Bio-Computao Fsica Matemtica Mecnica Computacional vrias outras
6

OO e a Computao Cientfica
Por que utilizar OO na Computao Cientfica? Mais intuitivo para quem usa Melhor adaptao de estruturas matemticas Encapsulamento garante que os dados no estejam espalhados Facilidade de personalizaes atravs de extenses ou composies
7

Ferramentas & Bibliotecas


O que h disponvel para Computao Cientfica? CAS Computer Algebra System (Mapple, Mathematica, Derive, etc) Biblioteca de Funes e Classes (CLN, GiNaC, JCalculus, JScience, Jakarta Commons Math) Desenvolvimento proprietrio

Caractersticas de Bibliotecas
Representam conceitos matemticos Capazes de resolver alguns tipos de problemas matemticos Podem ser integrados em aplicaes So otimizados Permitem customizaes Existem solues de Cdigo Aberto
9

Bibliotecas
Bibliotecas Open Source disponveis: CNL Class Library For Numbers GiNaC GiNaC is Not a CAS JScience Jakarta Math Commons O foco principal dessa apresentao ser o JScience.

10

CLN Class Library for Numbers


CLN tem as seguintes caractersticas: Escrita em C++ Define vrios tipos de dados Disponibiliza um bom conjuntos de funes: elementares, lgicas e trancedentais Prov mecanismo de Coleta de Lixo
11

CLN Class Library for Numbers

12

CLN Class Library for Numbers


cl_I a = 5; cl_I b = 2; cl_I c = -3; cl_F r = (a+b)+c; r = (a+c*b)/a; r = abs(c); r = sqrt(c); r = sin(r); r = gcd(a, 25); r = pi((float_format_t)10000);
13

GiNaC GiNaC is Not CAS


GiNaC tem as seguintes caractersticas: Escrito em C++; Estende as capacidades do C++ atravs de manipulaes simblicas; Construdo em cima do CLN; Suporte para funes polinomiais e racionais; Disponibiliza vrias outras funes; Possui ambiente para emular um CAS: ginsh.
14

GiNaC GiNaC is Not CAS


Funcionalidades do GiNaC : Expresses e Avaliao Automtica Definio de Smbolos Contineres para Somas, Produtos e Potncias Definies de Listas Integrao e Diferenciao; Suporte ao uso de Matrizes; E vrias outras.
15

GiNaC Funes e Smbolos

16

GiNaC Exemplo Smbolo


ex f(int n, const ex &x) { return pow(x, n); } int main() { symbol x("x"); symbol. ex e = f(6, x); cout << e.degree(x) << endl; }
17

GiNaC Exemplo Derivada


int main() { symbol x("x"), y("y"); ex P = pow(x, 5) + pow(x, 2) + y; cout << P.diff(x,1) << endl; // 5*x^4 + 2*x cout << P.diff(x, 2) << endl; // 20*x^3 + 2 cout << P.diff(y) << endl; // 1 // -> 1 }
18

Jakarta Commons Math (JCM)


Jakarta Commons Math tem as caractersticas: Escrito em Java Possui uma representao OO intuitiva dos conceitos matemticos Disponibiliza funcionalidades mais poderosas (como resoluo de sistemas lineares e anlise matemtica) Abrange rea de estatstica Faz parte do projeto Jakarta do Apache Group
19

JCM Representao de Funes

20

JCM Solucionadores

21

JCM 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

JCM Exemplo Razes


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 expresso."); System.exit(-1); } catch (ConvergenceException ex) { System.out.println( "\nExpresso no tem uma raz no " + "intervalo definido."); System.exit(-1); }

23

JCM Exemplo Estatstica


/* 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());

24

JCM Exemplo Estatstica


/* 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 < values.length; i++) { stat.increment(values[i]); System.out.println("current mean = " + stat.getResult()); } stat.clear(); System.out.println("mean after clear is NaN = " + stat.getResult());
25

POO para Computao Cientfica

JScience

JScience - Viso
Prover a mais compreensvel biblioteca Java para a comunidade cientfica; Criar sinergia entre todas as cincias pela integrao do conhecimento em uma mesma estrutura; Prover servios de qualidade para clculo cientfico.

27

JScience - Sobre
Projeto de cdigo aberto Primeira verso lanada em 26/01/2005 Verso atual adere as especificaes JSR 275: Units Specification do JCP Mais de 70 membros registrados que o utilizam (entre eles o projeto MathEclipse) Projeto em constante evoluo:
Tempo mdio de lanamento de verses: 2 meses
28

JScience - Mdulos
Mapeamento de estruturas matemticas Sistema de coordenadas para aplicaes geogrficas; lgebra linear; Funes; Nmeros; Medidas e unidades de medida; Modelos fsicos; Sistema monetrio.
29

JScience - Estruturas

30

JScience - Funes

31

JScience - Exemplos
import static org.jscience.physics.units.SI.*; Measure<ElectricResistance> R1 = Measure.valueOf(100, 1, OHM); // 1% precision. Measure<ElectricResistance> R2 = Measure.valueOf(300, 3, OHM); // 1% precision. Measure<ElectricPotential> U0 = Measure.valueOf(28, 0.01, VOLT); // 0.01 V fluctuation. Matrix<Measure> 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}} ); Vector<Measure> B = Vector.valueOf((Measure)U0, Measure.valueOf(0, VOLT), Measure.valueOf(0, VOLT)); Vector<Measure> X = A.solve(B); System.out.println(X); System.out.println(X.get(2).to(MILLI(AMPERE))); > {(7.0 1.6E-1) V, (21.0 1.5E-1) V, (7.0E-2 7.3E-4) V;} > (70.0 7.3E-1) mA
32

JScience - Exemplos
// Define duas variaveis locais (x, y). Variable<Complex> varX = new Variable.Local<Complex>("x"); // f(x) = ix + 2x + 1 Polynomial<Complex> x = Polynomial.valueOf(Complex.ONE, varX); Polynomial<Complex> 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());

33

JScience - Mdulos Previstos (2006)


Transformada de Fourier Fsica Nuclear Integrao Algoritmos genticos Redes Neurais Geradores de massa de dados aleatrios Calendrios Elementos Qumicos Biologia Molecular
34

Resumo
CLN vastamente utilizada, dispe de mecanismos interessantes porm sua biblioteca de funes limitada; GiNaC disponibiliza um mecanismo interessante (manipulao simblica) aliado a uma biblioteca potente porm complexa na sua instalao e utilizao; Jakarta Commons Math muito potente, bem planejada porm no disponibiliza uma gama muito grande de funcionalidades; JScience possui uma arquitetura estvel e baseada em definies matemticas. Entretanto, possui poucas classes implementadas.
35

Concluso
Ramo pouco evoludo; Esforos esto na direo de construir bibliotecas de clculo cientfico; Nenhum padro de projeto criado; Tpico interessante e vasto para desenvolvimento de teses.

36

Referncias
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/commons/math/ Java Community Process JSR 275: http://www.jcp.org/en/jsr/detail?id=275 MathEclipse http://www.plog4u.org/index.php/Using_MathEclipse

E por fim.

Perguntas ?

38

Das könnte Ihnen auch gefallen