Pergunta

Eu estou codificação um applet interativa com Piccolo e eu preciso incluir um Gaussian curva (aka normal gráfico de distribuição ) no seu interior.

Eu imagino qualquer tipo de implementação Java seria suficiente, mas não consigo encontrar nenhum. Idealmente, eu gostaria de passar um conjunto de valores e ter o gráfico desenhado em um painel, um objeto de imagem ou qualquer coisa que pode ser incorporado em um applet.

Antes de começar minhas mãos sujas de codificação-lo eu mesmo, alguém sabe de uma peça de trabalho de código para fazê-lo?

Implementações em outros idiomas são bem-vindas, desde que eles são facilmente portátil para Java.

Foi útil?

Solução

Não sei se ele funciona, mas o Google vomitou este código para traçar uma distribuição de Gauss .

A página inicial para este projecto é aqui .

Se Piccolo não executar a plotagem para você, eu talvez usar JFreeChart para o plotagem real, uma vez que é amplamente apoiado e muito capaz. (Eu não estou familiarizado com Piccolo)

Outras dicas

Edit: Parece que o biblioteca Apache Commons matemática tem uma seção de estatísticas. Especificamente, um pacote inteiro em comum Distribuições . Esperemos que há um pouco de matemática pessoas lá fora porque eu não me lembro estatísticas básicas ... aqui está a minha tentativa de usar a sua biblioteca. Eu só tenho uma janela deslizante aqui e calcular o P entre esses valores. O que é a verdadeira maneira de obter um PDF com isso? Eles só têm uma função CDF.

public void testNormalDist() throws MathException {
    DistributionFactory f = DistributionFactory.newInstance();
    NormalDistribution n = f.createNormalDistribution(0.0d, 1.0d);
    double lastx = Double.NEGATIVE_INFINITY;
    double nextx = Double.NEGATIVE_INFINITY;
    for (int i=-100; i < 100; i++) {
        nextx = i / 100d;
        System.out.println(n.cumulativeProbability(lastx, nextx));
        lastx = nextx;
    }
}

Eu suponho que você quer que a função densidade de probabilidade para o gráfico. Os equações estão em wikipedia , desde que eu não sei como incluir marcação matemática aqui. Basta usar p (x) como seu valor de Y e X como seu valor X e você pode obter um gráfico muito fácil 2-d do que isso.

Você já olhou para Mathtools sob Java ?

Ok, como sobre isso ... você dar-lhe uma matriz de pontos X (normalizados, é claro, você pode converter seus X pixels a estes dividindo cada posição de pixel pela largura da sua imagem), e ele irá retornar as alturas da curva de distribuição (novamente, multiplique por seu fator de normalização). Este é o caso para a base onde significativo é 0 e o desvio padrão é 1.

public double[] normalDistBasic(double[] xarray, double mu) {
    double[] yarray = new double[xarray.length];
    double rad2pi = 2.50662827d;
    for (int off = 0; off < yarray.length; off++) {
        double x = xarray[off];
        double ss = -1d * x * x / 2d;
        yarray[off] = (-1f / rad2pi) * Math.exp(ss);
    }
    return yarray;
}

Deve ser muito fácil de implementar um que leva média e desvio padrão arbitrário se um não pode ser encontrado na rede.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top