1 / 38

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

javan
Download Presentation

POO para Computação Científica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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. 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. O que é Computação Científica? 3

  4. Motivaçã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

  5. Simulação computacional Reconhecimento de Padrões Otimização Predições Aplicações Situações que necessitam de Análise Numérica como:

  6. Modelagem Financeira Sistemas de Informações Geográficos Química Computacional Bio-Computação Física Matemática Mecânica Computacional várias outras Áreas que Utilizam Computação Científica 6

  7. 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 OO e a Computação Científica 7

  8. CAS – Computer Algebra System (Mapple, Mathematica, Derive, etc) Biblioteca de Funções e Classes (CLN, GiNaC, JCalculus, JScience, Jakarta Commons Math) Desenvolvimento proprietário Ferramentas & Bibliotecas • O que há disponível para Computação • Científica? 8

  9. 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 Características de Bibliotecas 9

  10. 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. Bibliotecas 10

  11. 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 CLN – Class Library for Numbers 11

  12. CLN – Class Library for Numbers 12

  13. 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); CLN – Class Library for Numbers 13

  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. 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. GiNaC – Funções e Símbolos 16

  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. 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. 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 Jakarta Commons Math (JCM) 19

  20. JCM – Representação de Funções 20

  21. JCM – Solucionadores 21

  22. 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"); JCM – Exemplo Matrizes 22

  23. 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); } JCM – Exemplo Raízes 23

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

  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. POO para Computação Científica JScience

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

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

  30. JScience - Estruturas 30

  31. JScience - Funções 31

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

  33. 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());

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

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

  36. Conclusã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.

  37. 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 Referências

  38. E por fim…. Perguntas ?

More Related