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 ...
随机推荐
- soj#547 bzoj5046 分糖果游戏
分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ; ][],s[],p[],v[]; si ...
- 题解 SP4033 【PHONELST - Phone List】
水一发trie板子~ 先说这个题怎么套上板子 首先我们判断是否有前缀可以边插入边判断 当我们经过了一个完整的字符串(即当前节点到了一个有标记的节点上) 就是有前缀 我们当然也可以无脑先判断一发(比如我 ...
- ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ‘com.win.mall.dao.CartMapper.test’. It’s likely that neither a Result Type nor a Result Map was specified.
ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.win.m ...
- iview+vue 表格任一项实现鼠标划上显示内容
在新版本的iview中,表格新增了tooltip功能: 但做项目时并不是新的iview版本,又不想升级,如何才能实现当内容过多鼠标划上显示内容?下边是我做项目时的改动: { // fixed: 'le ...
- redis 服务器端安装(三)
redis 服务器端安装(三) Redis is an open source, BSD licensed, advanced key-value store. It is often referre ...
- 【JavaScript性能优化】------理解Script标签的加载和执行
1.script标签是如何加载的?当浏览器遇到一个 < script>标签时,浏览器会停下来,运行JavaScript代码,然后再继续解析.翻译页面.同样的事情发生在使用 src 属性加载 ...
- 57.Queue Reconstruction by Height(按身高重建对列)
Level: Medium 题目描述: Suppose you have a random list of people standing in a queue. Each person is d ...
- [Java 教程 03] 我的第一个Java程序
现在,大家应该都已经安装好jdk环境了吧!是不是已经跃跃欲试,按耐不住心中的小激动了?那我们现在就来写我们java学习生涯中的第一个java程序. 文件相关设置 为了方便后面大家的学习呢?有一点大家还 ...
- C# 编程—字符串(方法应用)、数学Math函数、DateTime、异常捕获、其他
其他: #--任意位数字,有几位显示几位 0--至少以为数字,不足则补0 例如:#.00--必须保留两位小数 字符串(string): Length 长度 ...
- Mongo导出、导入
1.mongodb 数据导出: connection options: /h, /host:<hostname> mongodb host to connect to (setname/h ...