FCM的MATLAB实现

合集下载

基于FCM聚类和漏失模拟的给水管网压力监测点布设

基于FCM聚类和漏失模拟的给水管网压力监测点布设

第40卷 第6期Vol.40 No.6徐志强基于FCM聚类和漏失模拟的给水管网压力监测点布设徐志强,刘崎峰 ,刘佳峰,单黎明,裴文思(内蒙古大学生态与环境学院,内蒙古呼和浩特010021)收稿日期:2021-01-25;修回日期:2021-03-21;网络出版时间:2022-06-07网络出版地址:https://kns.cnki.net/kcms/detail/32.1814.TH.20220606.1611.020.html基金项目:内蒙古自治区成果转化引导项目(CGZH2018095)第一作者简介:徐志强(1993—),男,河北承德人,硕士研究生(1394643287@qq.com.),主要从事智慧水务及管网漏失控制研究.通信作者简介:刘崎峰(1978—),男,内蒙古呼和浩特人,教授,博士生导师(ndlqf@imu.edu.cn),主要从事智慧水务及管网漏失控制、水污染控制技术研究.摘要:为了提高对供水管网压力监测的可靠性,以北方某城镇供水独立计量分区为模拟研究对象,提出一种结合模糊C均值(FuzzyC-Means,FCM)聚类和对模拟漏失事件感知数量最大化的给水管网压力监测点优化布设方法.首先,基于水量变化的节点压力敏感系数矩阵,利用FCM聚类算法对管网节点进行聚类,在各子类中预选出备选压力监测点;然后,随机模拟可能发生的漏失事件测试符合条件的不同优化组合的备选监测点对漏失事件引起压力变化的感知情况,确定优化的监测点布设方案.案例研究结果表明,该方法确定的压力监测点布设方案能够在保证至少2个监测点感知到同一个漏失事件的前提下,以最少3个监测点感知到96.36%以上的漏失事件.该方法在提高监测可靠性的同时可以节约监测点布设成本.关键词:压力监测点;优化布设;模糊C均值聚类;漏失模拟;给水管网中图分类号:TU991 文献标志码:A 文章编号:1674-8530(2022)06-0642-07Doi:10.3969/j.issn.1674-8530.21.0017 徐志强,刘崎峰,刘佳峰,等.基于FCM聚类和漏失模拟的给水管网压力监测点布设[J].灌溉机械工程学报,2022,40(6):642-648. XUZhiqiang,LIUQifeng,LIUJiafeng,etal.OptimizedlayoutofpressuremonitoringpointsinwatersupplynetworkbasedonFCMclusteringandleakageeventssimulation[J].Journalofdrainageandirrigationmachineryengineering,2022,40(6):642-648.(inChinese)OptimizedlayoutofpressuremonitoringpointsinwatersupplynetworkbasedonFCMclusteringandleakageeventssimulationXUZhiqiang,LIUQifeng,LIUJiafeng,SHANLiming,PEIWensi(CollegeofEcologyandEnvironment,InnerMongoliaUniversity,Hohhot,InnerMongolia010021,China)Abstract:Inordertoimprovethereliabilityofpressuremonitoringpointsinthewatersupplynetwork,alayoutmethodofpressuremonitoringpointscombiningfuzzyC-means(FCM)clusteringwiththemaximumperceivednumberofleakageeventswasproposedbasedonaDistrictMeteredArea(DMA)inatowninnorthernChina.Firstly,theFCMalgorithmwasusedtoclusterallnodesbasedonthenodespressuresensitivitycoefficientmatrixofwaterquantitychangeinthepipenetwork,andthealter nativepressuremonitoringpointsineachsubclasswerepreselected.Then,thepossibleleakageeventsweresimulatedrandomlytotesttheperceptionofthealternativemonitoringpointswithdifferentopti mizedcombinationsforthepressurechangescausedbytheleakageevents,andtheoptimalmonitoringpoints′layoutschemewasdetermined.Thesimulationresultsofthiscaseshowthatmorethan96.36%oftheleakagesweredetectedwithatleastthreemonitoringpointsonthepremiseensuringthatatleasttwomonitoringpointscanperceivethesameleakageevent.Thismethodcanimprovethemonitoringreliabilityandatthesametimesavethecost.Keywords:pressuremonitoringpoints;optimizedlayout;fuzzyC-meansclustering;leakagesimulation;watersupplynetwork 随着“智慧水务”的发展,给水管网中压力和流量数据能被实时采集和传送,但在复杂管网中对所有节点和管段进行监控是不现实的.对压力监测点优化布设可以在帮助供水机构节约投资的同时实时掌控管网运行状态、提升服务质量,对应对水资源短缺问题也具有重要意义[1-4].在工程中对压力监测点布设主要通过经验选择和理论计算分析实现.经验法一般依据地形和用户性质在管网最不利末端、给水边界处、地形高差变化急剧以及需水大用户等重要位置设置监测点,用于监测指导管网的运行调度.但不足在于其位置由工程师人为指定、合理性和准确性差,这种过度依赖设计人员经验的方法也会使工程投资较大[5-7].理论计算分析法是基于管网拓扑学,依靠数学分析及水力模型在建立监测点间的数学关系和水力联系的前提下对监测点进行优化.方潜生等[4]以节点坐标、影响度和压力标准差构建节点特征矩阵,对节点进行聚类分析,优化布设压力监测点.梁建文等[8]以局部漏损对压力的影响度为目标来实现压力监测点的优化布置,选出灵敏度高的监测点,实现了对给水管网健康状态的监测.张宏伟等[9]通过建立管网节点压力的灵敏度矩阵和方程,利用灵敏度分析法解决压力监测点的布设选址问题,该方法建立了监测点间的水力联系和数学联系.刘书明等[10]通过建立反映管网节点水量和压力变化的节点覆盖水量和相关水压的多目标优化算法,对管网压力监测点进行选择,结果表明,监测点数量占总节点数的0.3%时就可以覆盖45%以上的管网节点.金溪等[11]采用遗传算法求解测压点优化布置模型,实现压力监测点的自动优化布置,并利用5个监测点对管网运行压力进行实时监测分析.此外,刘倍良[12]以漏失定位为目的,利用水力模型结合压力驱动节点流量的漏失定位方法对某给水管网分区的压力监测点进行了优化布设,选出对爆管漏失感知灵敏度高的节点进行监测.SOROUSH等[13]将地理位置统计和遗传优化结合,通过求解地理位置目标函数对压力监测点进行优化,保证监测点的分布更加均匀.RAYAROTH等[14]运用一种基于随机决策树分类器的混合蛙跳优化技术对监测点的压力数据优化,选取出对异常压力检测精度高的节点作为监测点.目前,对于监测点优化的研究都是在寻找区域内受水量摄动压力变化敏感性强、能够代表临近区域内水压情况的节点作为监测点,但在布设过程中对不同位置的监测点对漏失事故的感知情况考虑较少,用1个监测点对相应区域监测时,压力波动以及监测设备的测量误差和稳定性问题会影响监测的可靠性.为此文中以某给水DMA管网为研究对象,结合FCM聚类和水力模型产生的漏失事件对监测点进行优化,在保证1个漏失事件至少同时被2个监测点感知到的前提下确定可靠性和经济性较好的监测点布设方案.1 研究案例概况案例研究对象为内蒙古某旗县供水管网中的一个给水DMA,该区域是在2008年开发建设并逐渐入住的综合商业住宅区,有1763户常住居民以及幼儿园、宾馆、餐饮饭店、银行、电玩城、物流快递、五金加工、汽修汽配和汽贸租赁公司等营业性网点723家.服务区域地势西高东低,地面标高在1341.0~1372.4m.管网结构呈东西走向的矩形分布,平均埋深约为2m,有节点379个,管道385段为2016—2017年铺设的管径DN63到DN300不等的PE管,服务面积约0.3km2,共有需水用户2645户.经过精简优化后保留节点132个,给水干管长度约6.5km,平均供水流量为6.02L/s,其中最大供水流量为9.03L/s,最小供水流量为3.62L/s,利用Epanet软件建立该区域的管网水力模型并结合MATLAB计算平台进行研究分析.2 监测点优化布设分析2.1 对管网节点聚类划分通过聚类将水力变化性质相近的节点划分为一类,然后再逐类进行分析选取代表监测点,具体聚类步骤如下:①在正常情况下对管网模型进行水力模拟,计算各节点的水压值H0={H01,H02,H03,…,H0132},H0i为正常情况下节点i的压力值;②在第j643个节点中增加部分水量作为漏失流量,进行水力模拟,计算假设j节点漏失后各节点的压力值H1j={H1j,1,H1j,2,H1j,3,…,H1j,132},H1j,i为添加漏失流量后节点i的压力值;③计算各节点的压力变化值△H={H01-H1j,1,H02-H1j,2,H03-H1j,3,…,H0132-H1j,132},H0i-H1j,i为j点发生漏失后i点的压力变化值;④计算节点j漏失对节点i压力变化的影响系数X(i,j)=△H/(H0j-H1j);⑤清除添加给j节点的漏失水量,选择下一节点,重复上述②-④步骤,直到遍历全部的132个节点,得到管网节点的压力影响系数特征矩阵X为X=H01-H11,1H01-H11H02-H11,2H01-H11…H0132-H11,132H01-H11H01-H12,1H02-H12H02-H12,2H02-H12…H0132-H12,132H02-H12H01-H1132,1H0132-H1132H02-H1132,2H0132-H1132…H0132-H1132,132H0132-H1132.(1)由相关研究可知,当监测点数量占总节点数0.3%时,即可监测到45%以上的节点,且一般要求监测范围覆盖80%以上的管网节点和水量[10,15].本研究区域管网节点总数为132,结合实际供水服务面积情况,理论上设置6个备选监测点即可达到监控整个管网要求.因此,初步设置6个监测点,同时对不同组合的监测位置进行优化,即对全部节点初步聚类为6类.为了保证同一个聚类分组中的需水节点之间有良好的相关性和相似性,有时候在对节点进行聚类时不能根据计算简单地将其划分到哪一类中,需要在分类计算的基础上结合管网的实际拓扑结构对聚类结果进行局部调整,保证同一聚类分组中的需水节点之间有直接通水路径.根据FCM聚类划分中每个样本不是严格划分为某一类,而是以一定的隶属度属于某一类的聚类原则[16],采用FCM算法对节点聚类,可利用MATLAB中的“fcm”函数进行分析计算,得到表1的聚类计算结果,表中ID为节点编号.第2子类中的STJ2和第3子类中的P97,P99,PRV1节点与各自子类中的其他节点都没有直接的水力连通性,而与第4子类的节点相邻,为保证每类中的节点都有直接相连的通水路径和相对该类较大的隶属度,在聚类计算的基础上对节点STJ2,P97,P99,PRV1重新划分到第4子类中.表1 各节点聚类分布表Tab.1 Clusterdistributionofpoints类别ID1P1,P2,P3,STJ6,P4,P41,P8,P43,P12,P20,P26,P28,P30,P32,P54,P34,P5,P49,P48,P47,P46,P59,P56,P44-1,STJ4,STJ5,P41-1,P68,STJ3,P65-1,P63-1,P61-1,P59-1,P55-1,FM3-1,STJ,STJ7,P83,P822P79,P77,P75,P73,P70,STJ2,G-01,G-02,G-03,G-04,G-05,G-063P97,P99,PRV1,P121,P123,P125,P127,P129,STJ8,P150,P131,P133,P135,P137,P139,A2,DS34PRV2,P102,P104,STJ1,G-07,P111,P112,P115,P117,P1195P152,P154,P156,P158,P160,P162,P141,P143,P145,P147,STJ9,STJ10,P190,P171,P175,P183,P185,P1876DS5,DS7,DS10,DS12,DS14,DS16,DS20,A4,DE3,DE5,DE7,DE9,DE12,DE14,DE17,DE19,DE21,DE22,DE24,DE26,DE29,D30,DE32,DE37,DE39,DE44,A5,A9,A11,A14,DY2,DY7,DY12,DY14,DY15,DY162.2 选取备选监测点通过聚类把由水量漏失引起的压力变化相近的节点归为一类,在FCM聚类中每类中隶属度u越大的节点越具有所属子类的代表性[16],选取子聚类中隶属度最大的节点P47,G-01,STJ1,STJ8,STJ10和DE21作为备选监测点,如表2所示,表中u为隶属度.表2 子类中隶属度最大节点Tab.2 Pointswiththelargestmembershipineachsubclass IDuIDuP470.994320STJ80.934320G-010.977302STJ100.968466STJ10.982975DE210.974196图1 管网节点聚类结果Fig.1 Clusteringresultsofpipenetworkpoints2.3 模拟漏失事件建立备选监测点压降集合由WU等[17]的研究可知,当漏失发生时,距离漏失位置越近的监测点其压降越大,可以利用水力模型模拟相应的漏失事故,对监测点进行测试分析.研究中对漏失事件的模拟和建立相应的监测点压降集合主要有以下几个过程:①对水力模型进行模拟分析,得到正常情况下6个备选压力监测点压力644值H0={H01,H02,H03,H04,H05,H06}.②模拟漏失事件,计算备选监测点的漏失压力值.本案例中假设每个节点可能平均发生5次漏失事件,则利用蒙特卡罗算法随机生成660个漏失,模拟漏失水量如果太大,用户就会感到用水异常而发生热线报警,而模拟漏水量太小则因压力变化过小而无法被感知.在本研究中,拟设置漏失水量为平均供水总流量的20%~60%,考虑到管网中用户水量时刻变化的特点,分别取需水量最小、最大和中位数3个时段进行漏失事件模拟,总计生成1980个不同的随机漏失事件.计算每个漏失事件发生后备选监测点的压力值H1j={H1j,1,H1j,2,H1j,3,H1j,4,H1j,5,H1j,6},H1j,i为漏失事件j发生后第i个备选监测点的压力值.③计算备选压力监测点在每个漏失事件发生前后压力下降值△H={△Hj,1,△Hj,2,△Hj,3,△Hj,4,△Hj,5,△Hj,6},△Hj,i为备选压力监测点i在漏失事件j发生前后的压降值,即△H=H01,1-H11,1H01,1-H11,1…H01,1-H11,1H02,1-H12,1H02,1-H12,1…H02,1-H12,1H01980,1-H11980,1H01980,1-H11980,1…H01980,1-H11980,1.(2)④对备选监测点压降数据进行处理.由于管网日常运行中存在一定的压力波动以及监测设备的测量误差和稳定性问题,需要对监测到的压降数据进行进一步处理.添加1个压力波动阈值ζ,当压降值小于ζ时为0,表示该监测点没有感知到此次漏失事件;当压降值大于等于ζ时为1,表示该监测点成功监测到此次漏失事件.阈值ζ需根据管网的实际运行情况选取,如果太大会导致不能及时监测到漏失,而太小又会增加监测的误报率.依据运行经验,本案例中ζ设置为0.2m.sj,i=0,△Hj,i<0.2,1,△Hj,i≥0.2,{(3)式中:sj,i为处理过的备选压力监测点i在漏失事件j发生前后的压降值.根据式(3),将备选监测点的全部压降数据换算成0-1分布的形式,即未感知到和感知到漏失.表3以案例中前10次模拟漏失事件的压降数据进行简要说明.按式(3)的换算方式对表3中的压力下降值ΔH进行处理,得到表4记录的各备选监测点的压力下降情况,表中ΔH′为换算后备选监测点压力下降值.表3 备选监测点压力下降值Tab.3 Pressuredropvaluesofalternativemonitoringpointsm漏失事件ΔHP47G-01STJ1STJ8STJ10DE2110.280.290.300.300.300.3120.250.230.210.220.180.2130.170.220.170.170.170.1740.300.300.310.320.320.3350.260.250.230.230.190.1860.200.200.210.210.210.2170.190.190.230.230.230.2480.190.190.190.190.190.1890.300.300.320.330.350.32100.260.350.260.260.260.26 表4中漏失事件8引起6个备选监测点的压力下降值全部为0,即由于漏失事件8引起的压降值较小,没有被感知到,将诸如漏失事件8引起的所有备选监测点压力下降值为0的漏失事件定义为无效漏失,并从整个漏失事件集合中去除,最后得到1566个用于测试压力监测点优化布设的模拟漏失事件集合矩阵△S△S=s1,1s1,2…s1,6s2,1s2,2…s2,6 s1566,1s1566,2…s1566,6 .(4)矩阵△S中,行元素表示某个漏失事件引起的压降值被全部备选监测点的感知情况,列元素则表示某个备选监测点对所有模拟漏失事件的感知情况.表4 换算后备选监测点压力下降值Tab.4 Pressuredropvaluesofalternativemonitoringpointsconvertedm漏失事件ΔH′P47G-01STJ1STJ8STJ10DE21111111121111013010000411111151111006111111700111180000009111111101111112.4 建立监测点优化布设目标函数将矩阵△S中列元素写成向量的形式Si=[s1,i,s2,i,s3,i,…,s1566,i]T,Si为第i个监测点感知到的645漏失事件向量.案例要求对同一个漏失事件至少同时被2个备选监测点感知来提高监测的可靠性,可以将问题理解为求将向量Si(i=1,2,3,4,5,6)中相同位置元素相加,和向量中不小于2的元素个数的最大化,故最少可选出2个、最多可选择6个备选监测点.如以前10个漏失事件为例,假设选取P47和G-01作为监测点,去除无效事件8后还剩余9个模拟漏失事件,即向量S1=[1,1,0,1,1,1,0,1,1]T和S2=[1,1,1,1,1,1,0,1,1]T,S1+S2=[2,2,1,2,2,2,2,0,2]T,将2个向量对应位置元素相加后得到的新向量中不小于2的元素有7个,说明该布设方案能够感知到7个漏失事件.据此,监测点优化选择的目标函数计算方法可表示为MAX:sum{[∑Cn6(Si)]≥2},(5)式中:Cn6为从6个备选监测点中任选n个的组合;sum表示对目标值求和.2.5 对优化目标函数求解确定监测点布设方案案例中可将优化目标函数的求解看作是排列组合问题,通过对集合矩阵△S中列元素的求和,得到6个备选监测点能够感知到漏失事件数分别为1381,1335,1395,1431,1356和1405.每个备选压力监测点都能感知大多数的漏失事件,但对漏失事件的感知情况又各不相同,可从备选监测点中选取2,3,4,5,6个作为最终结果.由排列组合公式CnN可知,上述方案分别有15,20,15,6,1种不同的组合方式,对全部57种组合方式按目标函数计算,得到表5中不同n时感知漏失事件最少和最多2种布设方案及其漏失事件感知情况,表中M为感知到漏失的数量.表5 不同监测点布设方式及感知漏失事件数量Tab.5 Numberofperceivedleakageeventsoflayoutwithdifferentmonitoringpointsn选取备选监测点的组合方式M备注2G-01,STJ101155最少STJ1,STJ81307最多3P47,G-01,STJ101433最少P47,STJ8,DE211509最多4P47,G-01,STJ1,STJ101500最少P47,STJ8,STJ10,DE211530最多5P47,G-01,STJ1,STJ8,STJ101528最少P47,G-01,STJ1,STJ8,DE211530最多6P47,G-01,STJ1,STJ8,STJ10,DE211532— 在至少有2个监测点能同时作用的前提下,当拟设置2个监测点时,选取节点G-01,STJ10感知到的漏失事件最少为1155个,当选取节点STJ1,STJ8感知到的漏失事件最多为1307个;当拟设置3个监测点时,选取节点P47,G-01,STJ10感知到的漏失事件最少为1433个,选取节点P47,STJ8,DE21感知到的漏失事件最多为1509个;当拟设置4个监测点时,选取P47,STJ8,STJ10,DE21感知到的漏失事件最多为1530个;当拟设置5个监测点时,选取P47,G-01,STJ1,STJ8,DE21感知到的漏失事件最多为1530个;当选取全部备选节点时能够感知到的漏失事件为1532个.可见,当拟设置的监测点在4个以内时,随着监测点数量的增多,满足目标函数的被感知到的漏失数量明显增多;当拟设置的监测点为5或6时,虽然感知到的漏失事件有所增加,但增幅较小.经对比,当选取P47,STJ8,DE21为监测点时最大可以保证2个以上监测点同时感知到漏失事件占全部漏失事件集合的96.36%以上;当设置4个监测点时却为97.70%.一般在工程中增加1个监测点,设备成本在2000~4000千元不等,安装费约500元,后期更换电源的维护费以及数据收集处理的工作则相对漏失事件覆盖率仅增加1%.在考虑成本最小化和对可能发生的漏失事件的感知率最大化的基础上,设置3个监测点对管网运行压力进行实时监测最为科学.图2 监测点优化布设位置Fig.2 Optimallocationofmonitoringpoints3 讨 论相对于K均值聚类等对样本非此即彼划分的硬聚类,FCM聚类具有以一定隶属度将性质相近样本归为一类的特性,使得同一类内的样本具有较高同质性,类间样本具有较高异质性.因此,FCM算法的软聚类特性对解决给水管网这种复杂的非线性系统中节点聚类问题十分适用.以管网中节点压力变化的敏感系数为样本节点的特征,利用FCM聚类对节点聚类分析,得到节点分别属于各子类的隶属度.在计算的基础上,结合管网拓扑结构和隶属度大小对子类中离散的样本节点进行局部归类调整,最后确定的同一类中的节点既保证了以往单纯聚类646方法[5]中节点间紧密的数学联系,也保证了同一类节点间都有直接的通水路径,同时根据隶属度大小可从各子类中预选出备选监测点.利用Epanet软件基于MATLAB平台可以直观模拟管网中不同位置可能发生的各种突发爆管漏失事件,随机产生的漏失事件可有效覆盖管网不同位置节点在不同供水流量下的漏失状态.利用目标函数测试不同的监测方案,经计算,当选取节点P47,STJ8,DE21为监测点时的漏失事件监测覆盖率相对于只设置2个监测点时提高10%以上,达到96.36%;设定的3个压力监测点对漏失事件感知率和相关研究中要求80%以上的较高保证率[15]结果一致;但当设置4个监测点时,监测覆盖率增大效果却并不明显,也验证了研究中假设6个备选监测点可有效覆盖到管网各部位的合理性.相比以往大多偏向于考虑监测点自身的特性和分布均匀性的布设方法,该方法更能突出设置的监测点与漏失事件感知与否间的数量关系,目标函数保证至少2个监测点同时作用,提高了对管网异常压力波动监测的可靠性,减少了高误报率给管网检修人员带来的额外工作量.4 结 论1)通过MATLAB和Epanet水力模型模拟可能发生的漏失事件,对FCM聚类预选的备选监测点进行漏失感知测试和评价,该方法能直观地体现不同布设方案对可能发生的漏失事件的感知情况,最终确定的布设方案可以在保证监测点间良好数学关系和水力联系的前提下,利用P47,STJ8,DE21这3个监测点监测到96.36%以上的漏失,同时方案要求至少2个监测点能感知到同一个漏失事件,提高了监测可靠性.2)案例管网为同一时期铺设且服务区域较小,在监测点的布设中没有考虑节点重要性以及地形变化的影响,对于大规模管网可在此基础上对部分节点进行单独监测.3)此外,由于给水管网是一个非线性的复杂系统,在未来的研究中需根据服务区域用户特征,对供水流量及压力波动变化等特征进行长期监测总结,建立更准确的监测点布设水力模型.参考文献(References)[1] 尹兆龙,信昆仑,项宁银.给水管网压力监测点布置的实用方法[J].中国给水排水,2014,30(2):19-23.YINZhaolong,XINKunlun,XIANGNingyin.Apracticalmethodforlayoutofpressuremonitoringpointsinwaterdistributionnetwork[J].Chinawaterandwastewater,2014,30(2):19-23.(inChinese)[2] 何忠华,袁一星.基于分区模型的城市给水管网压力监测点布置[J].哈尔滨工业大学学报,2014,46(10):37-41.HEZhonghua,YUANYixing.Layoutofpressuremonitoringpointsinurbanwaterdistributionsystembasedondistrictmodel[J].JournalofHarbinIinstituteofTechnology,2014,46(10):37-41.(inChinese)[3] 张清周.基于水力模型的供水管网压力管理与漏损区域识别研究[D].哈尔滨:哈尔滨工业大学,2017.[4] 黄雅芳,卫海,管慧玲,等.聚类分析法选择给水管网压力监测点[J].净水技术,2014,33(S2):74-76.HUANGYafang,WEIHai,GUANHuiling,etal.Pressuremonitoringpointsselectionbyclusteringanalysismethodinwatersupplynet[J].Waterpurificationtechnology,2014,33(S2):74-76.(inChinese)[5] 方潜生,张兆祥,谢陈磊,等.基于特征聚类的给水管网压力监测点优化布置[J].安徽大学学报(自然科学版),2017,41(4):55-62.FANGQiansheng,ZHANGZhaoxiang,XIEChenlei,etal.Optimallocationofpressuremonitoringpointsinwatersupplynetworkbasedonfeatureclustering[J].JournalofAnhuiUniversity(naturalscienceedition),2017,41(4):55-62.(inChinese)[6] 孙征,王玉琼,涂杰,等.基于FCM聚类的供水管网压力监测点的布置方法[J].灌溉排水学报,2018,37(S1):44-46.SUNZheng,WANGYuqiong,TUJie,etal.ArrangementmethodofpressuremonitoringpointsofwatersupplynetworkbasedonFCMclustering[J].Journalofirrigationanddrainage,2018,37(S1):44-46.(inChinese)[7] 陶涛,颜合想,信昆仑,等.基于SCADA压力监测的爆管定位分析[J].供水技术,2016,10(4):11-14,28.TAOTao,YANHexiang,XINKunlun,etal.PipeburstlocationanalysisbasedonSCADAsystempressuremonitoring[J].Watertechnology,2016,10(4):11-14,28.(inChinese)[8] 梁建文,肖笛,张宏伟,等.供水管网健康监测的压力监测点优化布置[J].防灾减灾工程学报,2013,33(S1):51-57.LIANGJianwen,XIAODi,ZHANGHongwei,etal.Optimalmonitoringpointsinwaterdistributionsystemforhealthmonitoring[J].Journalofdisasterpreventionandmitigationengineering,2013,33(S1):51-57.(inChi647nese)[9] 张宏伟,张丽,梁建文.给水管网压力监测点的选址方法[J].中国给水排水,2003,19(3):52-55.ZHANGHongwei,ZHANGLi,LIANGJianwen.Studyonthelayingofpressuremonitoringnodesofwatersupplynetwork[J].Chinawaterandwastewater,2003,19(3):52-55.(inChinese)[10] 刘书明,王欢欢,徐鹏,等.多目标大规模给水管网监测点的优化选址[J].清华大学学报(自然科学版),2013,53(1):78-83.LIUShuming,WANGHuanhuan,XUPeng,etal.Multiobjectivegeneticalgorithmforoptimalmonitoringstationinlargewaterdistributionsystem[J].JournalofTsinghuaUniversity(naturalscienceedition),2013,53(1):78-83.(inChinese)[11] 金溪,曾小兵,高金良,等.利用遗传算法进行供水管网压力监测点优化布置[J].给水排水,2007,33(Z1):346-349.JINXi,ZENGXiaobing,GAOJinliang,etal.Theoptimalplacementsofpressuremonitoringpointsinwatersupplynetworkbyusingthegeneticalgorithm[J].Waterandwastewaterengineering,2007,33(Z1):346-349.(inChinese)[12] 刘倍良.城市供水管网爆管预警定位模型研究[D].长沙:湖南大学,2019.[13] SOROUSHF,ABEDINIMJ.Optimalselectionofnum berandlocationofpressuresensorsinwaterdistributionsystemsusinggeostatisticaltoolscoupledwithgeneticalgorithm[J].Journalofhydroinformatics,2019,21(6):1030-1047.[14] RAYAROTHR,SIVARADJEG.Randombaggingclas sifierandshuffledfrogleapingbasedoptimalsensorplacementforleakagedetectioninWDS[J].Waterresourcesmanagement,2019,33:3111-3125.[15] 彭畅,彭森,吴卿,等.基于NSGA-Ⅱ的给水管网压力监测点多目标优化布置[J].中国给水排水,2019,35(1):58-62.PENGChang,PENGSen,WUQing,etal.MultiobjectiveoptimizationofarrangementofpressuremonitoringpointsinwaterdistributionnetworkbasedonNSGA-Ⅱ[J].Chinawaterandwastewater,2019,35(1):58-62.(inChinese)[16] 李柏年,吴礼滨.MATLAB数据分析方法[M].北京:机械工业出版社,2012.[17] WULipeng,LIUShuming,WANGXiaoting.Distance basedburstdetectionusingmultiplepressuresensorsindistrictmeteringareas[J].Journalofwaterresourcesplanningandmanagement,2018,144(11):060180091.(责任编辑 朱漪云)648。

30个智能算法matlab代码

30个智能算法matlab代码

30个智能算法matlab代码以下是30个使用MATLAB编写的智能算法的示例代码: 1. 线性回归算法:matlab.x = [1, 2, 3, 4, 5];y = [2, 4, 6, 8, 10];coefficients = polyfit(x, y, 1);predicted_y = polyval(coefficients, x);2. 逻辑回归算法:matlab.x = [1, 2, 3, 4, 5];y = [0, 0, 1, 1, 1];model = fitglm(x, y, 'Distribution', 'binomial'); predicted_y = predict(model, x);3. 支持向量机算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3];y = [1, 1, -1, -1, -1];model = fitcsvm(x', y');predicted_y = predict(model, x');4. 决策树算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitctree(x', y');predicted_y = predict(model, x');5. 随机森林算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = TreeBagger(50, x', y');predicted_y = predict(model, x');6. K均值聚类算法:matlab.x = [1, 2, 3, 10, 11, 12]; y = [1, 2, 3, 10, 11, 12]; data = [x', y'];idx = kmeans(data, 2);7. DBSCAN聚类算法:matlab.x = [1, 2, 3, 10, 11, 12]; y = [1, 2, 3, 10, 11, 12]; data = [x', y'];epsilon = 2;minPts = 2;[idx, corePoints] = dbscan(data, epsilon, minPts);8. 神经网络算法:matlab.x = [1, 2, 3, 4, 5];y = [0, 0, 1, 1, 1];net = feedforwardnet(10);net = train(net, x', y');predicted_y = net(x');9. 遗传算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;options = gaoptimset('PlotFcns', @gaplotbestf);[x, fval] = ga(fitnessFunction, nvars, [], [], [], [], lb, ub, [], options);10. 粒子群优化算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;options = optimoptions('particleswarm', 'PlotFcn',@pswplotbestf);[x, fval] = particleswarm(fitnessFunction, nvars, lb, ub, options);11. 蚁群算法:matlab.distanceMatrix = [0, 2, 3; 2, 0, 4; 3, 4, 0];pheromoneMatrix = ones(3, 3);alpha = 1;beta = 1;iterations = 10;bestPath = antColonyOptimization(distanceMatrix, pheromoneMatrix, alpha, beta, iterations);12. 粒子群-蚁群混合算法:matlab.distanceMatrix = [0, 2, 3; 2, 0, 4; 3, 4, 0];pheromoneMatrix = ones(3, 3);alpha = 1;beta = 1;iterations = 10;bestPath = particleAntHybrid(distanceMatrix, pheromoneMatrix, alpha, beta, iterations);13. 遗传算法-粒子群混合算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;gaOptions = gaoptimset('PlotFcns', @gaplotbestf);psOptions = optimoptions('particleswarm', 'PlotFcn',@pswplotbestf);[x, fval] = gaParticleHybrid(fitnessFunction, nvars, lb, ub, gaOptions, psOptions);14. K近邻算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitcknn(x', y');predicted_y = predict(model, x');15. 朴素贝叶斯算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitcnb(x', y');predicted_y = predict(model, x');16. AdaBoost算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3];y = [0, 0, 1, 1, 1];model = fitensemble(x', y', 'AdaBoostM1', 100, 'Tree'); predicted_y = predict(model, x');17. 高斯混合模型算法:matlab.x = [1, 2, 3, 4, 5]';y = [0, 0, 1, 1, 1]';data = [x, y];model = fitgmdist(data, 2);idx = cluster(model, data);18. 主成分分析算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; coefficients = pca(x');transformed_x = x' coefficients;19. 独立成分分析算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; coefficients = fastica(x');transformed_x = x' coefficients;20. 模糊C均值聚类算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; options = [2, 100, 1e-5, 0];[centers, U] = fcm(x', 2, options);21. 遗传规划算法:matlab.fitnessFunction = @(x) x^2 4x + 4; nvars = 1;lb = 0;ub = 5;options = optimoptions('ga', 'PlotFcn', @gaplotbestf);[x, fval] = ga(fitnessFunction, nvars, [], [], [], [], lb, ub, [], options);22. 线性规划算法:matlab.f = [-5; -4];A = [1, 2; 3, 1];b = [8; 6];lb = [0; 0];ub = [];[x, fval] = linprog(f, A, b, [], [], lb, ub);23. 整数规划算法:matlab.f = [-5; -4];A = [1, 2; 3, 1];b = [8; 6];intcon = [1, 2];[x, fval] = intlinprog(f, intcon, A, b);24. 图像分割算法:matlab.image = imread('image.jpg');grayImage = rgb2gray(image);binaryImage = imbinarize(grayImage);segmented = medfilt2(binaryImage);25. 文本分类算法:matlab.documents = ["This is a document.", "Another document.", "Yet another document."];labels = categorical(["Class 1", "Class 2", "Class 1"]);model = trainTextClassifier(documents, labels);newDocuments = ["A new document.", "Another new document."];predictedLabels = classifyText(model, newDocuments);26. 图像识别算法:matlab.image = imread('image.jpg');features = extractFeatures(image);model = trainImageClassifier(features, labels);newImage = imread('new_image.jpg');newFeatures = extractFeatures(newImage);predictedLabel = classifyImage(model, newFeatures);27. 时间序列预测算法:matlab.data = [1, 2, 3, 4, 5];model = arima(2, 1, 1);model = estimate(model, data);forecastedData = forecast(model, 5);28. 关联规则挖掘算法:matlab.data = readtable('data.csv');rules = associationRules(data, 'Support', 0.1);29. 增强学习算法:matlab.environment = rlPredefinedEnv('Pendulum');agent = rlDDPGAgent(environment);train(agent);30. 马尔可夫决策过程算法:matlab.states = [1, 2, 3];actions = [1, 2];transitionMatrix = [0.8, 0.1, 0.1; 0.2, 0.6, 0.2; 0.3, 0.3, 0.4];rewardMatrix = [1, 0, -1; -1, 1, 0; 0, -1, 1];policy = mdpPolicyIteration(transitionMatrix, rewardMatrix);以上是30个使用MATLAB编写的智能算法的示例代码,每个算法都可以根据具体的问题和数据进行相应的调整和优化。

共空间模式CSP和滤波器组共空间模式FBCSP的MATLAB实现

共空间模式CSP和滤波器组共空间模式FBCSP的MATLAB实现

共空间模式CSP和滤波器组共空间模式FBCSP的MATLAB实现首先,我们来介绍CSP的MATLAB实现。

CSP的目标是找到一组空间滤波器,能够使目标类别的变异性最大化,同时使非目标类别的变异性最小化。

下面是CSP的MATLAB实现的步骤:1. 输入数据准备:将原始EEG数据划分为两个类别的epochs,比如注意力集中和注意力放松时的脑电数据。

每个epoch都是一个时间段内的多个时刻信号。

2. 计算协方差矩阵:对于每个类别的epoch,计算该类别的协方差矩阵。

协方差矩阵是一个n x n的矩阵,其中n是脑电通道的数量。

3.特征提取:将协方差矩阵进行一个特征分解,得到特征向量和特征值。

根据特征值的大小,将特征向量按照升序排列。

4.空间模式提取:选择特定数量的最大和最小特征向量,相应地得到一组最佳空间滤波器。

空间滤波器可以通过对协方差矩阵进行特征投影来实现。

5. 转换特征:对于每个类别的epoch,将其信号与最佳空间滤波器进行投影,得到新的特征向量。

这些特征向量将用于比较不同类别的分离度。

6.分类器训练:使用提取的特征向量,可以使用各种分类算法,如线性判别分析(LDA)、支持向量机(SVM)等训练一个分类器。

接下来,我们讨论FBCSP的MATLAB实现。

FBCSP是CSP的扩展版本,它通过将原始EEG信号分解为一组频率子带,将CSP应用于每个子带,并合并各个子带的CSP特征向量来实现更好的分类性能。

FBCSP的MATLAB实现包括以下步骤:1. 输入数据准备:将原始EEG数据划分为两个类别的epochs,同样是根据任务要求分为不同的条件。

2. 将每个epoch的信号分解为一组频率子带:使用滤波器组将每个epoch的信号分解为一组频率子带。

可以使用一组带通滤波器,如Butterworth滤波器,将原始信号分解为不同频带。

3.对每个频率子带应用CSP:对于每个频率子带,应用CSP算法来提取空间模式。

可以使用CSP的MATLAB实现来实现这一步骤。

K-means算法matlab的实现

K-means算法matlab的实现

算法流程图三、实验源代码1、主程序clear allclc[FH FW]=textread('C:\Users\lenvo\Desktop\н¨Îļþ¼Ð\','%f %f'); [MH MW]=textread('C:\Users\lenvo\Desktop\н¨Îļþ¼Ð\','%f %f'); Data(1:50,1)=FH;Data(51:100,1)=MH;Data(1:50,2)=FW;Data(51:100,2)=MW;C=input('ÊäÈëC£º');[U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C)plot(Data(:,1), Data(:,2),'o');hold on;maxU = max(U);index1 = find(U(1,:) == maxU);index2 = find(U(2,:) == maxU);line(Data(index1,1),Data(index1,2),'marker','*','color','g');line(Data(index2,1),Data(index2,2),'marker','*','color','r');plot([P([1 2],1)],[P([1 2],2)],'*','color','k')hold off;2、子程序'function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm) if nargin<5epsm=;endif nargin<4M=2;endif nargin<3plotflag=0;end[N,S]=size(Data);m=2/(M-1);iter=0;、Dist(C,N)=0; U(C,N)=0; P(C,S)=0;U0 = rand(C,N);U0=U0./(ones(C,1)*sum(U0));¨while trueiter=iter+1;Um=U0.^M;P=Um*Data./(ones(S,1)*sum(Um'))';'for i=1:Cfor j=1:NDist(i,j)=fuzzydist(P(i,:),Data(j,:));endendU=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));if nargout>4 | plotflagObj_Fcn(iter)=sum(sum(Um.*Dist.^2));endif norm(U-U0,Inf)<epsmbreak)endU0=U;endif nargout > 3res = maxrowf(U);for c = 1:Cv = find(res==c);Cluster_Res(c,1:length(v))=v;endendif plotflag^fcmplot(Data,U,P,Obj_Fcn);endfunction [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epsm) if nargin<5epsm=;endif nargin<4M=2;endif nargin<3*plotflag=0;end[N,S] = size(Data); m = 2/(M-1); iter = 0;C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0;while trueiter=iter+1;for i=1:Cfor j=1:NDist(i,j)=fuzzydist(P0(i,:),Data(j,:));endend!U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); Um=U.^M;P=Um*Data./(ones(S,1)*sum(Um'))';if nargout>4 | plotflagObj_Fcn(iter)=sum(sum(Um.*Dist.^2));endif norm(P-P0,Inf)<epsmbreakendP0=P;end-if nargout > 3res = maxrowf(U);for c = 1:Cv = find(res==c);Cluster_Res(c,1:length(v))=v;endendif plotflagfcmplot(Data,U,P,Obj_Fcn);end.function f = addr(a,strsort)if nargin==1strsort='ascend';endsa=sort(a); ca=a;la=length(a);f(la)=0;for i=1:laf(i)=find(ca==sa(i),1);ca(f(i))=NaN;endif strcmp(strsort,'descend'))f=fliplr(f);endfunction ellipse(a,b,center,style,c_3d)if nargin<4style='b';endif nargin<3 | isempty(center)center=[0,0];end:t=1:360;x=a/2*cosd(t)+center(1);y=b/2*sind(t)+center(2);if nargin>4plot3(x,y,ones(1,360)*c_3d,style)elseplot(x,y,style)endfunction fcmplot(Data,U,P,Obj_Fcn)~[C,S] = size(P); res = maxrowf(U);str = 'po*x+d^v><.h';figure(1),plot(Obj_Fcn)title('Ä¿±êº¯ÊýÖµ±ä»¯ÇúÏß','fontsize',8)if S==2figure(2),plot(P(:,1),P(:,2),'rs'),hold onfor i=1:Cv=Data(find(res==i),:);plot(v(:,1),v(:,2),str(rem(i,12)+1))ellipse(max(v(:,1))-min(v(:,1)), ...max(v(:,2))-min(v(:,2)), ...^[max(v(:,1))+min(v(:,1)), ...max(v(:,2))+min(v(:,2))]/2,'r:')endgrid on,title('2D ¾ÛÀà½á¹ûͼ','fontsize',8),hold off endif S>2figure(2),plot3(P(:,1),P(:,2),P(:,3),'rs'),hold on for i=1:Cv=Data(find(res==i),:);plot3(v(:,1),v(:,2),v(:,3),str(rem(i,12)+1))ellipse(max(v(:,1))-min(v(:,1)), ...,max(v(:,2))-min(v(:,2)), ...[max(v(:,1))+min(v(:,1)), ...max(v(:,2))+min(v(:,2))]/2, ...'r:',(max(v(:,3))+min(v(:,3)))/2)endgrid on,title('3D ¾ÛÀà½á¹ûͼ','fontsize',8),hold off endfunction D=fuzzydist(A,B)D=norm(A-B);:function mr=maxrowf(U,c)if nargin<2c=1;endN=size(U,2);mr(1,N)=0;for j=1:Naj=addr(U(:,j),'descend');mr(j)=aj(c);end四、实验结果1、FEMALE 和 MALE\(1)C=2, Z1(1)=(173,53)T, Z2(1)=(168,57)T。

模糊C均值聚类

模糊C均值聚类
模糊C均值聚类
主 单
讲:周润景 教授 位:电子信息工程学院
目 录
模糊C均值聚类应用背景 模糊C均值算法 模糊C均值聚类的MATLAB实现 模糊C均值聚类结果分析
一.模糊C均值聚类应用背景
传统的聚类分析是一种硬划分(Crisp Partition),它把每个待辨识的对 象严格地划分到某类中,具有“非此即彼”的性质,因此这种类别划分的界限 是分明的。然而实际上大多数对象并没有严格的属性,它们在性质和类属方面 存在着中介性,具有“亦此亦彼”的性质,因此适合进行软划分。Zadeh提出 的模糊集理论为这种软划分提供了有力的分析工具,人们开始用模糊方法来处 理聚类问题,并称之为模糊聚类分析。模糊聚类得到了样本属于各个类别的不 确定性程度,表达了样本类属的中介性,建立起了样本对于类别的不确定性的
三.模糊C均值聚类的MATLAB实现
426.31 3105.29 2057.8 1507.13 1556.89 1954.51 343.07 3271.72 2036.94 2201.94 3196.22 935.53 2232.43 3077.87 1298.87 1580.1 1752.07 2463.04 1962.4 1594.97 1835.95 1495.18 1957.44 3498.02 1125.17 1594.39 2937.73 24.22 3447.31 2145.01 1269.07 1910.72 2701.97 1802.07 1725.81 1966.35 1817.36 1927.4 2328.79 1860.45 1782.88 1875.13]; [center,U,obj_fcn] = fcm(data,4); plot3(data(:,1),data(:,2),data(:,3),'o');

fimplicit在matlab中的运用

fimplicit在matlab中的运用

fimplicit在matlab中的运用函数语法如下:其中,fun是用户定义的函数句柄,[xmin,xmax,ymin,ymax]定义了绘图的范围,n设置了网格大小,ax是指定图形绘制的轴。

在这个函数中,最重要的参数是fun,它定义了用户想要绘制的二元函数。

函数应该返回浮点数结果。

例如,如果想要绘制一个简单的二元函数y=x^2,则可以定义如下函数:function z = myfun(x, y)z=x^2-y;end然后,可以使用fimplicit函数来生成图形:这将绘制一个曲面,其中y轴表示y的值,x轴表示x的值,z轴表示myfun(x,y)的值。

另外,可以使用[f,g]=fun(x,y)的形式来返回辅助函数f和g的值。

这在一些情况下非常有用,因为fimplicit会计算并显示每个点上的交叉线。

通过检查辅助函数的值,可以确定函数在每个点上是否交叉。

为了更好地理解fimplicit的运用,下面是一个较为复杂的例子:1. 创建一个文件名为"myfun.m"的函数文件,内容如下:function z = myfun(x, y)z = sin(x) - cos(y);end2.在MATLAB中运行以下命令:title('fimplicit示例')xlabel('x轴')ylabel('y轴')zlabel('z轴')这将绘制出一个参数函数x^2+y^2-2=0的图像。

总而言之,fimplicit函数在MATLAB中的运用非常灵活,可以绘制各种二元函数的图形,并且可以通过调整参数来控制图像的范围和分辨率。

这对于理解和可视化数学函数在二维平面上的行为非常有用。

matlabfeedback函数用法

matlabfeedback函数用法

matlabfeedback函数用法Matlab中的feedback函数可以被用于控制系统分析和设计的简化。

feedback函数可以将系统的控制信号和系统输出信号进行操作合成,因此我们可以看到系统对于输入信号的控制效果。

feedback函数的函数原型如下:```sys_cl = feedback(sys, H, sign)```sys是一个包含系统状态空间模型的对象;H是包含反馈传递函数的对象;sign是反馈信号的方向。

在此函数中,反馈信号的方向是一个选择性参数,其值可以为正号或负号,可以控制反馈信号是系数为1还是-1。

如果sign参数定义为'+',则表示反馈信号的系数为1;如果sign参数定义为'-',则表示反馈信号的系数为-1。

反馈传递函数H是一个包含反馈传递函数的对象。

反馈传递函数可以指定控制系统的反馈路径,以便更好地控制系统。

反馈函数的传递函数通常是一个比例或积分传递函数。

有时也可以加入带通或低通滤波器等传递函数。

feedback函数的返回值是一个包含新系统状态空间模型的对象。

这就是我们可以用来控制系统的新模型。

在系统设计和分析中,feedback函数非常有用。

回归到feedback函数的工作原理,反馈函数的目的是将系统的输出信号反馈输入到系统中。

当反馈追踪路径较短时,即反馈信号可以追踪到控制信号之前,系统输出可以被控制。

控制系统在系统输出中引入反馈信号后,可以使系统变得更加稳定。

在电子电路中,我们常常用反馈来控制流经系统的电流、电压或功率等。

现在,我们将这个函数在一些实际的例子中实现。

让我们看看第一个实例:假设我们要设计一个标准的控制系统,用于控制各种机械设备的运动。

我们可以将系统的状态模型表示为:$$\begin{aligned}\dot{\mathbf{x}}(t)&=\mathbf{A}\mathbf{x}(t)+\mathbf{B}\mathbf{u}(t)\\\mathbf{y}(t)&=\mathbf{C}\mathbf{x}(t)+\mathbf{D}\mathbf{u}(t)\end{aligned}$$A、B、C、D是系数矩阵,x(t)是状态向量,u(t)是控制输入,y(t)是输出向量。

用matlab模拟FEC和交织两种方式

用matlab模拟FEC和交织两种方式

用matlab模拟FEC和交织两种方式FEC(前向纠错方式):交织>>s1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,3 4,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56];>>x1=(reshape(s1,8,7))';>>x1(2,2)=0;x1(2,3)=0;>>x1(2,4)=0;x1(2,5)=0;>> s2=reshape(x1,1,56);>>x2=reshape(s2,7,8);>>x2(2,2)=10;x2(2,3)=11;>> s3=reshape(x2',1,56);>> a=[s1,s2,s3];>>plot(s1,s2);x1 =1 2 3 4 5 6 7 89 0 0 0 0 14 15 1617 18 19 20 21 22 23 2425 26 27 28 29 30 31 3233 34 35 36 37 38 39 4041 42 43 44 45 46 47 4849 50 51 52 53 54 55 56L=1000;M=4;%每个符号的比特数N=2^M-1;%编码后码字长度K=N-4;%信息长度MSG=randint(L,1);%随机产生L比特信号TP=gftuple([-1:N-1]',M);%产生加罗华域元素PG=rspoly(N,K);%产生生成式[CODE,ADDED]=rsenco(MSG,TP,K);%编码NOI=rand(length(CODE)/M,1)<03;%加入3%的噪声NOI=(NOI*ones(1,M))';%产生突发错误NOI=NOI(:);CODE_NOI=rem(CODE+NOI,2);%噪声加入信号[DEC,ERR,CCODE,ERR_C]=rsdeco(CODE_NOI,TP,K);%译码MSG=[MSG;zeros(ADDED,1)];%调整长度max(abs(DEC-MSG));%比较X=[1:length(NOI)];Z=[1:M*N:length(NOI)];Y=zeros(1,length(Z));Z=[Z;Z];Y=[Y+min(ERR_C);Y+max(ERR_C)];subplot(211);plot(X,NOI,'yo',X,ERR_C,'rx',Z,Y,'g-');title('Error Detection Record');xlabel('o--placed error;x--detected error;vertical bar: RS-DECO section.'); axis([1,length(NOI),min(ERR_C),max(ERR_C)]);X=[1:length(MSG)];Z=[1:M*K:length(MSG)];Y=zeros(1,length(Z));Z=[Z;Z];Y=[Y;Y+max(MSG)];subplot(212);plot(X,MSG,'yo',X,DEC,'rx',Z,Y,'g-');title('Message and Decoded Signal Comparison');xlabel('o--original message;x--decoded result.');axis([1,length(MSG),min(min(MSG)),max(max(MSG))]);st1 = 27221; st2 = 4831; % States for random number generator n = 7; k = 4; % Parameters for Hamming codemsg = randint(k*500,1,2,st1); % Data to encodecode = encode(msg,n,k,'hamming/binary'); % Encoded data% Create a burst error that will corrupt two adjacent codewords.errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];% With Interleaving%------------------inter = randintrlv(code,st2); % Interleave.inter_err = bitxor(inter,errors); % Include burst error.deinter = randdeintrlv(inter_err,st2); % Deinterleave.decoded = decode(deinter,n,k,'hamming/binary'); % Decode.disp('Number of errors and error rate, with interleaving:');[number_with,rate_with] = biterr(msg,decoded) % Error statistics% Without Interleaving%---------------------code_err = bitxor(code,errors); % Include burst error.decoded = decode(code_err,n,k,'hamming/binary'); % Decode.disp('Number of errors and error rate, without interleaving:'); [number_without,rate_without] = biterr(msg,decoded) % Error statisticsNumber of errors and error rate, with interleaving:number_with =rate_with =Number of errors and error rate, without interleaving:number_without =4rate_without =0.0020>>msg=randint(k*500,1,2,st1);>>code = encode(msg,n,k,'hamming/binary');>>errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];>> inter = randintrlv(code,st2);>>inter_err = bitxor(inter,errors);>>deinter = randdeintrlv(inter_err,st2);>> decoded = decode(deinter,n,k,'hamming/binary');>>disp('Number of errors and error rate, with interleaving:');Number of errors and error rate, with interleaving:>>code_err = bitxor(code,errors);>> decoded = decode(code_err,n,k,'hamming/binary');>>disp('Number of errors and error rate, without interleaving:');Number of errors and error rate, without interleaving:>> [number_without,rate_without] = biterr(msg,decoded);L=1000;M=4;%每个符号的比特数N=2^M-1;%编码后码字长度K=N-4;%信息长度MSG=randint(L,1);%随机产生L比特信号TP=gftuple([-1:N-1]',M);%产生加罗华域元素PG=rsgenpoly(N,K);%产生生成式[CODE,ADDED]=rsenco(MSG,TP,K);%编码R=[0:0.01:1];%错误率for j=1:length(R) %循环修改错误率NOI=rand(length(CODE)/M,1)<R(j);%加入R%的噪声NOI=(NOI*ones(1,M))';%产生突发错误NOI=NOI(:);CODE_NOI=rem(CODE+NOI,2);%噪声加入信号[DEC,ERR,CCODE,ERR_C]=rsdeco(CODE_NOI,TP,K);%译码MSG=[MSG;zeros(ADDED,1)];%调整长度error=0;%错误码计数初值Q=length(DEC);%码长度for i=1:Q %循环寻找错误码if(MSG(i)~=DEC(i))error=error+1;endendp(j)=error/Q;%误码率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

m文件1/7: function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm) % 模糊 C 均值聚类 FCM: 从随机初始化划分矩阵开始迭代 % [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm(Data,C,plotflag,M,epsm) % 输入: % Data: N×S 型矩阵,聚类的原始数据,即一组有限的观测样本集, % Data 的每一行为一个观测样本的特征矢量,S 为特征矢量 % 的维数,N 为样本点的个数 % C: 聚类数,1% plotflag: 聚类结果 2D/3D 绘图标记,0 表示不绘图,为缺省值 % M: 加权指数,缺省值为 2 % epsm: FCM 算法的迭代停止阈值,缺省值为 1.0e-6 % 输出: % U: C×N 型矩阵,FCM 的划分矩阵 % P: C×S 型矩阵,FCM 的聚类中心,每一行对应一个聚类原型 % Dist: C×N 型矩阵,FCM 各聚类中心到各样本点的距离,聚类中 % 心 i 到样本点 j 的距离为 Dist(i,j) % Cluster_Res: 聚类结果,共 C 行,每一行对应一类 % Obj_Fcn: 目标函数值 % iter: FCM 算法迭代次数 % See also: fuzzydist maxrowf fcmplot if nargin<5 epsm=1.0e-6; end if nargin<4 M=2; end if nargin<3 plotflag=0; end [N,S]=size(Data);m=2/(M-1);iter=0; Dist(C,N)=0; U(C,N)=0; P(C,S)=0; % 随机初始化划分矩阵 U0 = rand(C,N); U0=U0./(ones(C,1)*sum(U0)); % FCM 的迭代算法 while true % 迭代计数器 iter=iter+1; % 计算或更新聚类中心 P Um=U0.^M; P=Um*Data./(ones(S,1)*sum(Um'))'; % 更新划分矩阵 U for i=1:C for j=1:N Dist(i,j)=fuzzydist(P(i,:),Data(j,:)); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); % 目标函数值: 类内加权平方误差和 if nargout>4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end % FCM 算法迭代停止条件 if norm(U-U0,Inf) break end U0=U; end % 聚类结果 if nargout > 3 res = maxrowf(U); for c = 1:C v = find(res==c); Cluster_Res(c,1:length(v))=v; end end % 绘图 if plotflag fcmplot(Data,U,P,Obj_Fcn); end

m文件2/7: function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epsm) % 模糊 C 均值聚类 FCM: 从指定初始聚类中心开始迭代 % [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm2(Data,P0,plotflag,M,epsm) % 输入: Data,plotflag,M,epsm: 见 fuzzycm.m % P0: 初始聚类中心 % 输出: U,P,Dist,Cluster_Res,Obj_Fcn,iter: 见 fuzzycm.m % See also: fuzzycm if nargin<5 epsm=1.0e-6; end if nargin<4 M=2; end if nargin<3 plotflag=0; end [N,S] = size(Data); m = 2/(M-1); iter = 0; C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0; % FCM 的迭代算法 while true % 迭代计数器 iter=iter+1; % 计算或更新划分矩阵 U for i=1:C for j=1:N Dist(i,j)=fuzzydist(P0(i,:),Data(j,:)); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); % 更新聚类中心 P Um=U.^M; P=Um*Data./(ones(S,1)*sum(Um'))'; % 目标函数值: 类内加权平方误差和 if nargout>4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end % FCM 算法迭代停止条件 if norm(P-P0,Inf) break end P0=P; end % 聚类结果 if nargout > 3 res = maxrowf(U); for c = 1:C v = find(res==c); Cluster_Res(c,1:length(v))=v; end end % 绘图 if plotflag fcmplot(Data,U,P,Obj_Fcn); end m文件3/7: function fcmplot(Data,U,P,Obj_Fcn) % FCM 结果绘图函数 % See also: fuzzycm maxrowf ellipse [C,S] = size(P); res = maxrowf(U); str = 'po*x+d^v><.h'; % 目标函数绘图 figure(1),plot(Obj_Fcn) title('目标函数值变化曲线','fontsize',8) % 2D 绘图 if S==2 figure(2),plot(P(:,1),P(:,2),'rs'),hold on for i=1:C v=Data(find(res==i),:); plot(v(:,1),v(:,2),str(rem(i,12)+1)) ellipse(max(v(:,1))-min(v(:,1)), ... max(v(:,2))-min(v(:,2)), ... [max(v(:,1))+min(v(:,1)), ... max(v(:,2))+min(v(:,2))]/2,'r:') end grid on,title('2D 聚类结果图','fontsize',8),hold off end % 3D 绘图 if S>2 figure(2),plot3(P(:,1),P(:,2),P(:,3),'rs'),hold on for i=1:C v=Data(find(res==i),:); plot3(v(:,1),v(:,2),v(:,3),str(rem(i,12)+1)) ellipse(max(v(:,1))-min(v(:,1)), ... max(v(:,2))-min(v(:,2)), ... [max(v(:,1))+min(v(:,1)), ... max(v(:,2))+min(v(:,2))]/2, ... 'r:',(max(v(:,3))+min(v(:,3)))/2) end grid on,title('3D 聚类结果图','fontsize',8),hold off end

m文件4/7: function D=fuzzydist(A,B) % 模糊聚类分析: 样本间的距离 % D = fuzzydist(A,B) D=norm(A-B); m文件5/7: function mr=maxrowf(U,c) % 求矩阵 U 每列第 c 大元素所在行,c 的缺省值为 1 % 调用格式: mr = maxrowf(U,c) % See also: addr if nargin<2 c=1; end N=size(U,2);mr(1,N)=0; for j=1:N aj=addr(U(:,j),'descend'); mr(j)=aj(c); end

m文件6/7: function ellipse(a,b,center,style,c_3d) % 绘制一个椭圆 % 调用: ellipse(a,b,center,style,c_3d) % 输入: % a: 椭圆的轴长(平行于 x 轴) % b: 椭圆的轴长(平行于 y 轴) % center: 椭圆的中心 [x0,y0],缺省值为 [0,0] % style: 绘制的线型和颜色,缺省值为实线蓝色 % c_3d: 椭圆的中心在 3D 空间中的 z 轴坐标,可缺省 if nargin<4 style='b'; end if nargin<3 | isempty(center) center=[0,0]; end t=1:360; x=a/2*cosd(t)+center(1); y=b/2*sind(t)+center(2); if nargin>4 plot3(x,y,ones(1,360)*c_3d,style) else plot(x,y,style) end

m文件7/7: function f = addr(a,strsort) % 返回向量升序或降序排列后各分量在原始向量中的索引 % 函数调用:f = addr(a,strsort) % strsort: 'ascend' or 'descend'

相关文档
最新文档