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 ArrayList<Double> cyis = null;
private ArrayList<Double> axis = null; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
axis = new ArrayList<Double>();
cyis = new ArrayList<Double>();
// 初始化横坐标值
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<Double> stand2(ArrayList<Double> 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<Double> stand(ArrayList<Double> list) { 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<Double> 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<Double> list) { return getSum(list) /
* list.size(); }
*/ public double getSum(ArrayList<Double> list) {
double sum = 0.0;
for (Double value : list) {
sum += value;
}
return sum;
} public double getSumXY(ArrayList<Double> X, ArrayList<Double> 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<Double> list) {
double sum = 0.0;
for (Double value : list) {
sum += Math.pow(value, 2);
}
return sum;
} public ArrayList<Double> initial(ArrayList<Double> axis) {
axis = new ArrayList<Double>();
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: '<b>{series.name}</b><br>',
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、最后实现的效果

6、基于highcharts实现的线性拟合,计算部分在java中实现,画的是正态概率图的更多相关文章
- 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"
http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智 ...
- 基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...
- 深度学习原理与框架-Tensorflow基本操作-实现线性拟合
代码:使用tensorflow进行数据点的线性拟合操作 第一步:使用np.random.normal生成正态分布的数据 第二步:将数据分为X_data 和 y_data 第三步:对参数W和b, 使用t ...
- 跟我学算法-tensorflow 实现线性拟合
TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算.借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU.GPU.TPU)和设备(桌面设备.服务器集群.移动设备.边缘设 ...
- 机器学习-TensorFlow建模过程 Linear Regression线性拟合应用
TensorFlow是咱们机器学习领域非常常用的一个组件,它在数据处理,模型建立,模型验证等等关于机器学习方面的领域都有很好的表现,前面的一节我已经简单介绍了一下TensorFlow里面基础的数据结构 ...
- [Python] 波士顿房价的7种模型(线性拟合、二次多项式、Ridge、Lasso、SVM、决策树、随机森林)的训练效果对比
目录 1. 载入数据 列解释Columns: 2. 数据分析 2.1 预处理 2.2 可视化 3. 训练模型 3.1 线性拟合 3.2 多项式回归(二次) 3.3 脊回归(Ridge Regressi ...
- Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)
Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 运行src/main/java/org/wfw/chart/Main.java 即可查看 ...
- 基于highcharts封装的组件-demo&源码
前段时间做的项目中需要用到highcharts绘制各种图表,其实绘制图表本身代码很简单,但是由于需求很多,有大量的图形需要绘制,所以就不得不复制粘贴大量重复(默认配置等等)的代码,所以,后来抽空自己基 ...
- 用python的numpy作线性拟合、多项式拟合、对数拟合
转自:http://blog.itpub.net/12199764/viewspace-1743145/ 项目中有涉及趋势预测的工作,整理一下这3种拟合方法:1.线性拟合-使用mathimport m ...
随机推荐
- 三线SWD模式Jlink
三线SWD模式Jlink 在公司实习,部门经理让我做一个USB-CAN的适配器. 在网上找资料,找到一个开源的USB-CAN的适配器的资料. 采用的是CP2102芯片实现USB转串口.STM32作 ...
- 支付宝PC端接入PHP
引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $orde ...
- HTML页面隐藏值
<input id="menuId" type="hidden" hidden="hidden" />
- QTP——改变Excel的单元格颜色
Public Function QTP_Change_Color(pathway,sheetname,x,y,color) Dim srcData,srcDoc,sp1,sp2,num, ...
- JavaScript对象的property属性详解
JavaScript对象的property属性详解:https://www.jb51.net/article/48594.htm JS原型与原型链终极详解_proto_.prototype及const ...
- Python面试题之如何用Python来发送邮件?
python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib负责发送邮件. 代码如下: 1 #! /usr/bin/env python 2 ...
- HDU - 2181 C - 哈密顿绕行世界问题(DFS
题目传送门 C - 哈密顿绕行世界问题 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...
- 八、hibernate的查询(HQL)
HQL:Hibernate Query Language 提供更加丰富灵活.更为强大的查询能力 HQL更接近SQL语句查询语法 面向对象的查询 "from Children where ci ...
- linux mysql数据库安装
1.创建mysql用户账号:groupadd mysqluseradd -d /sbin/nolog -g mysql -M mysql-s /sbin/nologin 表示禁止该用户登录,只需要角色 ...
- Linux系统实验
前言:怎么感觉Linux运维和Linux系统实验没什么关系?该不会的还是不会(@@).记录一下几个实验吧. 本篇目录: 实验一 编程环境 实验二 文件读写 实验三 进程通信 实验一 编程环境√ 实验步 ...