有关任意多条曲线的拟合度算法
为什么80%的码农都做不了架构师?>>>
在股市中,经常会遇到趋势的预判。所谓趋势,即相对而言的规律化的模式识别形态。形象来讲,就是个股的一段时间内的曲线分布状况。
那么,问题来了。
我们虽然可以在少量的图像中分辨出差异不是很大的趋势之间的相似度。如果,在进行量化交易的时候,进行程序化的批量匹配过程中,该如何分辨出相似度最高的曲线标的呢?这就需要程序化算法进行匹配。
对于曲线而言,无非就是一系列的坐标点的连线。在对相邻坐标点的倾斜角进行递归计算,就可以合计出曲线的倾斜角分布积,就代表了曲线的形态。那么,又如何进行批量的匹配呢?需要进行倾斜角分布积的归一化,常规的线性函数在对于无量纲的区间进行归一处理的无奈。该如何处理呢?其实可以转换思路,对每一组倾斜角进行差额计算,由于 180° < 相邻坐标点倾斜角区间 > 0°,那么进行了倾斜角分布积差以后,就转入了常规的线性函数的归一化处理范围。
package com.mms.tools; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 趋势线拟合度算法 * ww */ public class Trend { /* 任意两点间直线的倾斜角算法 */ public static void main(String[] args) throws Exception { //基准坐标系 List<Map<String,Double>> ls = new ArrayList<Map<String,Double>>(); Map<String,Double> m = new HashMap<String,Double>(); String strs = ""; m = new HashMap<String,Double>(); m.put("x", 1.0);m.put("y", 1.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 2.0);m.put("y", 2.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 3.0);m.put("y", 3.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 4.0);m.put("y", 4.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 5.0);m.put("y", 5.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 6.0);m.put("y", 6.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 7.0);m.put("y", 7.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 8.0);m.put("y", 8.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 9.0);m.put("y", 9.0); ls.add(m); m = new HashMap<String,Double>(); m.put("x", 10.0);m.put("y", 9.0); ls.add(m); //坐标系斜率归一化 List<Double> lvs = getLvs(ls); if(lvs != null && lvs.size() >0){ //匹配坐标系 List<Map<String,Double>> lss = new ArrayList<Map<String,Double>>(); for(int i=0;i<10;i++){ m = new HashMap<String,Double>(); m.put("x", (double)(i+1));m.put("y",(double)GetIntMathNumber(1,9)); lss.add(m); } double guis = getGuis(lss,lvs); //System.out.println("两条坐标系曲线拟合(值越小越拟合): "+guis); } } /* * 根据坐标系计算出相邻坐标的斜率集 */ public static List<Double> getLvs(List<Map<String,Double>> ls){ List<Double> lvs = new ArrayList<Double>(); //排序 if(ls != null && ls.size() >0){ //System.out.println("基准坐标系,斜率集核算"); for(int i=0;i<ls.size();i++){ if(i >0 && i<ls.size()){ lvs.add(getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),0)); //System.out.println(i+" | "+ls.get(i-1).get("y")+" | "+ls.get(i).get("y")+" |基准斜率 "+getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),0)); } } //System.out.println(""); } return lvs; } /* * 根据坐标系计算出相邻坐标的斜率集,相对于基准的权重值(聚合权重) */ public static double getGuis(List<Map<String,Double>> ls,List<Double> lvs){ double guis = 0; //排序 if(ls != null && ls.size() >0){ //System.out.println("匹配坐标系,斜率集核算匹配"); for(int i=0;i<ls.size();i++){ if(i >0 && i<ls.size()){ guis += getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),lvs.get(i-1)); //System.out.println(i+" | "+ls.get(i-1).get("y")+" | "+ls.get(i).get("y")+" |基准斜率 "+lvs.get(i-1)+" |匹配归一权重 "+getGuiLv(ls.get(i-1).get("x"),ls.get(i-1).get("y"),ls.get(i).get("x"),ls.get(i).get("y"),lvs.get(i-1))); } } //System.out.println(""); } return guis; } /* * 根据任意两点坐标斜率,比较基准,并进行离差归一化权重计算(可计算斜率,也可计算权重) */ public static double getGuiLv(double x1,double y1,double x2,double y2,double atan){ double i = 0; //任意两点间直线的倾斜角 double x = Math.atan2(x2-x1,y2-y1)*180/Math.PI; if(atan == 0){ i = x; }else{ //线性归一化函数转换(离差) 归一化:(x-min)/(max-min); double y = x-atan;if(y <0){y = -y;} //离差权重 i = (y-0)/(x-0); } return i; } /* * 从startNumber到endNumber的随机整数 */ public static int GetIntMathNumber(int startNumber,int endNumber){ return (int)Math.round(Math.random()*(endNumber-startNumber)+startNumber); } }
此处给出java的算法代码,如下是进行了图形化结果。
转载于:https://my.oschina.net/matol/blog/481401
有关任意多条曲线的拟合度算法相关推荐
- python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...
第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式.具体示例如下. ###拟合年龄 import numpy as np import matplotlib.pyplot as p ...
- 如何反映两条曲线的拟合精度_【隆旅干货分享】差压传感器的应用及精度特性分析...
/// 专 业 的 工 业 传 感 与 测 量 知 乎 号 /// / 前言 / 差压传感器通常被用于试验台.风洞.泄漏检测系统和其他应用中.每种应用的工程师都在寻求对他们所在行业十分重要的传感器改进 ...
- 如何反映两条曲线的拟合精度_用水平仪如何检测导轨的直线度?
1.水平仪的原理及用途: 气泡型水平仪的水准管是由玻璃制成,水准管内壁是一个具有一定曲率半径的曲面,管内装有液体,当水平仪发生倾斜时,水准管中气泡就向水平仪升高的一端移动,从而确定 ...
- python两条曲线图片相似度_Python比较两个图片相似度的方法
本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一 ...
- 如何反映两条曲线的拟合精度_你知道850加工中心定位精度的检测有哪些吗?
你知道850加工中心定位精度的检测有哪些吗? 定位精度在机械制造上指零件或刀具等实际位置与标准位置(理论位置/理想位置)之间的差距,其差距越小,说明精度越高.定位精度是零件加工精度得以保证的前提.XF ...
- 如何反映两条曲线的拟合精度_中走丝线切割机床的加工精度用什么来衡量
今天为大家分析一下中走丝线切割机床用什么来衡量加工精度. 在用户使用中走丝线切割机床模具加工的时候,中走丝线切割机床加工为最后工序,所以对加工精度要求很高,如果中走丝线切割机床的机械精度不好,将直接影 ...
- 【python图像处理】直线和曲线的拟合与绘制(curve_fit()详解)
在数据处理和绘图中,我们通常会遇到直线或曲线的拟合问题,python中scipy模块的子模块optimize中提供了一个专门用于曲线拟合的函数curve_fit(). 下面通过示例来说明一下如何使用c ...
- 文本相似度算法Jaccard相似度(杰卡德相似度)java实现
文本相似度算法 杰卡德相似度,指的是文本A与文本B中交集的字数除以并集的字数,公式非常简单: java代码 import java.util.HashSet; import java.util.Sca ...
- Matlab 散点 拟合 曲率,有数据点,希望得到一条拟合曲线,再求出这条曲线的曲率,求助!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 得到X,Y的数据点后,我尝试用origin7.5的analysis-fit sigmoidal功能拟合出曲线,由于方程太复杂,用公式计算很困难,我想用or ...
最新文章
- 使嵌入式系统调试更容易:有用的硬件和软件提示
- 为现有的表添加自增列id并赋值
- java8自定义收集器_使用自定义收集器进行Java 8分组?
- SheevaPlug是什么,有什么用途
- 发布:偶写的NHibernate代码生成器
- weblogic详解
- 数据分析5大关键环节
- python画图代码-Python为啥这么牛?一行Python代码除了画图竟然还有这些功能!
- CONVERSION_EXIT_ALPHA_INPUT
- 容器技术Docker K8s 21 容器服务ACK基础与进阶-存储管理
- STM8S103之时钟设置
- js中this的作用域
- mysql 修改隔离级别_设置mysql隔离级别
- 记录office安装一半重启后无法继续安装
- Brain:一种用于阿尔兹海默症(AD)分类的可解释的深度学习框架
- 【Scratch二次开发】03-构建桌面应用
- 申请阿里云的免费SSL证书,实现小程序HTTPS请求
- 需求分析报告应该包含哪些部分_2020最新抖音用户画像分析报告:粉丝都有哪些特点和需求?...
- 小程序图片加载不出来(显示)
- LevelDB的边边角角之一
热门文章
- c语言inline详解
- 一致性哈希(Consistent Hashing)
- 使用C++实现一套简单的状态机模型——原理解析
- Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤
- 图像边缘检测之拉普拉斯(Laplacian)C++实现
- C/C++中inline/static inline/extern inline的区别及使用
- 一个正执行的程序如何启动另一新程序并关闭现执行程序
- 【Qt】信号和槽对值传递参数和引用传递参数的总结
- java并发vol_java 并发中 volitile、synchronized和lock的比较(一)
- linux 正则查找email_Linux生产环境上,最常用的一套“Sed“技巧