Computacao cientifica

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

Transcript of Computacao cientifica

Page 1: Computacao cientifica

1

POO para Computação Científica

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

Orientada a Objetos

Paulo Machado

Wellington Pinheiro

Page 2: Computacao cientifica

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: Computacao cientifica

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

Page 4: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

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

Page 7: Computacao cientifica

7

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: Computacao cientifica

8

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ção

Científica?

8

Page 9: Computacao cientifica

9

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: Computacao cientifica

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

Page 11: Computacao cientifica

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

Page 12: Computacao cientifica

12

CLN – Class Library for Numbers

12

Page 13: Computacao cientifica

13

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: Computacao cientifica

14

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: Computacao cientifica

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: Computacao cientifica

16

GiNaC – Funções e Símbolos

16

Page 17: Computacao cientifica

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: Computacao cientifica

18

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

}

Page 19: Computacao cientifica

19

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 Group19

Page 20: Computacao cientifica

20

JCM – Representação de Funções

20

Page 21: Computacao cientifica

21

JCM – Solucionadores

21

Page 22: Computacao cientifica

22

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: Computacao cientifica

23

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: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

26

POO para Computação Científica

JScience

Page 27: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

30

JScience - Estruturas

30

Page 31: Computacao cientifica

31

JScience - Funções

31

Page 32: Computacao cientifica

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: Computacao cientifica

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 expressao

varX.set(Complex.valueOf(2, 3));

System.out.println(fx.evaluate());

JScience - Exemplos

Page 34: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

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: Computacao cientifica

37

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

• MathEclipse

http://www.plog4u.org/index.php/Using_MathEclipse

Page 38: Computacao cientifica

38

Perguntas ?

E por fim….