Utilisez JFreechart pour dessiner des courbes lisses et calculez-les en utilisant le principe mathématique des moindres carrés pour votre référence. Le contenu spécifique est le suivant
Dessinez les graphiques:
Code:
Fittingcurve.java
Package Org.Jevy; import java.util.arraylist; Importer java.util.list; import org.jfree.chart.chartfactory; import org.jfree.chart.chartpanel; import org.jfree.chart.jfreechart; import org.jfree.chart.axis.valueaxis; import org.jfree.chart.plot.plotorientation; import org.jfree.chart.plot.xyplot; import org.jfree.chart.renderer.xy.xyitemRenderer; import org.jfree.chart.renderer.xy.xylineAndShapeRenderer; import org.jfree.data.xy.xydataset; import org.jfree.data.xy.xyseries; import org.jfree.data.xy.xyseriesCollection; import org.jfree.ui.applicationframe; import org.jfree.ui.refineryutiability; La classe publique ajusté Curve étend ApplicationFrame {list <pouble> equation = null; // Définit le nombre de polynômes int times = 2; Public FittingCurve (String Title) {super (title); // Utilisez la méthode des moindres carrés pour calculer les coefficients avant chaque terme du polynôme ajusté. / * Veuillez noter: le calcul du paramètre de la courbe polynomiale est traité séparément de la génération du graphique du graphique. Calcul des paramètres de la courbe polynomiale: responsable du calcul des coefficients polynomiaux et du retour de la liste des coefficients polynomiaux. Génération du graphique des graphiques: uniquement responsable du dessin en fonction des données données. Par exemple, connectez un point donné. Dans cet exemple, la courbe lisse est dessinée avec une ligne ponctuelle très dense. Étant donné que nous avons calculé les coefficients du polynôme, nous avons fait croître les données de l'axe x en très petites étapes, et pour chaque valeur X, nous avons utilisé le polynôme pour calculer la valeur y, obtenant ainsi un certain nombre de groupes (x, y) de points. Dessinez les lignes de points composées de celles-ci (x, y) et montrez une courbe lisse. XySeries est un ensemble de données de tracé JFreechart, utilisé pour dessiner un ensemble de données connexes. XySeries correspond à l'ensemble de données de l'axe x et y. Les données sont ajoutées comme suit: xyseries s.add (x, y); XySeriesCollection est une collection de xyseries. Lorsque plusieurs courbes doivent être dessinées sur un graphique, les xySeries correspondant à plusieurs courbes doivent être ajoutées à la méthode ADD XySeriesCollection: DataSet.AddSeries (S1); DataSet.AddSeries (S2); * / // Le nombre de polynômes est de haut à bas. Les paramètres requis par cette fonction sont: les données de l'axe X <Sist>, les données de l'axe des y <s list>, et le nombre de polynômes <2> this.equation = this.getCurveEquation (this.getData (). Get (0), this.getData (). Get (1), this.time); // Générer le graphique jfreechart graphique = this.getChart (); ChartPanel ChartPanel = new ChartPanel (graphique); ChartPanel.SetPreferRedSize (new Java.awt.dimension (500, 270)); chartPanel.setMouseZoomable (true, false); setContentPane (ChartPanel); } public static void main (String [] args) {// TODO Méthode générée automatique Stub FittingCurve Demo = new FittingCurve ("xyFittingCurve"); Demo.pack (); Raffineryutiability.CenterFrameOnScreen (démo); Demo.SetVisible (true); } // Générer le graphique public jfreechart getChart () {// Obtenez xydataset xydataset = this.getxydataset (); // Créer un graphique de ligne représenté par les coordonnées jfreechart xychart = chartfactory.CreatexylineChart ("quadratique ajustement lisse de l'ajustement", "x axe", "y axis", xydataset, tracéent.vertical, true, vrai, false); // Générez la forme du point de coordonnée xyplot tracé = (xyplot) xychart.getplot (); XyItemRenderer r = tracé.getRenderer (); if (r instanceof xylineAndShapeRender) {xylineAnDshapeRenderer renderer = (xylineAndShapeRender) r; renderer.setBaseshapesVisible (false); // est la forme du point de coordonnée visible rendu. } ValuaExis yaxis = tracé.getRangeAxis (); yaxis.setLowerMargin (2); retour xychart; } // L'ensemble de données est ajouté à l'ensemble correspondant en fonction de la relation logique publique xydataset getXyDataSet () {// Le jeu de données de points de données préréglé xySeries s2 = new xySeries ("Double-Dot Line"); for (int i = 0; i <data.get (0) .size (); i ++) {s2.add (data.get (0) .get (i), data.get (1) .get (i)); } // L'ensemble de données est dessiné en montrant la courbe xySeries s1 = new XySeries ("Courbe d'ajustement"); // Obtenir des coefficients polynomiaux ajustés, l'équation a été instanciée dans la liste des méthodes de construction <Double> list = this.equation; // Obtenez la liste des données du point prédéfini <list <double>> data = this.getData (); // Obtenez max et min de x; List <pouble> xlist = data.get (0); double max = this.getMax (xlist); double min = this.getMin (xList); double étape = max - min; double x = min; double étape2 = étape / 800,0; // Restaurez le polynôme sous la forme d'un polynôme et utilisez le polynôme pour calculer la valeur de y lorsqu'il est donné x pour (int i = 0; i <800; i ++) {x = x + étape2; int num = list.size () - 1; double temp = 0,0; pour (int j = 0; j <list.size (); j ++) {temp = temp + math.pow (x, (num-j)) * list.get (j); } s1.add (x, temp); } // Ajouter l'ensemble de données préréglé pour ajuster l'ensemble de données sur xySeriesCollection XySeriesCollection DataSet = new XySeriesCollection (); DataSet.AddSeries (S1); DataSet.AddSeries (S2); Renter un ensemble de données; } // Simuler les données de tracé (points) Liste publique <list <double>> getData () {// x est la liste des coordonnées x-axes <Deuble> x = new ArrayList <Double> (); List <pouble> y = new ArrayList <back> (); pour (int i = 0; i <10; i ++) {x.add (-5.0 + i); } y.add (26.0); Y.Add (17.1); Y.Add (10.01); Y.Add (5.0); Y.Add (2.01); Y.Add (1.0); Y.Add (2.0); Y.Add (5.01); Y.Add (10.1); Y.Add (17.001); List <list <double >> list = new ArrayList <list <double >> (); list.add (x); list.add (y); Liste de retour; } // Le code suivant calcule les coefficients polynomiaux pour la méthode des moindres carrés // la méthode des moindres carrés de la liste publique d'ajustement polynomial <Double> getCurveequation (list <pouble> x, list <pouble> y, int m) {if (x.Size ()! = Y.size () || x.Size () <= m + 1) {return nouvel avide } List <pouble> result = new ArrayList <Double> (); List <pouble> s = new ArrayList <back> (); List <pouble> t = new ArrayList <back> (); // calculer s0 s1 ... s2m pour (int i = 0; i <= 2 * m; i ++) {double si = 0,0; pour (double xx: x) {si = si + math.pow (xx, i); } S.add (si); } // Calculer t0 t1… tm pour (int j = 0; j <= m; j ++) {double ti = 0,0; pour (int k = 0; k <y.size (); k ++) {ti = ti + y.get (k) * math.pow (x.get (k), j); } T.add (ti); } // met S et T dans un tableau bidimensionnel en tant que double matrice [] [] matrice = nouveau double [m + 1] [m + 2]; pour (int k = 0; k <m + 1; k ++) {double [] matrice = matrice [k]; pour (int q = 0; q <m + 1; q ++) {matrixi [q] = s.get (k + q); } matrixi [m + 1] = t.get (k); } pour (int p = 0; p <matrix.length; p ++) {for (int pp = 0; pp <matrix [p] .length; pp ++) {system.out.print ("matrix [" + p + "] [" + pp + "] =" + matrix [p] [pp]); } System.out.println (); } // Convertir la matrice en matrice matricielle triangulaire = this.matrixConvert (matrice); // Calculez les coefficients polynomiaux, et les polynômes sont disposés de haut à faible résultat = this.matrixcalcu (matrice); Résultat de retour; } // Convertir la matrice en une matrice triangulaire publique double [] [] matrixConvert (double [] [] d) {for (int i = 0; i <d.length-1; i ++) {double [] dd1 = d [i]; double num1 = dd1 [i]; pour (int j = i; j <d.length-1; j ++) {double [] dd2 = d [j + 1]; double num2 = dd2 [i]; pour (int k = 0; k <dd2.length; k ++) {dd2 [k] = (dd2 [k] * num1 - dd1 [k] * num2); }}} pour (int ii = 0; ii <d.length; ii ++) {for (int kk = 0; kk <d [ii] .length; kk ++) System.out.print (d [ii] [kk] + ""); System.out.println (); } return d; } // Calculez les coefficients avant une équation multi-ordre univariée, qui sont organisées comme XM XM-1… X0 (les ordres polynomiaux sont disposés de la liste publique haute à basse) <Double> MatrixcalCU (double [] [] D) {int i = d.lengle -1; int j = d [0] .length -1; List <double> list = new ArrayList <Double> (); double res = d [i] [j] / d [i] [j-1]; list.add (res); pour (int k = i-1; k> = 0; k -) {double num = d [k] [j]; pour (int q = j-1; q> k; q -) {num = num - d [k] [q] * list.get (j-1-q); } res = num / d [k] [k]; list.add (res); } Retour List; } // Obtenez la valeur maximale et minimale des données doubles dans la liste publique double getMax (list <double> data) {double res = data.get (0); for (int i = 0; i <data.size () - 1; i ++) {if (res <data.get (i + 1)) {res = data.get (i + 1); }} return res; } public double getmin (list <pouble> data) {double res = data.get (0); for (int i = 0; i <data.size () - 1; i ++) {if (res> data.get (i + 1)) {res = data.get (i + 1); }} return res; }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.