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 ...
随机推荐
- 102.kaldi 斯坦福语音识别工具的编译
接着上一节,在编译完了openFST有限状态机之后,便开始了最重要部分,语音识别插件的编译过程 首先看目录是如下所示的 1.首先添加openBLAS的支持,这是一个矩阵运算库,个人觉得这个矩阵运算库 ...
- PAT甲级——A1155 HeapPaths【30】
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- 关于deepin下安装ssh以后root用户登陆报错的解决
最近刚刚接触到deepin,觉得,wow,除了mac,还有这么好看的非win系统,而且第测出那个Linux,宽容度很高,非常适合我这种比较喜欢折腾的人,于是下载了deepin15版本并将其当作虚拟机成 ...
- input只读效果
有两种方式可以实现input的只读效果:disabled 和 readonly. 自然两种出来的效果都是只能读取不能编辑,可是两者有很大不同. Disabled说明该input无效,及其value不会 ...
- 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)
缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 最不经常使用算法(LFU): 这个缓存算法使用一个计数器来记录条目被访问的频 ...
- 从OLLVM4.0.0升级到LLVM8.0.1,并且给LLVM增加Pass 插件系统
版本太低了,用得我这个揪心. 上周日决定把手头的ollvm从4.0.0升级到LLVM8.0.1. 里面的Pass的话,决定移植到8.0.1里面. 我习惯从代码上来动手 1:下载LLVM https: ...
- MYSQL 查询脚本优化
业务需要,优化一段多表查询脚本. 总结下来,采取以下步骤. 分析语句 分析语句,了解逻辑,是否可以先优化逻辑. 查询语句的查询范围,是否是全表查询,如果是,尽量优化为按索引查询. 查看语句数量,是否有 ...
- Adapter的实现
Adapter概念: Adapter是连接后端数据和前端显示的适配接口,是数据和UI(View)之间一个重要的纽带.在常见的View(ListView, GridView)等地方都需要用到Adapte ...
- Win7装VS2015报错"安装包丢失或损坏"的解决办法
在Win7上安装VS2015的过程中,可能会出现下图错误: 这种情况,多半是应为Win7里面缺少了两个证书: Microsoft Root Certificate Authority 2010 Mic ...
- shell位置参数处理举例