大经算法
‘壹’ 公制螺纹 大经 中经 小径 计算方法
公制螺纹一般有现成表格可以查询的,金属车削手册或者查询国标都可以找到,当然也可以通过一定的公式进行计算。
下面是一些具体的计算公式:
内螺纹:螺距*0.65=牙高 例M33*2 0.65*2=1.3 33-1.3(半径)*2=30.4mm
小径=大径-螺距
M36X2外螺纹的中径是34.701,小径是33.853.内螺纹的大径就是36,但这都是理想值,具体的数值要看你的螺纹的公差等级和公差带位置才能确定 毫米(mm)和英寸(in)的换算
1in=25.4mm
1mm=1/25.4in=0.03937in( / :表示分号)
大径=公称直径。
中径=大径-0.6495p
小径=大径-1.0825p
牙型高度=0.5413p
公制三角型60° p=2 M24 X 2
大径=公制直径=24°
中径=24-1.0825X2
牙型高度=0.5413X2
什么是公制螺纹:
公制螺纹,螺纹标准的一种,又称米制螺纹,与英制螺纹最大的区别是螺距用毫米计量。公制螺纹有普通螺纹(牙型角60°);梯形螺纹(牙型角30°);锯齿形螺纹(牙型角33°);方牙螺纹等几种。
牙型的五要素
径是指和外螺纹的牙顶、内螺纹的牙底相重合的假想柱面或锥面的直径,外螺纹的大径用d表示,内螺纹的大径用D表示;小径是指和外螺纹的牙底、内螺纹的牙顶相重合的假想柱面或锥面的直径,外螺纹的小径用d1表示,内螺纹的小径用D1表示。在大径和小径之间,设想有一柱面(或锥面),在其轴剖面内,素线上的牙宽和槽宽相等,则该假想柱面的直径称为中径。
线数:形成螺纹的螺旋线的条数称为线数。有单线和多线螺纹之分,多线螺纹在垂直于轴线的剖面内是均匀分布的。
导程:相邻两牙在中径线上对应两点轴向的距离称为螺距。同一条螺旋线上,相邻两牙在中径线上对应两点轴向的距离称为导程。线数n、螺距P、导程S之间的关系为:S=n·P
旋向:沿轴线方向看,顺时针方向旋转的螺纹成为右旋螺纹,逆时针旋转的螺纹称为左旋螺纹。
螺纹的牙型、大径、螺距、线数和旋向称为螺纹五要素,只有五要素相同的内、外螺纹才能互相旋合。
‘贰’ 计算机十大经典算法有哪些
再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,逆着这个行进方向,从终点向始点计算,在选定系统行进方向之后,常比线性规划法更为有效,由每个阶段都作出决策,从而使整个过程达到最优化。所谓多阶段决策过程,特别是对于那些离散型问题。实际上,动态规划法就是分多阶段进行决策,其基本思路是,原问题的解即子问题的解的合并
不好意思啊,就是把研究问题分成若干个相互联系的阶段,逐次对每个阶段寻找某种决策,用来解决多阶段决策过程问题的一种最优化方法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题:按时空特点将复杂问题划分为相互联系的若干个阶段。字面上的解释是“分而治之”动态规划法[dynamic
programming
method
(dp)]是系统分析中一种常用的方法。在水资源规划中,往往涉及到地表水库调度、水资源量的合理分配、优化调度等问题,而这些问题又可概化为多阶段决策过程问题。动态规划法是解决此类问题的有效方法。动态规划法是20世纪50年代由贝尔曼(r,使整个过程达到最优.
bellman)等人提出。许多实际问题利用动态规划法处理,故又称为逆序决策过程。
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
在计算机科学中,分治法是一种很重要的算法
‘叁’ 大经600。小径506。高度60。锥度1:7.5。求角度多少~~~~求师傅帮忙。。急用~~~~~~
计算公式直接算出来的有误差.有近似公式的不过只适合小的角度.角度大了误差太大还是查三角函数简单标准
大经600。小径506。高度60算法
600-506÷60÷2=0.7833333333查科学计算器
Inv tan 得半角38.07278.38.07278乘2=76.14556度
1:7.5算法
1÷7.5÷2=半角3.81407乘2=7.628度
近似公式1÷7.5乘28.7=半角3.8266乘2=7.653度
‘肆’ m35x1.5 -6g螺纹大经公差是多少呢,怎么算呢
按GB192-81计算
35-sin30°×1.5/4=34.8125
近似算法是35-0.15=34.85
公差带可以去切削手册上查
建议大径加工至34.7再加工螺纹,加工后肯定能螺上
‘伍’ 数据挖掘十大经典算法及各自优势
数据挖掘十大经典算法及各自优势
不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。
1. C4.5
C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;2) 在树构造过程中进行剪枝;3) 能够完成对连续属性的离散化处理;4) 能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
2. The k-means algorithm 即K-Means算法
k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均 方误差总和最小。
3. Support vector machines
支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种监督式学习的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更 高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假 定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和 Barnard 将支持向量机和其他分类器进行了比较。
4. The Apriori algorithm
Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。
5. 最大期望(EM)算法
在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然 估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。
6. PageRank
PageRank是Google算法的重要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里·佩奇(Larry Page)。因此,PageRank里的page不是指网页,而是指佩奇,即这个等级方法是以佩奇来命名的。
PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值。PageRank背后的概念是,每个到页面的链接都是对该页面的一次投票, 被链接的越多,就意味着被其他网站投票越多。这个就是所谓的“链接流行度”——衡量多少人愿意将他们的网站和你的网站挂钩。PageRank这个概念引自 学术中一篇论文的被引述的频度——即被别人引述的次数越多,一般判断这篇论文的权威性就越高。
7. AdaBoost
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器 (强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权 值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。
8. kNN: k-nearest neighbor classification
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
9. Naive Bayes
在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以 及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属 性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。10. CART: 分类与回归树
CART, Classification and Regression Trees。 在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法;第二个想法是用验证数据进行剪枝。
以上是小编为大家分享的关于数据挖掘十大经典算法及各自优势的相关内容,更多信息可以关注环球青藤分享更多干货
‘陆’ 易经的算法是什么
《周礼‧春官‧大卜》:“掌三易之法,一曰连山。二曰归藏,三曰周易”郑玄〈易赞〉及〈易论〉云:“夏曰连山,殷曰归藏。” 连山易 跟 归藏易 目前都失传了只有周易流传至今。一般认为连山始于艮,如山势绵延不绝,归藏源于坤,顺藏纳万物。周易出于乾,天行周衍。
三易的占法
北宋邵雍在《皇极经世》认为:“连山蓍用九十七策,以八为揲,正卦一0一六,互卦一0一六,变卦三二五0一二,以数断不以辞断。其吉凶一定不可易”
归藏在《汉书•艺文志》中没有着录,《隋书•经籍志》亦曰:“《归藏》汉初已亡,晋《中经》有之,唯载卜筮,不似圣人之旨。”但明朝杨慎认为汉代时《归藏》未失,“《连山》藏于兰台,《归藏》藏于太卜,见桓谭《新论》,则后汉时《连山》《归藏》犹存,未可以《艺文志》不列其目而疑之。”清人朱彝尊云:“《归藏》隋时尚存,至宋犹有《初经》、《齐母》、《本蓍》三篇,其见于传注所引者。”
宋代家铉翁称:“归藏之书作于黄帝。而六十甲子与先天六十四卦并行者,乃中天归藏易也。”。
不过1993年3月,湖北江陵王家台15号秦墓中出土了《归藏》,称为王家台秦简归藏。按廖名春的〈王家台秦简《归藏》管窥〉中言:“秦简《易占》不仅是《归藏》,更准确一点,应当是《归藏》易中的《郑母经》”
其他多半应属伪托
周易的占法比较复杂主要分成几个系统,主要跟取卦法跟释卦法有关。取卦就是如何算出这个卦,释卦就是如何从卦来推断解释问题的答案
最传统取卦法的出自〈易传‧系辞传下〉:“大衍之数五十,其用四十有九。分而为二以象两,挂一以象三, 揲之以四以象四时,归奇于扐以象闰,五岁再闰,故再扐而后挂.....”具体方法见下:
一、将藏在竹椟或木椟中的五十茎蓍草取出,以两手执之,熏于香炉,命蓍,然后随取一茎放回椟中,留下四十九茎,也叫四十九策,用来揲蓍。此即“大衍之数五十,其用四十有九。”
二、信手将四十九策分为二分,不需计数。分开后,就放在左右两边,以象两仪。此即“分而为二以象两。”
三、两仪在左边的象天,在右边的象地,即在左边的策数中分出一策象人,挂在右手的小指间,以象天地人三才。此即“挂一以象三。”
四、取左边的蓍草,执于左手,以右手四四揲之。就是以四策为一计数单位,揲之就是数之,一数就是四策,以象一年的春夏秋冬。数到最后,视所余的策数,或一,或二,或三,或四,都算是奇数,即将此奇数之策扐在左手的第三第四指之间。此即“归奇于扐以象闰。”已经四四数过之策则放回左边。
五、次取右边之策执于右手,而以左手四四揲之。这也是“揲之以四,以象四时。”数到最后,视所余之策,或一,或二,或三,或四,都算是奇数,而将此奇数之策扐在左手的第二第三指之间。此即“五岁再闰,故再扐而后挂。”已经四四数过之策则放回右边。揲蓍到此,是为第一变。检视扐在左手三四指间的左余之策,以及扐在左手二三指间的右余之策,如左余一策,则右余必三策,左二则右亦二,左三则右必一,左四则右亦四。合计左右所余之策,以及挂在右手小指间的一策,即是一挂二扐的策数,不是五策,就是九策。即将这五策或九策另置一处,第一变即告完成。
六、再将左右两边已经数过的蓍草合起来,检视其数,或是四十四策,或是四十策,再度分二、挂一、揲四、归扐,如第一变之仪。最后检视左右所余之策,左一则右必二,左二则右必一,左三则右必四,左四则右必三。合计左右所余之策,以及挂在右手小指间的一策,即是一挂二扐的策数,不是四策,就是八策。即将这四策或八策另置一处,是为第二变。
七、又将左右过揲之蓍合起来,检视其数,或四十策,或三十六策,或三十二策,如第二变那样分二、挂一、揲四、归扐。最后检视左右所余之策,与第二变同,则将所余之策与挂一之策合之,另置一处,是为第三变。
八、三变而成一爻,计算三变所得挂扐与过揲之策,便知所得何爻。如三变合计得挂扐十三策,以减四十九策,则知三变合得过揲的策数是三十六策,以四除之,因为揲蓍时是以四四数之,此处故以四除,则三十六得九,是为老阳,其画为“O ”,名之为重。如三变合得挂扐二十五策,则知三变合得过揲二十四策,四除,得六,是为老阴,其画为“X ”,名之为交。如三变合得挂扐二十一策,则知三变合得过揲二十八策,除以四,得七,是为少阳,其画为“-”,名之为单。如三变合得挂扐十七策,则知三变合得过揲三十二策,以四除之,得八,是为少阴,其画为“- -”,名之为拆。
如是三变而成初爻,即将初爻画在画卦的版上。以下不再命蓍,即用四十九蓍,分二、挂一、揲四、归扐,再经三变而成二爻。以后每三变都是如此。一卦六爻,十八变而成一卦。画卦时,由下往上画。前九变而成三爻,出现一个三画卦于内,即是初二三爻,称为内卦。后九变又出现一个三画卦于外,即是四五上爻,称为外卦。得内卦是小成,得外卦是大成。六十四卦皆是如此。
大衍之数,有体有用。体是五十茎蓍草去一不用,此一即是太极。韩康伯引王弼之说:“不用而用以之通,非数而数以之成,斯易之太极也。”用是以四十九蓍分二挂一揲四归扐,以象两仪三才四时闰月等,由此而成六十四卦,三百八十四爻,老阳每爻三十六策,老阴每爻二十四策,老阴老阳各一百九十二爻,总为一万一千五百二十策,以当万物之数。大衍的衍字,郑康成当演字讲,就是推演其数之义。演数必须五十茎蓍草,故取五十以为大衍之数。观变玩占,了解五十之数体用兼备的意义,即可入道。自汉以来,历代诸儒对于五十之数的解说,各有其异见,学者可以流览参考,不必深入研究。
(转载自读易简说 http://www.minlun.org.tw/3pt/3pt-1-5/t/014.htm )
占算出后其中一种释卦方式是依经解卦,即对照占卜出来的卦、爻辞还有易传跟历代的注释进行解读与诠释的工作。
第二种系统是起于汉易术数系统,代表是《黄金策》、《增删卜易》等等。则是取卦后依照问题属性与起课干支来进行装卦的动作,推算六世(亲爻)应(爻)用(神)飞(神)伏(神)等所在。然后根据其位置与问题属性断论吉凶。
而在之后又为了需要发展出许多取卦,代表就是《梅花易数》随便看到落下的几办花叶,书上随手翻开的页码都可以当作是取象画卦的依据。最简单的一种演变就是金钱卦,拿三枚硬币丢六次,全正是老阳,全反是老阴,一正两反少阳,一反两正少阴。
画卦时一律由下往上画,老阴老阳会变爻,阴变阳,阳便阴。
就这样,算法取象很容易,难在释卦解卦。依经解卦靠经验学识,装卦则是要靠技巧背口诀。
希望我的回答对你有帮助。
‘柒’ 哪位朋友知道锥度螺纹大小经的算法麻烦赐教一下最好能以G2"为例子讲解下十分感谢,是常数的参数最好标
应该这个上面有 具体怎么计算没研究过 一般都是查表
‘捌’ z1/2螺纹,长度15。求大径,小径,螺距,牙高。
Z1/2锥螺纹的外径是20.956mm,螺纹的外径不用计算,直接查螺丝手册。小径=大经-(牙高×2)。我就知道这些,望对你有所帮助!
‘玖’ 算英制锥螺纹的大小径怎么算
算法如下:
英制螺纹以英寸为单位标注螺纹尺寸,一般牙型角为55度,G是管螺纹的意思,ZG是圆锥管螺纹。1/2 14 其中1/2 是螺纹外径1/2英寸,按每英寸为公制25.4mm计算,25.4*1/2=12.7mm,即螺纹外径为12.7mm;14是指该螺纹每英寸距离内有14牙,这样相当以公制表示时螺距为 25.4/14=1.814mm;其余类推。其实加工时车床往往在挂轮表中已经有相应指示,上述螺纹只要按14牙挂轮,55度车刀,外径加工到12.7mm即可。
英制螺纹是螺纹尺寸用英制标注,按外形分圆柱、圆锥两种;按牙型角分55°、60°两种。螺纹中的1/4、1/2、1/8 标记是指螺纹尺寸的直径,单位是英寸。一寸等于8分,1/4 寸就是2分,如此类推。
‘拾’ 大数据十大经典算法之k-means
大数据十大经典算法之k-means
k均值算法基本思想:
K均值算法是基于质心的技术。它以K为输入参数,把n个对象集合分为k个簇,使得簇内的相似度高,簇间的相似度低。
处理流程:
1、为每个聚类确定一个初始聚类中心,这样就有k个初始聚类中心;
2、将样本按照最小距离原则分配到最邻近聚类
3、使用每个聚类中的样本均值作为新的聚类中心
4、重复步骤2直到聚类中心不再变化
5、结束,得到K个聚类
划分聚类方法对数据集进行聚类时的要点:
1、选定某种距离作为数据样本间的相似性度量,通常选择欧氏距离。
2、选择平价聚类性能的准则函数
用误差平方和准则函数来评价聚类性能。
3、相似度的计算分局一个簇中对象的平均值来进行
K均值算法的优点:
如果变量很大,K均值比层次聚类的计算速度较快(如果K很小);
与层次聚类相比,K均值可以得到更紧密的簇,尤其是对于球状簇;
对于大数据集,是可伸缩和高效率的;
算法尝试找出使平方误差函数值最小的k个划分。当结果簇是密集的,而簇与簇之间区别明显的时候,效果较好。
K均值算法缺点:
最后结果受初始值的影响。解决办法是多次尝试取不同的初始值。
可能发生距离簇中心m最近的样本集为空的情况,因此m得不到更新。这是一个必须处理的问题,但我们忽略该问题。
不适合发现非凸面形状的簇,并对噪声和离群点数据较敏感,因为少量的这类数据能够对均值产生较大的影响。
K均值算法的改进:
样本预处理。计算样本对象量量之间的距离,筛掉与其他所有样本那的距离和最大的m个对象。
初始聚类中心的选择。选用簇中位置最靠近中心的对象,这样可以避免孤立点的影响。
K均值算法的变种:
K众数(k-modes)算法,针对分类属性的度量和更新质心的问题而改进。
EM(期望最大化)算法
k-prototype算法
这种算法不适合处理离散型属性,但是对于连续型具有较好的聚类效果。
k均值算法用途:
图像分割;
衡量足球队的水平;
下面给出代码:
#include <iostream>
#include <vector>
//auther archersc
//JLU
namespace CS_LIB
{
using namespace std;
class Kmean
{
public:
//输入格式
//数据数量N 维度D
//以下N行,每行D个数据
istream& loadData(istream& in);
//输出格式
//聚类的数量CN
//中心维度CD
//CN行,每行CD个数据
//数据数量DN
//数据维度DD
//以下DN组,每组的第一行两个数值DB, DDis
//第二行DD个数值
//DB表示改数据属于一类,DDis表示距离改类的中心的距离
ostream& saveData(ostream& out);
//设置中心的数量
void setCenterCount(const size_t count);
size_t getCenterCount() const;
//times最大迭代次数, maxE ,E(t)表示第t次迭代后的平方误差和,当|E(t+1) - E(t)| < maxE时终止
void clustering(size_t times, double maxE);
private:
double calDistance(vector<double>& v1, vector<double>& v2);
private:
vector< vector<double> > m_Data;
vector< vector<double> > m_Center;
vector<double> m_Distance;
vector<size_t> m_DataBelong;
vector<size_t> m_DataBelongCount;
};
}
#include "kmean.h"
#include <ctime>
#include <cmath>
#include <cstdlib>
//auther archersc
//JLU
namespace CS_LIB
{
template<class T>
void swap(T& a, T& b)
{
T c = a;
a = b;
b = c;
}
istream& Kmean::loadData(istream& in)
{
if (!in){
cout << "input error" << endl;
return in;
}
size_t dCount, dDim;
in >> dCount >> dDim;
m_Data.resize(dCount);
m_DataBelong.resize(dCount);
m_Distance.resize(dCount);
for (size_t i = 0; i < dCount; ++i){
m_Data[i].resize(dDim);
for (size_t j = 0; j < dDim; ++j){
in >> m_Data[i][j];
}
}
return in;
}
ostream& Kmean::saveData(ostream& out)
{
if (!out){
cout << "output error" << endl;
return out;
}
out << m_Center.size();
if (m_Center.size() > 0)
out << << m_Center[0].size();
else
out << << 0;
out << endl << endl;
for (size_t i = 0; i < m_Center.size(); ++i){
for (size_t j = 0; j < m_Center[i].size(); ++j){
out << m_Center[i][j] << ;
}
out << endl;
}
out << endl;
out << m_Data.size();
if (m_Data.size() > 0)
out << << m_Data[0].size();
else
out << << 0;
out << endl << endl;
for (size_t i = 0; i < m_Data.size(); ++i){
out << m_DataBelong[i] << << m_Distance[i] << endl;
for (size_t j = 0; j < m_Data[i].size(); ++j){
out << m_Data[i][j] << ;
}
out << endl << endl;
}
return out;
}
void Kmean::setCenterCount(const size_t count)
{
m_Center.resize(count);
m_DataBelongCount.resize(count);
}
size_t Kmean::getCenterCount() const
{
return m_Center.size();
}
void Kmean::clustering(size_t times, double maxE)
{
srand((unsigned int)time(NULL));
//随机从m_Data中选取m_Center.size()个不同的样本点作为初始中心。
size_t *pos = new size_t[m_Data.size()];
size_t i, j, t;
for (i = 0; i < m_Data.size(); ++i){
pos[i] = i;
}
for (i = 0; i < (m_Data.size() << 1); ++i){
size_t s1 = rand() % m_Data.size();
size_t s2 = rand() % m_Data.size();
swap(pos[s1], pos[s2]);
}
for (i = 0; i < m_Center.size(); ++i){
m_Center[i].resize(m_Data[pos[i]].size());
for (j = 0; j < m_Data[pos[i]].size(); ++j){
m_Center[i][j] = m_Data[pos[i]][j];
}
}
delete []pos;
double currE, lastE;
for (t = 0; t < times; ++t){
for (i = 0; i < m_Distance.size(); ++i)
m_Distance[i] = LONG_MAX;
for (i = 0; i < m_DataBelongCount.size(); ++i)
m_DataBelongCount[i] = 0;
currE = 0.0;
for (i = 0; i < m_Data.size(); ++i){
for (j = 0; j < m_Center.size(); ++j){
double dis = calDistance(m_Data[i], m_Center[j]);
if (dis < m_Distance[i]){
m_Distance[i] = dis;
m_DataBelong[i] = j;
}
}
currE += m_Distance[i];
m_DataBelongCount[m_DataBelong[i]]++;
}
cout << currE << endl;
if (t == 0 || fabs(currE - lastE) > maxE)
lastE = currE;
else
break;
for (i = 0; i < m_Center.size(); ++i){
for (j = 0; j < m_Center[i].size(); ++j)
m_Center[i][j] = 0.0;
}
for (i = 0; i < m_DataBelong.size(); ++i){
for (j = 0; j < m_Data[i].size(); ++j){
m_Center[m_DataBelong[i]][j] += m_Data[i][j] / m_DataBelongCount[m_DataBelong[i]];
}
}
}
}
double Kmean::calDistance(vector<double>& v1, vector<double>& v2)
{
double result = 0.0;
for (size_t i = 0; i < v1.size(); ++i){
result += (v1[i] - v2[i]) * (v1[i] - v2[i]);
}
return pow(result, 1.0 / v1.size());
//return sqrt(result);
}
}
#include <iostream>
#include <fstream>
#include "kmean.h"
using namespace std;
using namespace CS_LIB;
int main()
{
ifstream in("in.txt");
ofstream out("out.txt");
Kmean kmean;
kmean.loadData(in);
kmean.setCenterCount(4);
kmean.clustering(1000, 0.000001);
kmean.saveData(out);
return 0;
}