1、坐标点类

  1. package cn.test.domain;
  2.  
  3. public class Point {
  4. double x;
  5. double y;
  6.  
  7. public Point(){
  8.  
  9. }
  10.  
  11. public Point(double x, double y) {
  12. super();
  13. this.x = x;
  14. this.y = y;
  15. }
  16.  
  17. public double getX() {
  18. return x;
  19. }
  20.  
  21. public void setX(double x) {
  22. this.x = x;
  23. }
  24.  
  25. public double getY() {
  26. return y;
  27. }
  28.  
  29. public void setY(double y) {
  30. this.y = y;
  31. }
  32. }

2、拟合类,带计算部分

  1. package cn.test.normcdf;
  2.  
  3. import java.io.IOException;
  4. import java.text.NumberFormat;
  5. import java.util.ArrayList;
  6. import java.util.Collections;
  7. import java.util.List;
  8.  
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import net.sf.json.JSONArray;
  15. import net.sf.json.JSONObject;
  16.  
  17. import org.apache.commons.math3.distribution.NormalDistribution;
  18.  
  19. import cn.test.domain.Point;
  20.  
  21. public class TestNormCdf extends HttpServlet {
  22.  
  23. private ArrayList<Double> cyis = null;
  24. private ArrayList<Double> axis = null;
  25.  
  26. public void doGet(HttpServletRequest request, HttpServletResponse response)
  27. throws ServletException, IOException {
  28. axis = new ArrayList<Double>();
  29. cyis = new ArrayList<Double>();
  30. // 初始化横坐标值
  31. axis = initial(axis);
  32. /* axis = stand(axis); */
  33. // 计算纵坐标值
  34. //NormalDistribution normal = new NormalDistribution();
  35. // 先排序
  36. Collections.sort(axis);
  37. int n = axis.size();
  38. /* for (int i = 0; i < axis.size(); i++) {
  39. cyis.add(normal.inverseCumulativeProbability((i + 1 - 0.5) / n));
  40. }*/
  41. for (int i = 0; i < axis.size(); i++) {
  42. cyis.add((i + 1 - 0.5) / n);
  43. }
  44.  
  45. double sumX = getSum(axis);
  46. double sumY = getSum(cyis);
  47. double sumP2X = getPowSum(axis);
  48. double sumXY = getSumXY(axis, cyis);
  49. double a =(sumXY - (1 / axis.size()) * sumX * sumY) / (sumP2X - (1 /axis.size()) * sumX * sumX);
  50. double b = (1 / axis.size()) * (sumY - a*sumX);
  51. double pointx1 = axis.get(0);
  52. double pointx2 = axis.get(n - 1);
  53. double pointy1 = b+a * pointx1;
  54. double pointy2 = b+a * pointx2;
  55. //cyis = stand2(cyis);
  56. /*double x1 = axis.get((int) (n * 0.75));
  57. double x2 = axis.get((int) (n * 0.25));
  58. double y1 = cyis.get((int) (n * 0.75));
  59. double y2 = cyis.get((int) (n * 0.25));
  60. double dx = x1 - x2;
  61. double dy = y1 - y2;
  62. double a = dy / dx;
  63. double pointx1 = axis.get(0);
  64. double pointx2 = axis.get(n - 1);
  65. double centreX = 0.5 * (x1 + x2);
  66. double centreY = 0.5 * (y1 + y2);
  67. double pointy1 = centreY - a * (centreX - pointx1);
  68. double pointy2 = centreY + a * (pointx2 - centreX);*/
  69. Double[][] array = new Double[axis.size() + 2][2];
  70. NumberFormat ddf1 = NumberFormat.getNumberInstance();
  71. ddf1.setMaximumFractionDigits(4);
  72. for (int i = 0; i < axis.size(); i++) {
  73. array[i][0] = Double.valueOf(ddf1.format(axis.get(i)));
  74. array[i][1] = Double.valueOf(ddf1.format(cyis.get(i)));
  75. }
  76. array[axis.size()][0] = Double.valueOf(ddf1.format(pointx1));
  77. array[axis.size()][1] = Double.valueOf(ddf1.format(pointy1));
  78. array[axis.size() + 1][0] = Double.valueOf(ddf1.format(pointx2));
  79. array[axis.size() + 1][1] = Double.valueOf(ddf1.format(pointy2));
  80. response.getWriter().write(JSONArray.fromObject(array).toString());
  81. }
  82.  
  83. public ArrayList<Double> stand2(ArrayList<Double> cyis) {
  84. int n = cyis.size();
  85. NormalDistribution normal = new NormalDistribution();
  86. for (int i = 0; i < cyis.size(); i++) {
  87. cyis.set(i, normal.cumulativeProbability(cyis.get(i)));
  88. }
  89. return cyis;
  90. }
  91.  
  92. /*
  93. * public ArrayList<Double> stand(ArrayList<Double> list) { double average =
  94. * getAverage(list); double std = getStdVariance(list); for (int i = 0; i <
  95. * list.size(); i++) { list.set(i, (list.get(i) - average) / std); } return
  96. * list; }
  97. *
  98. * public double getStdVariance(ArrayList<Double> list) { double std = 0.0;
  99. * double average = getAverage(list); for (int i = 0; i < list.size(); i++)
  100. * { std += Math.pow((list.get(i) - average), 2); } return std /
  101. * list.size(); }
  102. *
  103. * public double getAverage(ArrayList<Double> list) { return getSum(list) /
  104. * list.size(); }
  105. */
  106.  
  107. public double getSum(ArrayList<Double> list) {
  108. double sum = 0.0;
  109. for (Double value : list) {
  110. sum += value;
  111. }
  112. return sum;
  113. }
  114.  
  115. public double getSumXY(ArrayList<Double> X, ArrayList<Double> Y) {
  116. double sum = 0.0;
  117. for (int i = 0; i < X.size(); i++) {
  118. sum += X.get(i) * Y.get(i);
  119. }
  120. return sum;
  121. }
  122.  
  123. public double getPowSum(ArrayList<Double> list) {
  124. double sum = 0.0;
  125. for (Double value : list) {
  126. sum += Math.pow(value, 2);
  127. }
  128. return sum;
  129. }
  130.  
  131. public ArrayList<Double> initial(ArrayList<Double> axis) {
  132. axis = new ArrayList<Double>();
  133. axis.add(9.0);
  134. axis.add(11.0);
  135. axis.add(15.0);
  136. axis.add(20.0);
  137. axis.add(30.0);
  138. axis.add(40.0);
  139. axis.add(35.0);
  140. axis.add(80.0);
  141. axis.add(50.0);
  142. axis.add(60.0);
  143. axis.add(55.0);
  144. axis.add(45.0);
  145. axis.add(65.0);
  146. axis.add(70.0);
  147. axis.add(58.0);
  148. axis.add(72.0);
  149. axis.add(66.0);
  150. axis.add(59.0);
  151. return axis;
  152. }
  153.  
  154. public void doPost(HttpServletRequest request, HttpServletResponse response)
  155. throws ServletException, IOException {
  156. doGet(request, response);
  157. }
  158.  
  159. }

3、html部分代码

  1. <script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
  2. <script src="${pageContext.request.contextPath}/js/highcharts.js" ></script>
  3. <script type="text/javascript">
  4. $(function(){
  5. $.post("/Test_Polyfit/TestNormCdf",null,function(data){
  6. var array=eval(data);
  7. $("#container").highcharts({
  8. chart:{
  9. zoomType:'xy'
  10. },
  11. title:{
  12. text:'Normal Probability of Wait Time'
  13. },
  14. xAxis:{
  15. title:{
  16. enabled:true,
  17. text:'Wait Time'
  18. },
  19. startOnTick: true,
  20. endOnTick: true,
  21. showLastLabel: true
  22. },
  23. yAxis:{
  24. title:{
  25. text:'Probability in normal distribution'
  26. },
  27. min:0,
  28. max:1,
  29. staggerLines:20,
  30. allowDecimals:true
  31. },
  32. legend:{
  33. layout:'vertical',
  34. align:'left',
  35. verticalAlign: 'top',
  36. x: 100,
  37. y: 70,
  38. floating: true,
  39. backgroundColor: '#FFFFFF',
  40. borderWidth: 1
  41. },
  42. plotOptions: {
  43. scatter: {
  44. marker: {
  45. radius: 5,
  46. states: {
  47. hover: {
  48. enabled: true,
  49. lineColor: 'rgb(100,100,100)'
  50. }
  51. }
  52. },
  53. states: {
  54. hover: {
  55. marker: {
  56. enabled: false
  57. }
  58. }
  59. },
  60. tooltip: {
  61. headerFormat: '<b>{series.name}</b><br>',
  62. pointFormat: '{point.x} cm, {point.y} kg'
  63. }
  64. }
  65. },
  66. series: [{
  67. type:'scatter',
  68. name: 'point',
  69. color: 'rgba(223, 83, 83, .5)',
  70. data: array
  71. },{
  72. type:'line',
  73. name: 'polyfitline',
  74. color: 'black',
  75. data: [array.pop(),array.pop()]
  76. }]
  77. });
  78. });
  79. });
  80.  
  81. </script>
  82. </head>
  83. <body>
  84. <div id="container"></div>

4、最后实现的效果

6、基于highcharts实现的线性拟合,计算部分在java中实现,画的是正态概率图的更多相关文章

  1. 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"

    http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智 ...

  2. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  3. 深度学习原理与框架-Tensorflow基本操作-实现线性拟合

    代码:使用tensorflow进行数据点的线性拟合操作 第一步:使用np.random.normal生成正态分布的数据 第二步:将数据分为X_data 和 y_data 第三步:对参数W和b, 使用t ...

  4. 跟我学算法-tensorflow 实现线性拟合

    TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算.借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU.GPU.TPU)和设备(桌面设备.服务器集群.移动设备.边缘设 ...

  5. 机器学习-TensorFlow建模过程 Linear Regression线性拟合应用

    TensorFlow是咱们机器学习领域非常常用的一个组件,它在数据处理,模型建立,模型验证等等关于机器学习方面的领域都有很好的表现,前面的一节我已经简单介绍了一下TensorFlow里面基础的数据结构 ...

  6. [Python] 波士顿房价的7种模型(线性拟合、二次多项式、Ridge、Lasso、SVM、决策树、随机森林)的训练效果对比

    目录 1. 载入数据 列解释Columns: 2. 数据分析 2.1 预处理 2.2 可视化 3. 训练模型 3.1 线性拟合 3.2 多项式回归(二次) 3.3 脊回归(Ridge Regressi ...

  7. Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)

    Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 运行src/main/java/org/wfw/chart/Main.java 即可查看 ...

  8. 基于highcharts封装的组件-demo&源码

    前段时间做的项目中需要用到highcharts绘制各种图表,其实绘制图表本身代码很简单,但是由于需求很多,有大量的图形需要绘制,所以就不得不复制粘贴大量重复(默认配置等等)的代码,所以,后来抽空自己基 ...

  9. 用python的numpy作线性拟合、多项式拟合、对数拟合

    转自:http://blog.itpub.net/12199764/viewspace-1743145/ 项目中有涉及趋势预测的工作,整理一下这3种拟合方法:1.线性拟合-使用mathimport m ...

随机推荐

  1. thinkphp 相关

    路径重写,既模式2 需要.htaccess文件放到index.php同级, http.config文件 中当前项目目录配置  AllowOverride All LoadModule rewrite_ ...

  2. selenium2-java 浏览器cookie的获取

    //成功登陆后增加如下代码        File cookieFile = new File("C:\\tmp\\tangdai.cookie.txt");           ...

  3. 关于css3 Animation动画

    在介绍animation之前有必要先来了解一个东西,那就是“keyframes”,我们把他叫做“关键帧”: 在使用transition制作一个简单的transition效果时,包括了初始属性,最终属性 ...

  4. xcodebuild 自动化打包

    altool 文档 使用xcode自带的xcodebuild 命令通过脚本进行打包 打包->导出ipa, 两行关键的脚本代码 1.Archive xcodebuild archive -arch ...

  5. nginx的安装和负载均衡例子(RHEL/CentOS7.4)

    首先安装RHEL/CentOS7.4 mini ,然后关闭防火墙和 selinux ,更新系统(参看配置linux使用本地yum安装源和Redhat7/CentOS7 关闭防火墙和 selinux两个 ...

  6. appium常见问题11_小米手机初次启动app,报错255“Requires permission android.permission.WRITE_SECURE_SETTINGS”

    问题: 新申请的测试机到啦,申请机型是小米9.打开开发者模式.USB调试后,连接电脑,准备跑一下自动化脚本.但是在pycharm中点击run后,出现报错,报错code:255,提示“Requires ...

  7. git使用记录四:.git分析

    git使用记录四: .git 查看.git 目录下的文件 soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy/.git (GIT_DIR!) $ ls -al tot ...

  8. C++中的静态成员函数

    1,问完成的需求: 1,统计在程序运行期间某个类的对象数目: 1,静态成员变量满足了这个需求: 2,保证程序的安全性(不能使用全局变量): 3,随时可以获取当前对象的数目: 1,有没有什么特别的地方或 ...

  9. JS面向对象——组合使用构造函数模型与原型模型中的隐患

    组合使用构造函数模型和原型模型中的问题,使用对象字面量重写原型模型会有隐患(涉及到原型的动态性),如下例: <!DOCTYPE html> <html> <head> ...

  10. shell内置命令getopts