Verwenden Sie JFreechArt, um reibungslose Kurven zu zeichnen und sie mit dem mathematischen Prinzip der Methode der kleinsten Quadrate für Ihre Referenz zu berechnen. Der spezifische Inhalt ist wie folgt
Zeichnen Sie die Grafik:
Code:
Fittcurve.java
Paket org.jevy; Import Java.util.ArrayList; importieren 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.xylplot; 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.Refineryutilities; public class fittingCurve erweitert applicationFrame {list <double> equation = null; // Die Anzahl der Polynome int Times = 2 festlegen; public fittCurve (String -Titel) {Super (Titel); // Verwenden Sie die Methode mit der kleinsten Quadrate, um die Koeffizienten vor jedem Term im angepassten Polynom zu berechnen. /* Bitte beachten Sie: Die Berechnung der Polynomkurvenparameter wird getrennt von der Diagrammerzeugung verarbeitet. Berechnung der Polynomkurvenparameter: Verantwortlich für die Berechnung der Polynomkoeffizienten und zur Rückgabe der Polynomkoeffizientenliste. Diagrammdiagrammgenerierung: Nur für das Zeichnen gemäß den angegebenen Daten verantwortlich. Verbinden Sie beispielsweise einen bestimmten Punkt. In diesem Beispiel wird die glatte Kurve mit einer sehr dichten Punktlinie gezeichnet. Da wir die Koeffizienten des Polynoms berechnet haben, haben wir die X-Achsen-Daten in sehr kleinen Schritten wachsen lassen, und für jeden X-Wert verwendeten wir das Polynom, um den y-Wert zu berechnen, wodurch eine Anzahl von (x, y) -Gruppen von Punkten erhält. Zeichnen Sie die aus diesen (x, y) bestehenden Punktlinien und zeigen Sie eine glatte Kurve. XySeries ist ein JFreechart -Diagramm -Datensatz, mit dem eine Reihe verwandter Daten gezeichnet werden. Xyserien entspricht dem X- und Y -Achsen -Datensatz. Die Daten werden wie folgt hinzugefügt: xyseries S.Add (x, y); XyserieScollection ist eine Sammlung von Xyserien. Wenn mehrere Kurven in einem Diagramm gezogen werden müssen, müssen die Xyserien, die mehreren Kurven entsprechen, zu XyserieCollection -Methode hinzugefügt werden: Datensatz.Addsseries (S1). DataSet.AddSeries (S2); */// Die Anzahl der Polynome ist von hoch nach niedrig. Die von dieser Funktion erforderlichen Parameter sind: x-Achsendaten <List>, y-achsedaten <List> und die Anzahl der Polynome <2> this.equation = this.getCurveequation (this.getData (). Get (0), this.getData (). Get (1), this.times); // Chart jfreechart chart = this.getChart () generieren; ChartPanel chartPanel = new ChartPanel (Diagramm); ChartPanel.SetPreferredSize (New Java.awt.Dimension (500, 270)); ChartPanel.SetMousezoodable (true, false); setContentPane (chartPanel); } public static void main (String [] args) {// Todo automatisch generierter Methode Stub-Fitcurve Demo = new FITTCURVE ("xyfittingCurve"); Demo.pack (); RefineryUtilities.CenterFrameOnscreen (Demo); Demo.setvisible (wahr); } // Chart public jfreechart getChart () {// GET XYDATASET XYDATASET = this.getXyDataset (); // Zeilendiagramm erstellen, die durch Koordinaten Jfreechart xychart = Chartfactory.Createxylinechart ("Quadratische Polynomanpassung glatte Kurve", "X -Achse", "Y -Achse", xydataset, Plotorientierung.vertisch, wahr, wahr, wahr, falsch); // Erzeugen Sie die Form des Koordinatenpunkts XYPLOT -Diagramm = (xyPlot) xychart.getPlot (); Xyitemrenderer r = plot.getRenderer (); if (r Instanz von XyLineandshaperenderer) {xyLineandshaperenderer renderer = (xyLineandshaperenderer) r; Renderer.SetBaseShapesvisible (falsch); // ist die Form des Koordinatenpunkts sichtbarer Renderer.SetBaseShapesFiln (Falsch); } ValuAxis yaxis = plot.getRangeAXIS (); yaxis.setlowermargin (2); Return xychart; } // Der Datensatz wird dem entsprechenden Satz gemäß der logischen Beziehung public xyDataset getXyDataset () {// Der voreingestellte Datenpunkt-Datensatz Xyseries S2 = New Xyseries ("Double-Dot-Zeile") hinzugefügt. für (int i = 0; i <data.get (0) .size (); i ++) {s2.add (data.get (0) .get (i), data.get (1) .get (i)); } // Der Datensatz wird durch Anpassung der Kurve xyseries s1 = neue xyserie ("Anpassungskurve") gezeichnet; // Fit -Polynomkoeffizienten erhalten, die Gleichung wurde in der Baumethodeliste <double> list = this.equation instanziiert; // Voreingestellte Punktdatenliste abrufen <Liste <double >> data = this.getData (); // max und min von x; Liste <Double> xList = data.get (0); double max = this.getMax (xlist); double min = this.getmin (xlist); doppelter Schritt = max - min; double x = min; doppelte Schritt 2 = Schritt/800,0; // das Polynom in Form eines Polynoms wiederherstellen und das Polynom verwenden, um den Wert von y zu berechnen, wenn x für (int i = 0; i <800; i ++) {x = x+Schritt 2; int num = list.size ()-1; Doppeltemperatur = 0,0; für (int j = 0; j <list.size (); j ++) {temp = temp+math.pow (x, (num-j))*list.get (j); } s1.add (x, temp); } // Fügen Sie den voreingestellten Datensatz hinzu, um den Datensatz in XySerieCollection XySerieCollection DataSet = new XySerieScollection () anzupassen. DataSet.AddSeries (S1); DataSet.AddSeries (S2); Datensatz zurückgeben; } // Simulieren Sie die Plot-Daten (Punkte) öffentliche Liste <Liste <double >> getData () {// x ist die X-Achsen-Koordinatenliste <double> x = new ArrayList <double> (); Liste <Double> y = new ArrayList <Double> (); für (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); Liste <list <double >> list = new ArrayList <list <double >> (); list.add (x); list.add (y); Rückgabeliste; } // Der folgende Code berechnet die Polynomkoeffizienten für die Methode der kleinsten Quadrate // Die polynomiale Liste der kleinsten Quadrate (double> getCurveequation (list <double> x, list <double> y, int m) {if (x.size ()! } List <double> result = new ArrayList <Double> (); LIST <Double> S = New ArrayList <Double> (); Liste <Double> T = New ArrayList <Double> (); // Berechnen Sie S0 S1 ... S2M für (int i = 0; i <= 2*m; i ++) {double si = 0,0; für (double xx: x) {si = si + math.pow (xx, i); } S.Add (SI); } // T0 T1… tm für (int j = 0; j <= m; j ++) {double ti = 0,0; für (int k = 0; k <y.size (); k ++) {ti = ti+y.get (k)*math.pow (x.get (k), j); } T.add (ti); } // S und T in ein zweidimensionales Array als Matrix double [] [] matrix = new Double [M+1] [M+2]; für (int k = 0; k <m+1; k ++) {double [] matrix = matrix [k]; für (int q = 0; q <m+1; q ++) {matrixi [q] = S.get (k+q); } matrixi [m+1] = t.get (k); } für (int p = 0; p <matrix.length; p ++) {for (int pp = 0; pp <matrix [p] .Length; } System.out.println (); } // Die Matrix in eine dreieckige Matrix matrix = this.matrixConvert (Matrix) konvertieren; // Berechnen Sie die Polynomkoeffizienten, und die Polynome sind von hohem bis niedrigem Ergebnis = this.matrixcalcu (Matrix) angeordnet; Rückgabeergebnis; } // Die Matrix in eine dreieckige Matrix public double [] [] matrixConvert (double [] [] d) {für (int i = 0; i <d.length-1; i ++) {double [] dd1 = d [i] konvertieren; double num1 = dd1 [i]; für (int j = i; j <d.length-1; j ++) {double [] dd2 = d [j+1]; double num2 = dd2 [i]; für (int k = 0; k <dd2.Length; k ++) {dd2 [k] = (dd2 [k]*num1 - dd1 [k]*num2); }}} für (int ii = 0; ii <d.length; ii ++) {für (int kk = 0; kk <d [ii] .Length; kk ++) system.out.print (d [ii] [kk]+"); System.out.println (); } return d; } // Berechnen Sie die Koeffizienten vor einer univariaten Multi-Ordnung-Gleichung, die als XM XM-1 angeordnet ist. int j = d [0] .Length -1; Liste <Double> list = new ArrayList <Double> (); double res = d [i] [j]/d [i] [j-1]; list.add (res); für (int k = i-1; k> = 0; k-) {double num = d [k] [j]; für (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); } Rückgabeliste; } // den maximalen und minimalen Wert von Doppeldaten in der Liste öffentlich double getmax (list <double> data) {double res = data.get (0) abrufen; für (int i = 0; i <data.size ()-1; i ++) {if (res <data.get (i+1)) {res = data.get (i+1); }} return res; } public double getMin (Liste <Double> data) {double res = data.get (0); für (int i = 0; i <data.size ()-1; i ++) {if (res> data.get (i+1)) {res = data.get (i+1); }} return res; }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.