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 ...
随机推荐
- thinkphp 相关
路径重写,既模式2 需要.htaccess文件放到index.php同级, http.config文件 中当前项目目录配置 AllowOverride All LoadModule rewrite_ ...
- selenium2-java 浏览器cookie的获取
//成功登陆后增加如下代码 File cookieFile = new File("C:\\tmp\\tangdai.cookie.txt"); ...
- 关于css3 Animation动画
在介绍animation之前有必要先来了解一个东西,那就是“keyframes”,我们把他叫做“关键帧”: 在使用transition制作一个简单的transition效果时,包括了初始属性,最终属性 ...
- xcodebuild 自动化打包
altool 文档 使用xcode自带的xcodebuild 命令通过脚本进行打包 打包->导出ipa, 两行关键的脚本代码 1.Archive xcodebuild archive -arch ...
- nginx的安装和负载均衡例子(RHEL/CentOS7.4)
首先安装RHEL/CentOS7.4 mini ,然后关闭防火墙和 selinux ,更新系统(参看配置linux使用本地yum安装源和Redhat7/CentOS7 关闭防火墙和 selinux两个 ...
- appium常见问题11_小米手机初次启动app,报错255“Requires permission android.permission.WRITE_SECURE_SETTINGS”
问题: 新申请的测试机到啦,申请机型是小米9.打开开发者模式.USB调试后,连接电脑,准备跑一下自动化脚本.但是在pycharm中点击run后,出现报错,报错code:255,提示“Requires ...
- git使用记录四:.git分析
git使用记录四: .git 查看.git 目录下的文件 soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy/.git (GIT_DIR!) $ ls -al tot ...
- C++中的静态成员函数
1,问完成的需求: 1,统计在程序运行期间某个类的对象数目: 1,静态成员变量满足了这个需求: 2,保证程序的安全性(不能使用全局变量): 3,随时可以获取当前对象的数目: 1,有没有什么特别的地方或 ...
- JS面向对象——组合使用构造函数模型与原型模型中的隐患
组合使用构造函数模型和原型模型中的问题,使用对象字面量重写原型模型会有隐患(涉及到原型的动态性),如下例: <!DOCTYPE html> <html> <head> ...
- shell内置命令getopts