1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo...

38
POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro

Transcript of 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo...

Page 1: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

POO para Computação Científica

MAC-5715: Tópicos de Programação Orientada a Objetos

Paulo MachadoWellington Pinheiro

Page 2: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

2

Assuntos 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

Page 3: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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

Page 4: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

4

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

Motivação

Page 5: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

5

Aplicações

• Simulação computacional• Reconhecimento de Padrões• Otimização• Predições

Situações que necessitam de Análise Numérica como:

Page 6: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

Á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

Page 7: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

OO 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

Page 8: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

Ferramentas & Bibliotecas

• CAS – Computer Algebra System (Mapple, Mathematica, Derive, etc)

• Biblioteca de Funções e Classes (CLN, GiNaC, JCalculus, JScience, Jakarta Commons Math)

• Desenvolvimento proprietário

O que há disponível para ComputaçãoCientífica?

8

Page 9: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

Caracterí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

Page 10: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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

Page 11: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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

Page 12: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

CLN – Class Library for Numbers

12

Page 13: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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

Page 14: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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.

GiNaC – GiNaC is Not CAS

14

Page 15: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

15

GiNaC – 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.

Page 16: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

16

GiNaC – Funções e Símbolos

16

Page 17: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

17

GiNaC – 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 << e.degree(x) << endl;

}

Page 18: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

18

GiNaC – Exemplo Derivadaint 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*xcout << P.diff(x, 2) << endl;// 20*x^3 + 2 cout << P.diff(y) << endl; // 1 // -> 1

}

Page 19: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

Jakarta 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

Page 20: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

JCM – Representação de Funções

20

Page 21: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

JCM – Solucionadores

21

Page 22: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

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

Page 23: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

JCM – Exemplo Raízestry {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

Page 24: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

24

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

JCM – Exemplo Estatística

Page 25: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

25

JCM – 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 < 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());

Page 26: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

POO para Computação Científica

JScience

Page 27: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

27

• 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.

JScience - Visão

Page 28: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

28

JScience - 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

Page 29: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

29

• 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.

JScience - Módulos

Page 30: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

30

JScience - Estruturas

30

Page 31: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

31

JScience - Funções

31

Page 32: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

32

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

JScience - Exemplos

Page 33: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

33

// 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 expressaovarX.set(Complex.valueOf(2, 3));System.out.println(fx.evaluate());

JScience - Exemplos

Page 34: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

34

• 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

JScience - Módulos Previstos (2006)

Page 35: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

35

• 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.

Resumo

Page 36: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

36

• 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.

Conclusão

Page 37: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

Referê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/commons/math/

• Java Community Process – JSR 275:http://www.jcp.org/en/jsr/detail?id=275

• MathEclipsehttp://www.plog4u.org/index.php/Using_MathEclipse

Page 38: 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro.

38

Perguntas ?

E por fim….