Este artigo descreve o método de implementação do Java para resolver um único polinômio em N de N. Compartilhe -o para sua referência, como segue:
O projeto precisa fazer previsões de tendências, usando algoritmos como encaixe linear, ajuste de curva de duas ordem e ajuste exponencial. Vários algoritmos de ajuste linear são escritos em matrizes nesta forma:
Onde x é o valor de amostragem de coordenadas horizontais, y é o valor de amostragem de coordenadas verticais, i é o número de sequência do ponto de amostragem, a é o coeficiente, n é o número dos pontos de amostragem e n é a ordem, portanto, o ajuste linear finalmente se transforma em um problema de resolver o sistema de equações de ordem superior.
Não sei se existe algum pacote de operação de matriz Java fácil de usar. Não sou bom em coletar esse tipo de informação, então tive que pegar a álgebra linear que abaixei por muitos anos e escrevi um programa Java para usar o algoritmo da matriz aumentada para resolver equações de ordem superior. Basta colar o código:
Pacote comum do CommonalGorithm; classe pública polinomialsoluter {private duplo [] [] matriz; Resultado duplo privado []; Private Int Order; public polynomialSoluter () {} // Verifique o comprimento da entrada e gerar a matriz aumentada Private Boolean init (Double [] [] matrixe, Double [] Arrayb) {Order = Arrayb.length; if (matrixe.length! = order) retorna false; matriz = novo duplo [ordem] [ordem + 1]; for (int i = 0; i <ordem; i ++) {if (matrixe [i] .Length! = order) retornar false; for (int j = 0; j <ordem; j ++) {matrix [i] [j] = matrixe [i] [j]; } matriz [i] [ordem] = Arrayb [i]; } resultado = novo duplo [ordem]; retornar true; } public Double [] getResult (Double [] [] Matrixe, Double [] Arrayb) {if (! Init (Matrixa, Arrayb)) retorna NULL; // eliminação gaussiana para (int i = 0; i <ordem; i ++) {// Se o termo diagonal da linha atual for 0, ele será trocado com a linha com a mesma coluna das seguintes linhas que não são 0 se (! SwithifZero (i)) retornará Null; // eliminação para (int j = i+1; j <ordem; j ++) {if (matriz [j] [i] == 0) continue; fator duplo = matriz [j] [i] / matriz [i] [i]; for (int l = i; l <ordem+1; l ++) matriz [j] [l] = matriz [j] [l] - matriz [i] [l] * fator; }} // eliminação gaussiana-reversa-remote-remote Remote Cálculos redundantes para (int i = ordem-1; i> = 0; i-) {resultado [i] = matrix [i] [ordem] / matrix [i] [i]; for (int j = i -1; j> -1; j--) matriz [j] [ordem] = matriz [j] [ordem] -resultado [i] * matriz [j] [i]; } resultado de retorno; } private booleano swethifZero (int i) {if (matrix [i] [i] == 0) {int j = i + 1; // Encontre a coluna que não é zero na posição correspondente enquanto (j <order && matrix [j] [i] == 0) j ++; // Se todas as posições correspondentes forem 0, não houver solução se (j == order) retornar false; else switchrows (i, j); } retornar true; } private void switchRows (int i, int j) {duplo [] tmp = matriz [i]; matriz [i] = matriz [j]; matriz [j] = tmp; }}Bem -vindo ao comunicar se houver um algoritmo melhor ou um pacote de operação de matriz adequado.
PS: Aqui estão algumas ferramentas de cálculo para você se referir a:
Ferramenta de cálculo da solução de função on -line (eq):
http://tools.vevb.com/jisuanqi/equ_jisuanqi
Calculadora científica online use_advanced calculadora online calculadora:
http://tools.vevb.com/jisuanqi/jsqkeexue
Calculadora Online_Standard Calculadora:
http://tools.vevb.com/jisuanqi/jsq
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.