Computacao cientifica

357 visualizações

Publicada em

Publicada em: Dispositivos e hardware
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
357
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Computacao cientifica

  1. 1. 1 POO para Computação Científica MAC-5715: Tópicos de Programação Orientada a Objetos Paulo Machado Wellington Pinheiro
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. 5 Aplicações • Simulação computacional • Reconhecimento de Padrões • Otimização • Predições Situações que necessitam de Análise Numérica como:
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. 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. 11. 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. 12. 12 CLN – Class Library for Numbers 12
  13. 13. 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
  14. 14. 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
  15. 15. 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.
  16. 16. 16 GiNaC – Funções e Símbolos 16
  17. 17. 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; }
  18. 18. 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 }
  19. 19. 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 Group 19
  20. 20. 20 JCM – Representação de Funções 20
  21. 21. 21 JCM – Solucionadores 21
  22. 22. 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
  23. 23. 23 JCM – 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
  24. 24. 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
  25. 25. 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());
  26. 26. 26 POO para Computação Científica JScience
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. 30 JScience - Estruturas 30
  31. 31. 31 JScience - Funções 31
  32. 32. 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
  33. 33. 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
  34. 34. 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)
  35. 35. 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
  36. 36. 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
  37. 37. 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
  38. 38. 38 Perguntas ? E por fim….

×