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 ...
随机推荐
- Linux 下查看操作系统信息
1.uname -a 可显示电脑以及操作系统的相关信息. 2.输入"cat /proc/version",说明正在运行的内核版本. 3.输入"cat /etc/issu ...
- 拾遗:vim 配置(个人适用,仅供参考)
~/.vimrc "===================通用配置====================== set encoding=utf- set statusline=%F%=[L ...
- 转 lsof命令详解
lsof命令详解 lsof (list open files)是一个列出当前系统打开文件的工具.在linux系统环境下,任何事物都可以以文件形式存在,通过文件不仅可以访问常规的数据,还可以访问网络 ...
- rafy使用笔记
1.rafy里实体字段string类型映射成数据库varchar(2000). 解决:“DomainApp“下“OnRuntimeStarting“方法里添加“DbMigrationSettings. ...
- How To Release and/or Renew IP Addresses on Windows XP | 2000 | NT
Type 'ipconfig' (without the quotes) to view the status of the computer's IP address(es). If the com ...
- Java的动态代理Proxy
概念梳理: 1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际 ...
- is not an enclosing class
public class A {public class B { }}; 需要实例B类时,按照正逻辑是,A.B ab = new A.B();那么编译器就会出现一个错误–“is not an encl ...
- services - Internet 网络服务列表
DESCRIPTION(描述) services 是一个普通的 ASCII 码文件, 它在 internet 服务的友好原文名以及这些服务预先分配的端口和协议类型之间提供了映射. 每个联网程序必须查找 ...
- 团队作业-Bata冲刺第一天
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblo ...
- http请求访问响应慢问题解决的基本思路
第一步,检查网络 ping命令检查网络域名解析是否正常,ping服务器的延迟是否过大,如果过大可以检查Ip是否冲突,或者交换机网线是否正常插好,通过nmon还可以查看网络流量,一般用的千兆交换机理论速 ...