6、基于highcharts实现的线性拟合,计算部分在java中实现,画的是正态概率图
1、坐标点类
package cn.test.domain;public class Point {double x;double y;public Point(){}public Point(double x, double y) {super();this.x = x;this.y = y;}public double getX() {return x;}public void setX(double x) {this.x = x;}public double getY() {return y;}public void setY(double y) {this.y = y;} }
2、拟合类,带计算部分
package cn.test.normcdf;import java.io.IOException; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray; import net.sf.json.JSONObject;import org.apache.commons.math3.distribution.NormalDistribution;import cn.test.domain.Point;public class TestNormCdf extends HttpServlet {private ArrayListcyis = null;private ArrayList axis = null;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {axis = new ArrayList ();cyis = new ArrayList ();// 初始化横坐标值axis = initial(axis);/* axis = stand(axis); */// 计算纵坐标值//NormalDistribution normal = new NormalDistribution();// 先排序 Collections.sort(axis);int n = axis.size(); /* for (int i = 0; i < axis.size(); i++) {cyis.add(normal.inverseCumulativeProbability((i + 1 - 0.5) / n));}*/for (int i = 0; i < axis.size(); i++) {cyis.add((i + 1 - 0.5) / n);}double sumX = getSum(axis); double sumY = getSum(cyis); double sumP2X = getPowSum(axis);double sumXY = getSumXY(axis, cyis); double a =(sumXY - (1 / axis.size()) * sumX * sumY) / (sumP2X - (1 /axis.size()) * sumX * sumX);double b = (1 / axis.size()) * (sumY - a*sumX);double pointx1 = axis.get(0);double pointx2 = axis.get(n - 1);double pointy1 = b+a * pointx1;double pointy2 = b+a * pointx2;//cyis = stand2(cyis);/*double x1 = axis.get((int) (n * 0.75));double x2 = axis.get((int) (n * 0.25));double y1 = cyis.get((int) (n * 0.75));double y2 = cyis.get((int) (n * 0.25));double dx = x1 - x2;double dy = y1 - y2;double a = dy / dx;double pointx1 = axis.get(0);double pointx2 = axis.get(n - 1);double centreX = 0.5 * (x1 + x2);double centreY = 0.5 * (y1 + y2);double pointy1 = centreY - a * (centreX - pointx1);double pointy2 = centreY + a * (pointx2 - centreX);*/Double[][] array = new Double[axis.size() + 2][2];NumberFormat ddf1 = NumberFormat.getNumberInstance();ddf1.setMaximumFractionDigits(4);for (int i = 0; i < axis.size(); i++) {array[i][0] = Double.valueOf(ddf1.format(axis.get(i)));array[i][1] = Double.valueOf(ddf1.format(cyis.get(i)));}array[axis.size()][0] = Double.valueOf(ddf1.format(pointx1));array[axis.size()][1] = Double.valueOf(ddf1.format(pointy1));array[axis.size() + 1][0] = Double.valueOf(ddf1.format(pointx2));array[axis.size() + 1][1] = Double.valueOf(ddf1.format(pointy2));response.getWriter().write(JSONArray.fromObject(array).toString());}public ArrayList stand2(ArrayList cyis) {int n = cyis.size();NormalDistribution normal = new NormalDistribution();for (int i = 0; i < cyis.size(); i++) {cyis.set(i, normal.cumulativeProbability(cyis.get(i)));}return cyis;}/** public ArrayList stand(ArrayList */public double getSum(ArrayListlist) { double average =* getAverage(list); double std = getStdVariance(list); for (int i = 0; i <* list.size(); i++) { list.set(i, (list.get(i) - average) / std); } return* list; }* * public double getStdVariance(ArrayList list) { double std = 0.0;* double average = getAverage(list); for (int i = 0; i < list.size(); i++)* { std += Math.pow((list.get(i) - average), 2); } return std /* list.size(); }* * public double getAverage(ArrayList list) { return getSum(list) /* list.size(); } list) {double sum = 0.0;for (Double value : list) {sum += value;}return sum;}public double getSumXY(ArrayList X, ArrayList Y) {double sum = 0.0;for (int i = 0; i < X.size(); i++) {sum += X.get(i) * Y.get(i);}return sum;}public double getPowSum(ArrayList list) {double sum = 0.0;for (Double value : list) {sum += Math.pow(value, 2);}return sum;}public ArrayList initial(ArrayList axis) {axis = new ArrayList ();axis.add(9.0);axis.add(11.0);axis.add(15.0);axis.add(20.0);axis.add(30.0);axis.add(40.0);axis.add(35.0);axis.add(80.0);axis.add(50.0);axis.add(60.0);axis.add(55.0);axis.add(45.0);axis.add(65.0);axis.add(70.0);axis.add(58.0);axis.add(72.0);axis.add(66.0);axis.add(59.0);return axis;}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
3、html部分代码
<script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js">script><script src="${pageContext.request.contextPath}/js/highcharts.js" >script><script type="text/javascript">$(function(){$.post("/Test_Polyfit/TestNormCdf",null,function(data){var array=eval(data);$("#container").highcharts({chart:{zoomType:'xy'},title:{text:'Normal Probability of Wait Time'},xAxis:{title:{enabled:true,text:'Wait Time'},startOnTick: true, endOnTick: true, showLastLabel: true},yAxis:{title:{text:'Probability in normal distribution'},min:0,max:1, staggerLines:20,allowDecimals:true},legend:{layout:'vertical',align:'left',verticalAlign: 'top',x: 100, y: 70, floating: true, backgroundColor: '#FFFFFF', borderWidth: 1},plotOptions: { scatter: { marker: { radius: 5, states: { hover: { enabled: true, lineColor: 'rgb(100,100,100)' } } }, states: { hover: { marker: { enabled: false } } }, tooltip: { headerFormat: '{series.name}
', pointFormat: '{point.x} cm, {point.y} kg' } } },series: [{ type:'scatter', name: 'point', color: 'rgba(223, 83, 83, .5)', data: array},{type:'line',name: 'polyfitline', color: 'black',data: [array.pop(),array.pop()]}] });});}); script>head><body><div id="container">div>
4、最后实现的效果

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
