Cet article décrit la méthode de mise en œuvre de Java pour résoudre un seul polynôme à n degré. Partagez-le pour votre référence, comme suit:
Le projet doit faire des prédictions de tendance, en utilisant des algorithmes tels que le raccord linéaire, un ajustement de courbe à 2 commandes et un ajustement exponentiel. Divers algorithmes d'ajustement linéaire sont écrits en matrices sous cette forme:
Lorsque X est la valeur d'échantillonnage des coordonnées horizontales, y est la valeur d'échantillonnage des coordonnées verticales, i est le nombre de séquence du point d'échantillonnage, a est le coefficient, n est le nombre de points d'échantillonnage, et n est l'ordre, donc l'ajustement linéaire se transforme enfin en un problème de résolution du système d'équations de commande supérieure.
Je ne sais pas s'il existe un package de fonctionnement de matrice Java facile à utiliser. Je ne suis pas doué pour collecter ce type d'informations, j'ai donc dû ramasser l'algèbre linéaire que j'avais déposée pendant de nombreuses années et j'ai moi-même écrit un programme Java pour utiliser l'algorithme de la matrice augmentée pour résoudre des équations d'ordre supérieur. Collez simplement le code:
Package CommonAralgorithm; public class polynomialSoluter {private double [] [] matrice; Résultat du double privé; Ordre privé INT; public PolynomialSoluter () {} // Vérifiez la longueur d'entrée et générez la matrice augmentée private booléenne init (double [] [] matrixa, double [] arrayb) {order = arrayb.length; if (matrixa.length! = ordonnance) return false; matrix = new double [ordre] [ordre + 1]; for (int i = 0; i <order; i ++) {if (matrixa [i] .length! = order) return false; pour (int j = 0; j <ordonnance; j ++) {matrix [i] [j] = matrixa [i] [j]; } matrix [i] [ordre] = arrayB [i]; } résultat = nouveau double [ordre]; Retour Vrai; } public double [] getResult (double [] [] matrixa, double [] arrayb) {if (! init (matrixa, arrayb)) renvoie null; // Gaussien Elimination-for (int i = 0; i <ordre; i ++) {// Si le terme diagonal de la ligne actuelle est 0, il sera échangé avec la ligne avec la même colonne des lignes suivantes qui ne sont pas 0 si (! SwitHifzero (i)) retourner null; // Élimination pour (int j = i + 1; j <ordre; j ++) {if (matrice [j] [i] == 0) continue; double facteur = matrice [j] [i] / matrice [i] [i]; pour (int l = i; l <order + 1; l ++) matrice [j] [l] = matrice [j] [l] - matrice [i] [l] * facteur; }} // Gaussien Elimination-Reverse-Remote-Remote Calculs redondants pour (int i = ordre - 1; i> = 0; i--) {Result [i] = matrice [i] [Ordre] / Matrix [i] [i]; pour (int j = i - 1; j> -1; j--) matrice [j] [ordre] = matrice [j] [ordre] - result [i] * matrice [j] [i]; } Retour Résultat; } privé boolean swethifzero (int i) {if (matrix [i] [i] == 0) {int j = i + 1; // Trouvez la colonne qui n'est pas nulle à la position correspondante tandis que (j <order && matrice [j] [i] == 0) j ++; // Si toutes les positions correspondantes sont 0, il n'y a pas de solution si (j == ordre) renvoie false; else Switchrows (i, j); } return true; } private void switchrows (int i, int j) {double [] tmp = matrix [i]; matrice [i] = matrice [j]; matrice [j] = tmp; }}Bienvenue pour communiquer s'il existe un meilleur algorithme ou un ensemble de fonctionnement matriciel approprié.
PS: Voici quelques outils de calcul à référence à:
Outil de calcul de la solution de fonction unary en ligne (EQ):
http://tools.vevb.com/jisuanqi/equ_jisuanqi
Calculatrice scientifique en ligne use_advanced calculator calculateur en ligne:
http://tools.vevb.com/jisuanqi/jsqkeexue
Calculatrice en ligne_standard Calculatrice:
http://tools.vevb.com/jisuanqi/jsq
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et tutoriel d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.