Alguém conhece alguma API Matemática que possa trabalhar com matriz inversa?
http://java.sun.com/products/java-media/3D/forDevelopers/J3D_1_3_API/j3dguide/AppendixMath.html
No final da pagina tem o que voce procura. 8)
Eu espero :oops:
VELO
Tem a jakarta commons.math também
Como faço para baixar esta biblioteca que contém a matriz inversa
Cara, essa biblioteca aqui é MUITO boa e bemmm simples de usar, gosto muito dela. Dá uma olhada na documetação, é possível fazer muita coisa relacionada com matrizes e álgebra linear.
Pessoal ,
Sei que o tópico é antigo e tal, mas ele tá falando exatamente do que eu preciso…
Preciso fazer um programa Java, tô usando o Jama para processar as matrizes, mas elas são muito grandes e certa hora o JAva relcma que a heap estoura. Heap out of memory.
Tentei os comandos java -Xms1024m -Xmx1024m MinhaClasse
Mas mesmo assim não consegui (isso deixa a JVM com 1GB de memoria, correto?). Como posso resolver esse problema? Mesmo tendo mais memória RAM no computador, não posso setar mais para a JVM?
Em sistemas operacionais de 32 bits como o Windows ou o Linux, é possível usar um heap de no máximo 1.3 GB se não me engano. (O Solaris de 32 bits aceita um pouco mais).
Você precisa rodar seu programa em um sistema operacional de 64 bits e usar uma JVM de 64 bits para poder usar toda a memória disponível de sua máquina (obviamente se ela for de 64 bits também).
Outra maneira é você escolher um algoritmo que não necessite deixar a matriz inteira na memória. Veja se não é esse o caso.
Já tentou analisar a execução do programa com um profiler? Pode te ajudar a descobrir onde está o gargalo.
Só por curiosidade, o quão grandes são suas matrizes e qual é o processamento que está fazendo?
É mais ou menos isso, cada VM tem uma limitação. Mas gira em torno desse valor.
Eu já tinha visto que as arquiteturas de 64 bits disponibilizavam mais memoria. Só não sei o porque disso. Claro, pode endereçar mais, porque os numeros que a arquitetura escreve sao maiores, mas porque nao disponibiliza mais que 1Gb (nao é 1Gb ao certo, mas e perto disso)?
O que eu estou rodando é um algoritmo novo de inteligencia artificial que usa matrizes pra montar sua rede neural. as matrizes sao tao grandes quanto a quantidades de atributos e exemplos da base de dados. Como minha base tem mais de 20 mil exemplos e 42 atributos, fica uma matriz 20 mil X 42.
E essa é apenas uma das matrizes que ele usa.
[quote=gpmdf2]Eu já tinha visto que as arquiteturas de 64 bits disponibilizavam mais memoria. Só não sei o porque disso. Claro, pode endereçar mais, porque os numeros que a arquitetura escreve sao maiores, mas porque nao disponibiliza mais que 1Gb (nao é 1Gb ao certo, mas e perto disso)?
O que eu estou rodando é um algoritmo novo de inteligencia artificial que usa matrizes pra montar sua rede neural. as matrizes sao tao grandes quanto a quantidades de atributos e exemplos da base de dados. Como minha base tem mais de 20 mil exemplos e 42 atributos, fica uma matriz 20 mil X 42.
E essa é apenas uma das matrizes que ele usa. [/quote]
A JVM da Sun precisa deixar sua heap em um segmento contíguo da memória.
Nesses dois sistemas operacionais de 32 bits, devido a particularidades no endereçamento de device drivers e outras coisas, não é possível você criar um segmento contíguo de memória maior que esse valor citado (menos de 2GB).
A JVM da Sun não consegue trabalhar com a heap em segmentos não-contíguos. É uma limitação, não sei se a JVM da IBM ou a JVM da Oracle/BEA (JRockit) têm também a mesma limitação. Isso é uma particularidade dos algoritmos de garbage collection usados por essas JVMs.