这是一个CVI 温度采集卡报警显示报警仪器的程序 希望高手给注释一下 程序不懂。。。谢谢了

KMEANS算法。哪位高手指点一下啊。知道kmeans算法但看不懂下面代码。请尽量多注释一下啊。谢谢啦!在线等_百度知道
KMEANS算法。哪位高手指点一下啊。知道kmeans算法但看不懂下面代码。请尽量多注释一下啊。谢谢啦!在线等
printf(&);
converged = CalcNewClustCenters():RunKMeans(){
int converged:
System(){}:EucNorm(
int FindClosestCluster(int).Center[i] - Pattern[p][i]);
fscanf(InFilePtr,%2, & x).Center[1]);n&\), int c){ Input patterns.3f;
int CalcNewClustCenters();
printf(&void Sn&; #include &n& NumP j &\
fscanf(InFileP }; i++)
Cluster[i];static double Pattern[MAXPATTERN][MAXVECTDIM + 1], &.
dist = 0, i,#include &
int S i &lt, Pattern[i][3]);
fscanf(InFileP
for (j = 0;ClusterCenter[%d]=(%f;
for (i = 0:\ ;
for (i = 0, Cluster[i];}void S
pass = 1; #define SUCCESS 1#define FAILURE 0#define TRUE 1#define FALSE 0#define MAXVECTDIM 4#define MAXPATTERN 1588#define MAXCLUSTER 10
struct aCluster
double Center[MAXVECTDIM];
return SUCCESS;PASS=%d\
}}double System#include &lt.h& i++)
Cluster[i];; i &n&quot.h&gt, &quot,Cluster[i]:
aCluster Cluster[MAXCLUSTER], Cluster[i], & NumClusters), int);
printf(& NumC
void SaveClusters(char * fname);#include &#include &lt.Center[j] = Pattern[i][j].Center[i] - Pattern[p][i]) *
(Cluster[c];
double x:InitClusters(){}void S
void DistributeSamples();), i++)
for (j = 0;CIni
dist += (Cluster[c];
void InitClusters(),
void ShowClusters();r&quot,%d)\
printf(& string:.Center[i] - Pattern[p][i]) *
(Cluster[c], &
void ShowCenters();
for (i = 0;
Pattern[i][j] = NumC:ShowCenters(){
int i,Pattern[i][2]; j &n&};n& NumCPattern[%d]=(%2, & SizeVector);); j++)
Cluster[i].h&gt, Pattern[i][0]; i++)
x = (Cluster[c].Member[0] = i &
int NumMclass System{
if ( (InFilePtr = fopen(
converged = FALSE;
SizeVector=2; int b=0; SizeV
printf(&n&}int S i++)
printf(&quot, & i &);
for (i = 0;n&quot, i &lt:.Member[0] =;
void RunKMeans(),%d.h&)) == NULL)
return FAILURE; j++)
fscanf(InFileP i++)
int SizeVector:,%f)\
ShowCenters();n&quot.h&
int NumCn--------------------\
double EucNorm( NumP
} printf(&quot:&#92, & math.Center[0], Pattern[i][1];
while (converged == FALSE)
printf(&n&
int LoadPatterns(char * fname);
public ,%f)&#92, pass++).Center[1]):; i &lt:;%lg&quot, Cluster[i];
for (i = 0.Center[0]:LoadPatterns(char * fname){
FILE * InFileP SizeV;;%d&quot, i.Center[i] - Pattern[p][i]);
int Member[MAXPATTERN];%d&quot:\};\
DistributeSamples(); SizeVClusterCenter[%d]=(%f;%d&quot, & NumPatterns);struct aVector
double Center[MAXVECTDIM];
for (i = 0
/question/.baidu://zhidao://zhidao.html" target="_blank">http余下代码在<a href="/question/
提问者采纳
ClustID = i, Cluster[i];
}}&#47:&#92, VectID.0;UNABLE TO READ PATTERN_FILE; &#47.NumMembers++, &quot, Cluster[cl]:CalcNewClustCenters() {
int ConvFlag! —— 这个应该不可能发生;&#47,xs); 数据的维数
int NumClusters,没有实际作用 &#47,因为需要比较, x.Center[1]);/ 找出每个数据的最近聚类数据中心;;&#47.RunKMeans();
MemberIndex = Cluster[Clustid];
dist = 0; 重新分配数据
converged = CalcNewClustCenters();,并判断是否和上次相同
for (k = 0.Center[1]):&#92;);/ 输入数据的数量
int SizeVvoid S i & i &
if ( (InFilePtr = fopen(fname,&#92; i++) {
Cluster[i]; i &
return ConvFlag,维度和聚类数的数量
fscanf(InFileP&#47, Cluster[i]; 读入数据的数量,Cluster[i],&#47.h& 0) { /n&)) == NULL)
return FAILURE;; 显示聚类中心
}}// 记录这个数据的索引到第i个聚类中
for (j = 0;static double Pattern[MAXPATTERN][MAXVECTDIM + 1], char * argv[]) {
System kmeans: KMEANS PATTERN_FILE&#92; 重新计算新的聚类中心
double EucNorm(/ NumClusters,认为已经收敛
ShowCenters(); / 将数据索引加入Member数组
Cluster[Clustid];/ 初始为一个极大的值
ClustID = -1;/ 从文件中读取数据
void InitClusters(); i++) {
Cluster[i];;&///r&quot:FindClosestCluster(int pat) {
char szBuf[255]; NumClusters:DistributeSamples() {%s;I/ i++) {
strcpy(Cluster Center %d (1/USAGE;&#92; 如果没有提供参数; 逐个计算NumClusters个聚类
for (i = 0;):.3f:SaveClusters(char * fname) {}#include &/.InitClusters(); j++) {
Cluster[i]; 数据数量最大值#define MAXCLUSTER 10
/ cl &lt, argv[1]);;
printf(&/&#47:; SizeV}void S 把这个数据作为数据中心
} // i &/nCLUSTER %d ==&/
double MinDist// i++) {
printf(&//%d& j & j++) {
VectID = Cluster[i],n&
if (tmp[k] ; x可能是调试用;&#92;
if (ClustID & 聚类最大值/ tmp所有维度数值清0
for (j = 0;The new cluster centers are now calculated as.ShowClusters();
&#47, &quot,%d;
printf(& i & 保存聚类到文件中
void ShowCenters():; / / 如果小于前最小值;void main(*最近聚类的ID*/ 没有收敛的情况下反复跑
&#47:&#92;/; i++) {
for (j = 0,%2,也是新加入数据在数组中的位置
Cluster[Clustid];
return SUCCESS,Pattern[i][2].NumMembers = 0, & NumClusters);); i &lt, int); 数据的数量}; / 没有实现的函数void S
printf(& 用新值代替旧值
printf(&quot,则认为没有收敛
ConvFlag = FALSE.Member[0] = NumC 参数1 为数据文件名,但没有改完
printf(&/%d& Cluster[i],重新开始分配数据
for (i = 0; 显示聚类中心数据void S 将每个维度的差的平方相加,得到距离的平方
for (i = 0;
for (cl = 0;n& 输出刚才计算的数据
strcpy(n&),并将该数据分配到该聚类
for (pat = 0.Center[j] = Pattern[i][j];}///}void System,// 查找最接近的聚类&#47, i);
exit(0); j++) {
tmp[j] = 0; /&#47:EucNorm(int p,
&#47, Clustid,将改值作为当前最小值
MinDist = 数据最大维数
(看来这个程序写了一半程序需要一个数据文件格式如下,如果计算结果和上次相同;.Center[i] - Pattern[p][i]) *
(Cluster[c]; NumP 打印读入的数据
printf(& 计算新的聚类中心;
Cluster[i]; &#47,%f)&#92:;
SizeVector=2;n&
for (i = 0;/ &#47:&#92;%d); &#47.Center[0]; j++) {
fscanf(InFilePtr, sqrt(d));/ k &
strcat(xs。不过这个程序始数据维数固定为2;n&struct aVector {
double Center[MAXVECTDIM].ShowCenters();/ / 所有数据存放在这个数组中/
} //n&quot.h&gt.Center[k] = tmp[k],2表示数据的维度;&#47,但没有改完:;//;); 没有收敛
while (converged == FALSE) { &#47:5 2 32 3
12 10其中; 聚类结构struct aCluster {
double Center[MAXVECTDIM]; 返回收敛情况}/ &#47, k:;/ 2) {
printf(&/);
fscanf(InFileP#include &n&#92;
d = EucNorm( // i++) {
Cluster[i];n&quot.NumMembers,后来想改成4以下的任意维度; NumP
exit(0);#include &Distance from pattern %d to cluster %d is %f&#92; /
} /& 是否收敛ClusterCenter[%d]=(%f; / SizeVector,/
printf(&/ 显示聚类
void SaveClusters(char * fname),%d)&#92.LoadPatterns(argv[1]) == FAILURE) {
printf(&quot:ShowCenters() {
int i,从中读入数据
&#47, ClustID&#47.NumM
printf(&;%d &n& &#47,&[%f,重新分配数据到不同的聚类
int CalcNewClustCenters(); &#47,不能直接记录
char xs[255];// &#47?; 如果不同;
dist += (Cluster[c]:.NumM
double tmp[MAXVECTDIM],所以其实只能为2维; k++) {
if(Cluster[i]; j &lt, Pattern[i][1];#define SUCCESS 1#define FAILURE 0#define TRUE 1#define FALSE 0#define MAXVECTDIM 4
&#47, int c) { &#47,i, pat:RunKMeans() {ClusterCenter[%d]=(%f;#include & cl++) {
printf(&quot.Center[0]:
System() {};
return ClustID; 把前NumClusters个数据作为NumClusters个聚类的数据中心
for (i = 0; i++) {
x = (Cluster[c],维数实际上只能为2)#define MAXPATTERN 1588
/ 聚类数组
int NumPatterns,; k & i++) {
printf(&);
if (d & 所以的东西都搁System类里面了class System {private :
aCluster Cluster[MAXCLUSTER], Clustid); Cluster[i],szBuf);/}int Sn& 将上次的记录的该聚类中的数据数量清0;/
for (k = 0, j, Cluster[i]; 中心/ 打印聚类的数据中心
for (i = 0.Center[i] - Pattern[p][i]);, i.NumMembers);
&#47.Center[k]) /&#47,显示用法
if (argc &lt.Center[i] - Pattern[p][i]);n&quot,后来想改成4以下的任意维度,
Cluster[cl]; 计算聚类中所有数据的所有维度数值的和;
kmeans.Member[j], & NumPatterns););/ &#47.3f;/
ConvFlag = TRUE,找出最小值
for (i = 0;/
MinDist = 9;
}; SizeVector, &n--------------------&#92, &%d& MinDist) { &#47,%f)&#92;
&#47,&%s&#92; NumC /
/*最小误差*/
Pattern[i][j] =
int LoadPatterns(char * fname);%lg& 执行K-Means算法
void ShowClusters()。我已经对程序做了注释;&#92;/ 初始化聚类
void RunKMeans():.NumMembers:InitClusters() {//.h&gt.Center[1]),Pattern[VectID][k]);#include & 根据中心聚类;}void S
exit(0),& j & 读入数据
for (i = 0;
int Size,为下一步计算均值做准备
for (j = 0;n&quot.Member[0] = i, pat++) {
Clustid = FindClosestCluster(pat):%s&#92:;
// NumClusters,5表示数据的数量;
for (i = 0;
/ SizeV/), & x);
/C 临时记录新的聚类中心; 数据的聚类数
void DistributeSamples();
/ 误差准则
int FindClosestCluster(int);
&#47, &quot:LoadPatterns(char * fname) {
FILE * InFilePtr.h& SizeV
} 依次计算3个聚类到第pat个数据的误差;
fscanf(InFileP); 计算的趟数
pass = 1;n& 显示聚类中心数据 };n&quot, i &lt,如果出现表示出现了不可思议的错误
printf(&n&patern %d assigned to cluster %d&#92;n&};Ini SizeV&#47:&#92; j & / 聚类中的数据数量加1
printf(&quot, MemberIndex.9e+99;/ NumClusters:ShowClusters() {引力数据对象
int Member[MAXPATTERN], pass++);PASS=%d&#92; /&#47, Pattern[i][0];&#47, 打印趟数
DistributeSamples().h& 第p个数据到第c个聚类中心的误差准则(距离的平方)double S&#47。后面每两个实数对应一个数据点.Center[i] - Pattern[p][i]) *
(Cluster[c]; 求出均值;Pattern[%d]=(%2; i &
int b=0; 第一趟
converged = FALSE.Member[MemberIndex] = MemberIndex是当前记录的数据数量, 查找第pat个数据的最近聚类int System .Center[0];
sprintf(szBuf, & SizeVector)!= Cluster[i];
printf(&n&&#92,%f]&#92。#include & pat & NumClusters,Cluster[i]:, xs), Pattern[i][3]);;n&quot?;; 该聚类中数据在Pattern中的索引
int NumM 看来开始数据维数固定为2; 没有找到; k++) {
tmp[k] += Pattern[VectID][k]!=0)
tmp[k] = tmp[k] /Aaargh& NumP&#47,3表示聚类的数量; i &
其他类似问题
您可能关注的推广
kmeans的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求解释一下这个程序,最好每个关键语句都能注释一下。谢谢各位高手!_百度知道
求解释一下这个程序,最好每个关键语句都能注释一下。谢谢各位高手!
while(utf8buf[i] ;
scanf(&%d& ++j)
wchar_t tmpbuf[3000] = {0};#include &); j &lt, tmpbuf, sizeof(utf8buf);
i += bytecnt, utf8buf.h&gt!= 0)
int bytecnt = 0;
else if ((utf8buf[i] & 0xf0) == 0xe0)
bytecnt = 3;
char utf8buf[3000] = {0};
puts(& int i, 0;& &quot, NULL; k)&1), k &
if ((utf8buf[i] & 0x80) == 0)
bytecnt = 1;
MultiByteToWideChar(CP_ACP, sizeof(tmpbuf));
int main(){
char buf[3000], -1.h&gt,(utf8buf[i + j] &gt.h&gt,buf), NULL);
else if ((utf8buf[i] & 0xe0) == 0xc0)
bytecnt = 2;= 0;#include &lt,
return 0; --k)
for(k = 7, -1;;
for(j = 0;%s&quot, 0;
WideCharToMultiByte(CP_UTF8#include &
-1, NULL;&#47, sizeof(utf8buf);&#47, tmpbuf, 0;将宽字符转换为utf8编码, -1;&#47, NULL), tmpbuf, buf, 0;&#47,具体什么算法, utf8buf, sizeof(tmpbuf)),前两句的最终效果是ascii编码转换成utf8编码while循环中是一种算法;将多字节字符转换为宽字符WideCharToMultiByte(CP_UTF8MultiByteToWideChar(CP_ACP
可以看一下我的补充问题,为什么该程序输入一组汉字后得到的并不是utf8数据流啊?
你确定不是utf8数据?MultiByteToWideChar函数实现从ASNI到Unicode编码之间的转换,转换后字符串长度会变化。但楼主定义的保存转换后的字符串的缓冲区wchar_t tmpbuf[3000] = {0};并没有考虑长度变化,这样容易出问题。楼主可参考改进代码
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁虚拟仪器_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
发&#8203;生&#8203;风&#8203;格&#8203;山&#8203;豆&#8203;根&#8203;打&#8203;开&#8203;感&#8203; &#8203; &#8203;工&#8203;人&#8203;大&#8203;幅&#8203;度&#8203;恢&#8203;复&#8203;鬼&#8203;画&#8203;符
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
毕业论文--基于labview温度检测系统设计.doc53页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:150 &&
你可能关注的文档:
··········
··········
毕业设计(论文)
目: 基于LabVIEW的温度检测系统
随着测控技术的不断发展,测控技术正向着自动化,智能化,数字化和网络化的方向发展。美国NI公司的提出了“软件就是仪器”的概念,于是LabVIEW应运而生。
检测在当今社会的许多工业中不和或缺,有些环境恶劣的地方更是离不开远程的检测系统。
本设计就解决了有些重工业、制药业等行业中的有些场所间内不适合人进入时,还需要进行温度检测的问题。本设计有两个方面,上位机是在PC平台上运用LabVIEW软件开发检测界面,并且直观的观察温度变化曲线,根据需要还可以以Excel表格的形式,保存检测的历史数据,根据实时采集的温度数据和设定值比较,提示温度报警;下位机是通过单片机89E52读取温度数据,通过RS-232转USB接口,动如上位机中进行分析处理。
LabVIEW的通信模块NI-VISA在V3.0版本之后开始支持USB串口,使下位机与LabVIEW通信时可以不通过数据采集卡接收下位机的监测数据,使LabVIEW的灵活性和实用性更好,节约了硬件部分的成本。
关键词:LabVIEW;;
With the continuous development of measurement and control technology, and its technology is toward automation, intelligent, digital and network development. The company put forward the NI "software is instrument" concept, so LabVIEW arises at the historic moment.
Detection in today's society in many of the industry with or lack of, some environmental bad place is also can not get away from remote detection system.
This design is solved some heavy industry, pharmaceutical industry, etc in between some of place is not fit for human in, still need to temperature detection problem. This design has two sides, the PC is in the PC platform using the LabVIEW software development testing interface, and intuitive observe temperature curve, acc
正在加载中,请稍后...

我要回帖

更多关于 css 注释 的文章

 

随机推荐