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 ...
随机推荐
- 左手Mongodb右手Redis redis操作
set key value 设置key的值 get key 取得key的值 decr key 值会减一 incr key 值会加一 decrby key value ,会让key的值减少value. ...
- vmware导出OVF文件失败
从VMware菜单栏选择导出到 .ovf. 显示导出失败 "Failed to open ..... .vmx". 尝试直接打开虚拟机,系统全部正常. 打开虚拟机所在目录,查找后缀 ...
- (64)C# 预处理器指令
预处理器命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面.例如:使用预处理器指令可以禁止编译器编译代码的某一部分,如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,即可以 ...
- Windows 08 R2_组策略
目录 目录 组策略 组策略对象GPO 实验一组策略的计算机配置 实验二组策略的用户配置 实验三首选设置 实验四组策略更改计算机桌面 常用的组策略管理模块策略 限制用户运行指定的Windows程序 隐藏 ...
- VS2015 编写C++的DLL,并防止DLL导出的函数名出现乱码(以串口通信为例,实现串口通信)
参考链接:https://blog.csdn.net/songyi160/article/details/50754705 1.新建项目 建立好的项目界面如下: 接着在解决方案中找到[头文件]然后右击 ...
- Python笔记(八)_内部函数与闭包
内部函数 在函数内部定义另一个函数,也就是函数的嵌套 在外部函数的作用域内,外部函数可以随意调用内部函数 由于内部函数的整个定义过程都在外部函数中,所以出了外部函数就无法再被调用了 def outsi ...
- 使用Bochs学习硬件原理
什么是Bochs? 简单地说,Bochs是一款仿真软件,可以用软件的方式模拟硬件的工作.同类软件有Qemu,仿真软件与虚拟机(hypervisor)还不完全相同,仿真软件是完全软件模拟硬件,而虚拟机软 ...
- 还抱着 Java 8 不放,也是醉了!
作者 | Trisha Gee原文:https://dzone.com/articles/beyond-java-8译者 | 弯月 责编 | 屠敏出品 | CSDN(ID:CSDNnews) 不说 A ...
- __str__和__repr__的区别
有时候我们想让屏幕打印的结果不是对象的内存地址,而是它的值或者其他可以自定义的东西,以便更直观地显示对象内容,可以通过在该对象的类中创建或修改__str__()或__repr__()方法来实现(显示对 ...
- 小议ArcMap面转线的几种方式
ArcMap是一个功能丰富的复杂系统,但凡对它有些认知的会同意这个观点. 它的丰富与复杂体现在一个objective有多种implementation,还体现在多种implementation有类似的 ...