- 浏览: 535853 次
- 性别:
- 来自: 山东济南
-
文章分类
最新评论
-
dragon_8844:
非常不错,nice
java.util.concurrent 多线程框架 -
wusendong:
很好的文章!受益匪浅,谢谢!
java.util.concurrent 多线程框架 -
SINCE1978:
你也关注并发啊
java.util.concurrent 多线程框架 -
lku1314:
这个不错 刚刚找到这个组建 以前孤陋寡闻了 像lz学习!标 ...
quartz 在WEB中应用小结 -
lliiqiang:
人们对于目标需要的需求明确的去做,对于目标以外的因素是随机的执 ...
flex和后端的数据交互(一)--XML和HTTPService
ClusterMain.java
package eu.eodigos.kmean; import java.util.Iterator; import java.util.List; import java.util.Vector; import eu.eodigos.hibernate.bean.ClusterInput; import eu.eodigos.hibernate.server.AccessDBServer; import eu.eodigos.hibernate.server.AccessDBServerImp; /** * @author daoger * @version 1.0 * @k-mean Cluster */ public class ClusterMain { public static void main(String[] args) { ClusterMain clusterMain = new ClusterMain(); clusterMain.clusterByDatabase(); } /** * Test with manual data */ public void test() { Vector<DataPoint> dataPoints = new Vector<DataPoint>(); dataPoints.add(new DataPoint(0.12, 0.21, 0.26, 0.45, 0.67, 0.23, 0.11, new Integer(1))); dataPoints.add(new DataPoint(0.22, 0.23, 0.46, 0.11, 0.63, 0.11, 0.12, new Integer(2))); dataPoints.add(new DataPoint(0.32, 0.34, 0.78, 0.17, 0.68, 0.67, 0.13, new Integer(3))); dataPoints.add(new DataPoint(0.42, 0.45, 0.26, 0.42, 0.48, 0.39, 0.14, new Integer(4))); dataPoints.add(new DataPoint(0.52, 0.29, 0.65, 0.59, 0.16, 0.74, 0.15, new Integer(5))); dataPoints.add(new DataPoint(0.62, 0.25, 0.48, 0.61, 0.27, 0.16, 0.67, new Integer(6))); dataPoints.add(new DataPoint(0.72, 0.35, 0.39, 0.20, 0.65, 0.26, 0.17, new Integer(7))); dataPoints.add(new DataPoint(0.82, 0.20, 0.16, 0.29, 0.32, 0.61, 0.18, new Integer(8))); dataPoints.add(new DataPoint(0.92, 0.71, 0.26, 0.37, 0.17, 0.81, 0.19, new Integer(9))); dataPoints.add(new DataPoint(0.13, 0.39, 0.17, 0.41, 0.47, 0.37, 0.10, new Integer(10))); dataPoints.add(new DataPoint(0.14, 0.23, 0.47, 0.93, 0.68, 0.28, 0.29, new Integer(11))); dataPoints.add(new DataPoint(0.15, 0.57, 0.84, 0.19, 0.15, 0.39, 0.39, new Integer(12))); dataPoints.add(new DataPoint(0.16, 0.19, 0.45, 0.38, 0.36, 0.82, 0.49, new Integer(13))); dataPoints.add(new DataPoint(0.17, 0.89, 0.29, 0.39, 0.82, 0.58, 0.59, new Integer(14))); // divide all user to 7 cluster // 10000 stand for precision,the bigger of this value the more accuratly ClusterAssistant clusterAssistant = new ClusterAssistant(3, 10000, dataPoints); clusterAssistant.startAnalysis(); Vector[] v = clusterAssistant.getClusterOutput(); for (int i = 0; i < v.length; i++) { Vector tempV = v[i]; System.out.println("-----------Cluster" + i + "---------"); Iterator iter = tempV.iterator(); while (iter.hasNext()) { DataPoint dpTemp = (DataPoint) iter.next(); String dps = "userid_" + dpTemp.getUserid() + "[" + dpTemp.getAvg1() + "," + dpTemp.getAvg2() + dpTemp.getAvg3() + "," + dpTemp.getAvg4() + "," + dpTemp.getAvg5() + "," + dpTemp.getAvg6() + "," + dpTemp.getAvg7() + "]"; System.out.println(dps); } } } /** * get data from database and calaulate */ public void clusterByDatabase() { AccessDBServer access = new AccessDBServerImp(); Vector<DataPoint> dataPoints = new Vector<DataPoint>(); List clusterList = access.getAllClusterInputData(); for (Iterator iter = clusterList.iterator(); iter.hasNext();) { ClusterInput clusterInput = (ClusterInput) iter.next(); if (clusterInput != null) { dataPoints.add(new DataPoint(clusterInput.getAvgArch(), clusterInput.getAvgMon(), clusterInput .getAvgMus(), clusterInput.getAvgBuil(), clusterInput.getAvgChap(), clusterInput.getAvgBeach(), clusterInput.getAvgWalk(), clusterInput.getClusterId())); } } // divide all user to 7 cluster // 10000 stand for precision,the bigger of this value the more accuratly ClusterAssistant clusterAssistant = new ClusterAssistant(7, 10000, dataPoints); clusterAssistant.startAnalysis(); Vector[] v = clusterAssistant.getClusterOutput(); for (int i = 0; i < v.length; i++) { Vector tempV = v[i]; Iterator iter = tempV.iterator(); while (iter.hasNext()) { DataPoint dpTemp = (DataPoint) iter.next(); access.updateClusterCateOfUsers(dpTemp.getUserid(), new Integer(i + 1)); } } } }
ClusterAssistant.java
package eu.eodigos.kmean; import java.util.Vector; /** * @author daoger * @version 1.0 * @k-mean Cluster */ public class ClusterAssistant { private Cluster[] clusters; private int miter; private Vector mDataPoints = new Vector(); private double mSWCSS; public ClusterAssistant(int k, int iter, Vector dataPoints) { clusters = new Cluster[k]; for (int i = 0; i < k; i++) { clusters[i] = new Cluster("Cluster" + i); } this.miter = iter; this.mDataPoints = dataPoints; } private void calcSWCSS() { double temp = 0; for (int i = 0; i < clusters.length; i++) { temp = temp + clusters[i].getSumSqr(); } mSWCSS = temp; } public void startAnalysis() { setInitialCentroids(); int n = 0; loop1: while (true) { for (int l = 0; l < clusters.length; l++) { clusters[l].addDataPoint((DataPoint) mDataPoints.elementAt(n)); n++; if (n >= mDataPoints.size()) break loop1; } } calcSWCSS(); for (int i = 0; i < clusters.length; i++) { clusters[i].getCentroid().calcCentroid(); } calcSWCSS(); for (int i = 0; i < miter; i++) { for (int j = 0; j < clusters.length; j++) { for (int k = 0; k < clusters[j].getNumDataPoints(); k++) { double tempEuDt = clusters[j].getDataPoint(k).getCurrentEuDt(); Cluster tempCluster = null; boolean matchFoundFlag = false; for (int l = 0; l < clusters.length; l++) { if (tempEuDt > clusters[j].getDataPoint(k).testEuclideanDistance(clusters[l].getCentroid())) { tempEuDt = clusters[j].getDataPoint(k).testEuclideanDistance(clusters[l].getCentroid()); tempCluster = clusters[l]; matchFoundFlag = true; } } if (matchFoundFlag) { tempCluster.addDataPoint(clusters[j].getDataPoint(k)); clusters[j].removeDataPoint(clusters[j].getDataPoint(k)); for (int m = 0; m < clusters.length; m++) { clusters[m].getCentroid().calcCentroid(); } calcSWCSS(); } } } } } public Vector[] getClusterOutput() { Vector v[] = new Vector[clusters.length]; for (int i = 0; i < clusters.length; i++) { v[i] = clusters[i].getDataPoints(); } return v; } private void setInitialCentroids() { // kn = (round((max-min)/k)*n)+min where n is from 0 to (k-1). double[] c = new double[7]; for (int n = 1; n <= clusters.length; n++) { for (int i = 1; i < 8; i++) { c[i - 1] = (((getMaxXValue(i) - getMinXValue(i)) / (clusters.length + 1)) * n) + getMinXValue(i); } Centroid ce = new Centroid(c[0], c[1], c[2], c[3], c[4], c[5], c[6]); clusters[n - 1].setCentroid(ce); ce.setCluster(clusters[n - 1]); } } private double getMaxXValue(int avgnumber) { double temp = 0.0; switch (avgnumber) { case 1:// Archeological temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg1(); break; case 2:// Monuments temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg2(); break; case 3:// Museums temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg3(); break; case 4:// Buildings temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg4(); break; case 5:// Chapels temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg5(); break; case 6:// Beaches temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg6(); break; case 7:// Walking temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg7(); break; } for (int i = 0; i < mDataPoints.size(); i++) { DataPoint dp = (DataPoint) mDataPoints.elementAt(i); switch (avgnumber) { case 1:// Archeological temp = (dp.getAvg1() > temp) ? dp.getAvg1() : temp; break; case 2:// Monuments temp = (dp.getAvg2() > temp) ? dp.getAvg2() : temp; break; case 3:// Museums temp = (dp.getAvg3() > temp) ? dp.getAvg3() : temp; break; case 4:// Buildings temp = (dp.getAvg4() > temp) ? dp.getAvg4() : temp; break; case 5:// Chapels temp = (dp.getAvg5() > temp) ? dp.getAvg5() : temp; break; case 6:// Beaches temp = (dp.getAvg6() > temp) ? dp.getAvg6() : temp; break; case 7:// Walking temp = (dp.getAvg7() > temp) ? dp.getAvg7() : temp; break; } } return temp; } private double getMinXValue(int avgnumber) { double temp = 0.0; switch (avgnumber) { case 1:// Archeological temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg1(); break; case 2:// Monuments temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg2(); break; case 3:// Museums temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg3(); break; case 4:// Buildings temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg4(); break; case 5:// Chapels temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg5(); break; case 6:// Beaches temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg6(); break; case 7:// Walking temp = ((DataPoint) mDataPoints.elementAt(0)).getAvg7(); break; } for (int i = 0; i < mDataPoints.size(); i++) { DataPoint dp = (DataPoint) mDataPoints.elementAt(i); switch (avgnumber) { case 1:// Archeological temp = (dp.getAvg1() < temp) ? dp.getAvg1() : temp; break; case 2:// Monuments temp = (dp.getAvg2() < temp) ? dp.getAvg2() : temp; break; case 3:// Museums temp = (dp.getAvg3() < temp) ? dp.getAvg3() : temp; break; case 4:// Buildings temp = (dp.getAvg4() < temp) ? dp.getAvg4() : temp; break; case 5:// Chapels temp = (dp.getAvg5() < temp) ? dp.getAvg5() : temp; break; case 6:// Beaches temp = (dp.getAvg6() < temp) ? dp.getAvg6() : temp; break; case 7:// Walking temp = (dp.getAvg7() < temp) ? dp.getAvg7() : temp; break; } } return temp; } public int getKValue() { return clusters.length; } public int getIterations() { return miter; } public int getTotalDataPoints() { return mDataPoints.size(); } public double getSWCSS() { return mSWCSS; } public Cluster getCluster(int pos) { return clusters[pos]; } }
Centroid.java
package eu.eodigos.kmean; /** * @author daoger * @version 1.0 * @k-mean Cluster */ class Centroid { private double avgC1, avgC2, avgC3, avgC4, avgC5, avgC6, avgC7; private Cluster mCluster; public Centroid(double ac1, double ac2, double ac3, double ac4, double ac5, double ac6, double ac7) { this.avgC1 = ac1; this.avgC2 = ac2; this.avgC3 = ac3; this.avgC4 = ac4; this.avgC5 = ac5; this.avgC6 = ac6; this.avgC7 = ac7; } public void calcCentroid() { // only called by CAInstance int numDP = mCluster.getNumDataPoints(); double temp1 = 0, temp2 = 0, temp3 = 0, temp4 = 0, temp5 = 0, temp6 = 0, temp7 = 0; int i; // caluclating the new Centroid for (i = 0; i < numDP; i++) { temp1 = temp1 + mCluster.getDataPoint(i).getAvg1(); // total for avg1 temp2 = temp2 + mCluster.getDataPoint(i).getAvg2(); // total for avg1 temp3 = temp3 + mCluster.getDataPoint(i).getAvg3(); // total for avg1 temp4 = temp4 + mCluster.getDataPoint(i).getAvg4(); // total for avg1 temp5 = temp5 + mCluster.getDataPoint(i).getAvg5(); // total for avg1 temp6 = temp6 + mCluster.getDataPoint(i).getAvg6(); // total for avg1 temp7 = temp7 + mCluster.getDataPoint(i).getAvg7(); // total for avg1 } this.avgC1 = temp1 / numDP; this.avgC2 = temp2 / numDP; this.avgC3 = temp3 / numDP; this.avgC4 = temp4 / numDP; this.avgC5 = temp5 / numDP; this.avgC6 = temp6 / numDP; this.avgC7 = temp7 / numDP; // calculating the new Euclidean Distance for each Data Point temp1 = 0; temp2 = 0; temp3 = 0; temp4 = 0; temp5 = 0; temp6 = 0; temp7 = 0; for (i = 0; i < numDP; i++) { mCluster.getDataPoint(i).calcEuclideanDistance(); } // calculate the new Sum of Squares for the Cluster mCluster.calcSumOfSquares(); } public void setCluster(Cluster c) { this.mCluster = c; } public double getAvgC1() { return avgC1; } public void setAvgC1(double avgC1) { this.avgC1 = avgC1; } public double getAvgC2() { return avgC2; } public void setAvgC2(double avgC2) { this.avgC2 = avgC2; } public double getAvgC3() { return avgC3; } public void setAvgC3(double avgC3) { this.avgC3 = avgC3; } public double getAvgC4() { return avgC4; } public void setAvgC4(double avgC4) { this.avgC4 = avgC4; } public double getAvgC5() { return avgC5; } public void setAvgC5(double avgC5) { this.avgC5 = avgC5; } public double getAvgC6() { return avgC6; } public void setAvgC6(double avgC6) { this.avgC6 = avgC6; } public double getAvgC7() { return avgC7; } public void setAvgC7(double avgC7) { this.avgC7 = avgC7; } public Cluster getCluster() { return mCluster; } }
Cluster.java
package eu.eodigos.kmean; import java.util.Vector; /** * @author daoger * @version 1.0 * @k-mean Cluster */ class Cluster { private String mName; private Centroid mCentroid; private double mSumSqr; private Vector<DataPoint> mDataPoints; public Cluster(String name) { this.mName = name; this.mCentroid = null; // will be set by calling setCentroid() mDataPoints = new Vector<DataPoint>(); } public void setCentroid(Centroid c) { mCentroid = c; } public Centroid getCentroid() { return mCentroid; } public void addDataPoint(DataPoint dp) { // called from CAInstance dp.setCluster(this); // initiates a inner call to calcEuclideanDistance() in DP. this.mDataPoints.addElement(dp); calcSumOfSquares(); } public void removeDataPoint(DataPoint dp) { this.mDataPoints.removeElement(dp); calcSumOfSquares(); } public int getNumDataPoints() { return this.mDataPoints.size(); } public DataPoint getDataPoint(int pos) { return (DataPoint) this.mDataPoints.elementAt(pos); } public void calcSumOfSquares() { // called from Centroid int size = this.mDataPoints.size(); double temp = 0; for (int i = 0; i < size; i++) { temp = temp + ((DataPoint) this.mDataPoints.elementAt(i)).getCurrentEuDt(); } this.mSumSqr = temp; } public double getSumSqr() { return this.mSumSqr; } public String getName() { return this.mName; } public Vector getDataPoints() { return this.mDataPoints; } }
DataPoint.java
package eu.eodigos.kmean; /** * @author daoger * @version 1.0 * @k-mean Cluster */ public class DataPoint { private double avg1, avg2, avg3, avg4, avg5, avg6, avg7; private Integer userid; private Cluster mCluster; private double mEuDt; public DataPoint(double avg1, double avg2, double avg3, double avg4, double avg5, double avg6, double avg7, Integer userid) { this.avg1 = avg1; this.avg2 = avg2; this.avg3 = avg3; this.avg4 = avg4; this.avg5 = avg5; this.avg6 = avg6; this.avg7 = avg7; this.userid = userid; this.mCluster = null; } public void setCluster(Cluster cluster) { this.mCluster = cluster; calcEuclideanDistance(); } public void calcEuclideanDistance() { // called when DP is added to a cluster or when a Centroid is // recalculated. mEuDt = Math.sqrt(Math.pow((avg1 - mCluster.getCentroid().getAvgC1()), 2) + Math.pow((avg2 - mCluster.getCentroid().getAvgC2()), 2) + Math.pow((avg3 - mCluster.getCentroid().getAvgC3()), 2) + Math.pow((avg4 - mCluster.getCentroid().getAvgC4()), 2) + Math.pow((avg5 - mCluster.getCentroid().getAvgC5()), 2) + Math.pow((avg6 - mCluster.getCentroid().getAvgC6()), 2) + Math.pow((avg7 - mCluster.getCentroid().getAvgC7()), 2)); } public double testEuclideanDistance(Centroid c) { return Math.sqrt(Math.pow((avg1 - c.getAvgC1()), 2) + Math.pow((avg2 - c.getAvgC2()), 2) + Math.pow((avg3 - c.getAvgC3()), 2) + Math.pow((avg4 - c.getAvgC4()), 2) + Math.pow((avg5 - c.getAvgC5()), 2) + Math.pow((avg6 - c.getAvgC6()), 2) + Math.pow((avg7 - c.getAvgC7()), 2)); } public double getAvg1() { return avg1; } public void setAvg1(double avg1) { this.avg1 = avg1; } public double getAvg2() { return avg2; } public void setAvg2(double avg2) { this.avg2 = avg2; } public double getAvg3() { return avg3; } public void setAvg3(double avg3) { this.avg3 = avg3; } public double getAvg4() { return avg4; } public void setAvg4(double avg4) { this.avg4 = avg4; } public double getAvg5() { return avg5; } public void setAvg5(double avg5) { this.avg5 = avg5; } public double getAvg6() { return avg6; } public void setAvg6(double avg6) { this.avg6 = avg6; } public double getAvg7() { return avg7; } public void setAvg7(double avg7) { this.avg7 = avg7; } public Cluster getCluster() { return mCluster; } public double getCurrentEuDt() { return mEuDt; } /** * @return the userid */ public Integer getUserid() { return userid; } /** * @param userid * the userid to set */ public void setUserid(Integer userid) { this.userid = userid; } }
发表评论
-
ubuntu14.04下编译安装Tora
2015-08-11 16:19 1254需预先安装oracle客户端;以下类库,有的可能需要提前安 ... -
ubuntu14.04下oracle客户端最小化安装
2015-08-11 16:04 1092在Oracle官网下载Oracle Instant Clien ... -
ubuntu14.04下编译安装QT
2015-08-11 16:03 15421. 首先配置一些编译Qt ... -
55种开源可视化数据分析工具
2015-07-22 14:50 0http://mp.weixin.qq.com/s?__bi ... -
响应式设计理念
2013-09-29 10:00 0概念 响应式Web设计(Responsive Web desi ... -
Liferay 使用随笔
2010-04-19 14:18 01.如何根据权限去除每一个portlet中右上角的选项。 关于 ... -
Liferay中ajax应用用户session超时
2010-03-26 09:31 3960基于Liferay Portal开发ajax应用时,如果长时间 ... -
Liferay portlet实例化配置
2009-11-10 09:06 4400在默认的情况下,一个p ... -
带checkbox的dhtmlxtree菜单树异步加载时的问题解决
2009-10-24 11:27 6013最近一直很忙,自己负责几个模块的设计开发,还有和其他服务接口的 ... -
JS代码示例
2009-10-21 14:23 23001.数组操作时的push var a = [],b = [ ... -
dhtmlxtree异步加载时的一个bug修正
2009-09-15 10:00 3824前面已经对dhtmlx的东西有所介绍,使用中也发现了不少bug ... -
WEB Page to PDF
2009-06-17 11:10 2581现在有很多网页页面转换成PDF文档的支持项目,我使用的是pd4 ... -
Liferay中使用dhtmlxlayout在IE下的问题
2009-06-12 13:43 2120Liferay 中使用dhemtlx系列UI的时候,dhtml ... -
Liferay相关配置
2009-06-10 13:35 1287修改liferay中portlet的加载目录 前面 ... -
Spring JDBC对Oracle10g数据库操作时RowSet的问题
2009-05-19 08:56 3505使用Spring JDBC对Oracle10g进行数据库分页的 ... -
Dynamic Tables In JavaScript for IE and Firefox
2009-05-06 14:03 1734http://www.sweetvision.com/2007 ... -
liferay中对struts桥接处理后的response
2009-04-18 14:29 1859对于在liferay开发平台中 ... -
liferay开发小记---Struts,Spring,Hibernate架构
2009-04-07 11:11 6310liferay有自己的struts和spring扩展,有兴趣的 ... -
liferay开发小记---portlet文件构造
2009-04-03 17:09 3340书接上回,说说portlet的开发,每一个portlet就是对 ... -
liferay开发小记---开发环境的搭建
2009-04-02 13:42 3827用惯了MyEclipse,我的环境也是在它上面搭建的,试用过M ...
相关推荐
Theissueofparametersettingofanalgorithmisoneofthemostpromisingareasofresearch.Particle SwarmOptimization(PSO)ispopulationbasedmethod.Theperformance...
3.4 The Weighted Fuzzy K-Mean (WFKM) Algorithm 3.5 The Clustering Validity Criteria 4. Examples of Uses 4.1 Sleep-Stage Scoring 4.2 Forecasting Epilepsy 4.3 Classifying Evoked and Event-...
- **8.4–2 An Overdetermined Set**: This example demonstrates the application of the least-squares method to overdetermined sets, a common scenario in data analysis and signal processing. #### ...
In our example, if one transaction (T1) holds an exclusive lock at the table level, and another transaction (T2) holds an exclusive lock at the row level, each of the transactions believe they have ...
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82
Android逆向过程学习
内容概要:本文详细介绍了基于西门子S7-200 PLC的糖果包装控制系统的设计与实现。首先阐述了PLC在工业自动化领域的优势及其在糖果包装生产线中的重要性。接着深入探讨了系统的硬件连接方式,包括传感器、执行机构与PLC的具体接口配置。随后展示了关键的编程实现部分,如糖果计数、包装执行、送膜控制、称重判断以及热封温度控制等具体梯形图代码片段。此外,还分享了一些实用的经验技巧,如防止信号抖动、PID参数优化、故障诊断方法等。最后总结了该系统的优势,强调其对提高生产效率和产品质量的重要作用。 适合人群:从事工业自动化控制、PLC编程的技术人员,尤其是对小型PLC系统感兴趣的工程师。 使用场景及目标:适用于糖果制造企业,旨在提升包装生产线的自动化程度,确保高效稳定的生产过程,同时降低维护成本并提高产品一致性。 其他说明:文中不仅提供了详细的理论讲解和技术指导,还结合实际案例进行了经验分享,有助于读者更好地理解和掌握相关知识。
内容概要:本文详细介绍了参与西门子杯比赛中关于三部十层电梯系统的博图V15.1程序设计及其WinCC画面展示的内容。文中不仅展示了电梯系统的基本架构,如抢单逻辑、方向决策、状态机管理等核心算法(采用SCL语言编写),还分享了许多实际调试过程中遇到的问题及解决方案,例如未初始化变量导致的异常行为、状态机遗漏空闲状态、WinCC画面动态显示的挑战以及通信配置中的ASCII码解析错误等问题。此外,作者还特别提到一些创意性的设计,如电梯同时到达同一层时楼层显示器变为闪烁爱心的效果,以及节能模式下电梯自动停靠中间楼层的功能。 适合人群:对PLC编程、工业自动化控制、电梯调度算法感兴趣的工程技术人员,尤其是准备参加类似竞赛的学生和技术爱好者。 使用场景及目标:适用于希望深入了解PLC编程实践、掌握电梯群控系统的设计思路和技术要点的人士。通过学习本文可以更好地理解如何利用PLC进行复杂的机电一体化项目的开发,提高解决实际问题的能力。 其他说明:文章风格幽默诙谐,将严肃的技术话题融入轻松的生活化比喻之中,使得原本枯燥的专业知识变得生动有趣。同时,文中提供的经验教训对于从事相关领域的工作者来说非常宝贵,能够帮助他们少走弯路并激发更多创新思维。
慧荣量产工具合集.zip
内容概要:本文详细介绍了永磁同步电机(PMSM)的FOC(磁场定向控制)和SVPWM(空间矢量脉宽调制)算法的仿真模型。首先解释了FOC的基本原理及其核心的坐标变换(Clark变换和Park变换),并给出了相应的Python代码实现。接下来探讨了SVPWM算法的工作机制,包括扇区判断和占空比计算的方法。此外,文章还讨论了电机的PI双闭环控制结构,即速度环和电流环的设计与实现。文中不仅提供了详细的理论背景,还分享了一些实用的编程技巧和注意事项,帮助读者更好地理解和应用这些算法。 适合人群:电气工程专业学生、从事电机控制系统开发的技术人员以及对永磁同步电机控制感兴趣的科研人员。 使用场景及目标:① 学习和掌握永磁同步电机的FOC控制和SVPWM算法的具体实现;② 提供丰富的代码示例和实践经验,便于快速搭建和调试仿真模型;③ 探讨不同参数设置对电机性能的影响,提高系统的稳定性和效率。 其他说明:文章强调了在实际应用中需要注意的一些细节问题,如坐标变换中的系数选择、SVPWM算法中的扇区判断优化以及PI控制器的参数调整等。同时,鼓励读者通过动手实验来加深对各个模块的理解。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
Android逆向过程学习
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
3dmax插件
# 【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip,java,spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-vector-store-qdrant,1.0.0-M7,org.springframework.ai.vectorstore.qdr
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文详细介绍了平方根容积卡尔曼滤波(SRCKF)在永磁同步电机(PMSM)控制系统中的应用及其相对于传统CKF的优势。文章首先指出传统CKF在处理协方差矩阵时存在的数值不稳定性和非正定问题,导致系统性能下降。接着,作者通过引入SRCKF,利用Cholesky分解和QR分解来确保协方差矩阵的正定性,从而提高状态估计的精度和稳定性。文中展示了具体的电机模型和状态方程,并提供了详细的代码实现,包括状态预测、容积点生成以及观测更新等关键步骤。此外,文章还分享了实际调试过程中遇到的问题及解决方案,如选择合适的矩阵分解库和处理电机参数敏感性。最终,通过实验数据对比,证明了SRCKF在突加负载情况下的优越表现。 适合人群:从事永磁同步电机控制研究的技术人员、研究生及以上学历的研究者。 使用场景及目标:适用于需要高精度状态估计的永磁同步电机控制系统的设计与优化,特别是在处理非线性问题和提高数值稳定性方面。 其他说明:文章引用了相关领域的权威文献,如Arasaratnam的TAC论文和Zhong的《PMSM无传感器控制综述》,并强调了实际工程实践中代码调试的重要性。
# 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu
3