精华内容
下载资源
问答
  • 这种频率定义及相应的周期测频原理不能正确反映在发生各种电磁过渡过程和机电过渡过程时电力系统的真实频率,在有噪音、谐波及操作干扰等情况下尤甚。作者提出的新的电力系统频率定义及相应的“虚拟转子”频率...
  • C语言宏定义用法总结

    万次阅读 多人点赞 2017-06-01 16:42:22
    本博文主要是总结#define的用法,包括定义符号与定义宏macro。预处理器的作用编译一个C语言程序的第一步骤就是预处理阶段,这一阶段就是宏发挥作用的阶段。C预处理器在源代码编译之前对其进行一

    前言

    最近在看源代码与开发项目的时候经常会遇到一些特殊的宏用户,接接触时感觉有点奇怪,其实是自己没有全面的熟悉宏的用法。在查阅完相关的材料后,写下这一篇总结,以期待以后忘记的时候可以重新打开回忆起里面的内容来。本博文主要是总结#define的用法,包括定义符号与定义宏macro。

    预处理器的作用

    编译一个C语言程序的第一步骤就是预处理阶段,这一阶段就是宏发挥作用的阶段。C预处理器在源代码编译之前对其进行一些文本性质的操作,主要任务包括删除注释、插入被#include进来的文件内容、定义和替换由#define 定义的符号以及确定代码部分内容是否根据条件编译(#if )来进行编译。”文本性质”的操作,就是指只是简单粗暴的由一段文本替换成另外一段文本,而不考虑其中任何的语义内容。

    #define 定义符号

    我们最常使用到的define的场景就是用#define来定义一个符号,比如

    #define MAX 0x7FFFFFFF

    定义了一个符号 MAX,每当后面的地方有MAX 符号出现的时候,预处理器就会把它替换成 0x7FFFFFFF.
    注意了,上面的替换只会发生在MAX是作为一个符号出现的地方。什么是以符号出现?简单的来说是就以类似于标识符出现的场景。比如

    #define MAX 0xFF
    int MAXX=MAX;

    是不会将MAXX前面的”MAX”替换的,因为这里”MAX”是后面的’X’一起构成了一个符号MAXX,并不是单独以MAX出现的;同理,printf("MAX"); 输出”MAX”字符串,而不会输出0xFF.
    下面是一些常见的例子:

    #define reg register
    #define do_forever for(;;)
    #define CASE break;case

    第一个为关键字“register”定义了一个短的别名,这样做的好处是即可以对齐代码,又易于维护。比如 如果那一天想把原来所有的register类型变量该为使用auto ,那么就可以直接在宏定义这里改就可以啦。
    第二个则是定义了一个更具描述性的符号来代替死循环。
    第三个则是定义了一个可以自动break的”关键字” case.这样可以不用手动输入break;了

    另外如果一个define的第二部分特别长的话,可以使用把它分成几行来写,出了最后一行之外,每行的末尾都要加一个反斜杠,例如:

    #define DEBUG_PRINT printf("File %s line %d :"\
                                                    "x=%d,y=%d,z=%d",\
                                                    __FILE__,__LINE,x,y,z)

    上面还使用了两个相邻字符串会被拼接成一个字符串的技巧。如果一个字符串字面量太长时也可以使用反斜杠分成几行来写,但是每行都需要使用双引号将字符串引起来再加反斜杠,否则字符串将会把每一行前面的空格包含进去。
    例如:

    #define str "123\
                                456"
    #define str2 "123"\
                            "456"      

    str与str2的区别在于,str的上下两部分子串之间会有许多空格符,而这可能不是我们想要的。而str2因为两个子符串是相邻的,所以会被编译器处理为同一个字符串,里面就不会出现多余的空格。
    另外 值的注意的是,如果在宏定义的时候在尾部加了分号”;”,那么就不要在使用DEBUG_PRINT的后面加上分号了,因为这样很容易出错。
    例如:

    #define DEBUG_PRINT printf("File %s line %d :"\
                                                    "x=%d,y=%d,z=%",\
                                                    __FILE__,__LINE,x,y,z);

    然后在后面有一处使用:

    if(...)
        DEBUG_PRINT;
    else
    ···

    这样子是会报错的,因为这里替换后有结果是:

    if(...)
        printf("File %s line %d :x=%d,y=%d,z=%d",__FILE__,__LINE,x,y,z);;
    else
    ···

    会报 else没有匹配if的错误,原因就是第二个;将if隔断了,编译器误认为if语句就此结束。
    因此在这样使用宏的时候,千万要注意分号只留一个就可以。

    #define 机制还允许把参数替换到文本中,这种实现机制被为宏(macro),2333千呼万唤使出来,原来这个带参数的才叫宏呀,上面说过的define充其量就是一个”定义”。

    宏的声明方式:

    #define name(parameter-list) stuff

    其中parameter-list是一个由逗号隔开的参数列表,它们可能出现在stuff中。参数列表的左括号必须与name紧邻。如果两者之间有任何空白,参数列表就会被解释位stuff的一部分。
    当宏被调用时,名字后面是一个由逗号分隔的值的列表,每个值都与宏定义中的一个参数相对应。当参数出现在程序中,与每个参数对应的实际值都将被替换到stuff中。

    但是需要注意的是,所有用于数值表达式进行求值的宏定义都要将stuff里面出现参数的地方加上括号,同时将stuff加上括号,这么做为了保证运算优先级

    例如:

    #define SQUARE(x) x*x
    int a =5;
    int b =SQUARE(a+1);

    b的结果是多少呢?文本替换大法后的结果为:

    int b =a+1*a+1;

    显然这不是我们想要的结果。这是因为宏是文本替换,并没有语义上的操作。如果SQUARE是一个函数,那么SQUARE(a+1)传入的是a+1的结果6,而不是以a+1这个整体进行操作。
    解决上面问题,只需要修改成:

    #define SQUARE(x) (x)*(x)

    这样b的初始化就等价于:

    int b =(a+1)*(a+1);

    这正是我们想要的。
    然而这么做仍然有一个问题,例如:

    #define SQUARE(x) (x)*(x)
    int a =10;
    int b =SQUARE(a+1);
    int c =121/SQUARE(a+1);

    我们想将c的值初始化为121除以a+1的平方,就是将c初始化为1。然而···
    我们手动替换一下,发现事实不是我们想像的:

    int c =121/(a+1)*(a+1);//int c =121/11*11;

    这么做的结果就是,c的值是121并不是我们想要的1,造成这种结果的本质原因是没有将宏里面的所有运算操作强制转为一个整体。其解决方法是将宏定义改为:

    #define SQUARE(x) ((x)*(x))

    如此即可。

    宏与函数

    宏相比函数而言的优势主要在于:
    1. 宏因为是文本替换,没有函数栈的维护代价
    2. 宏参数不带类型,可以做函数不能做的工作。

    解释一下,第一点 函数调用是利用函数栈帧来实现的,这个需要一定的系统资源。但是宏是直接文本替换,无函数调用过程。
    第二点是因为函数的参数列表要求每个参数必须带类型,当我们想实现把类型也当作参数传入时,函数是无法做到。例如下面的宏:

    #define MALLOC(size,type) ((type*)malloc(sizeof(type) * (size)))
    int * p =MALLOC(10,int);

    这个宏有点厉害了,传入大小和类型两个参数,然后动态分配出所需要的内存。这个肯定是无法用函数实现的。这个是不是与C++的模版有点相像?模版能够实现的技术基础就是能够把参数类型当作一种参数,而宏正好就支持!!!

    然而,宏的文本替换大法这么厉害,为什么还会有函数的存在嘞?
    最主要的原因是:宏的文本替换大法在处理带副作用的宏参数时会导致不可预料的后果。

    带副作用的宏参数

    什么叫带副作用的宏参数?副作用是指某些运算符在求值的同时也会永久地改变操作数,比如:
    i+1
    这个表达式求值没有副作用,这个式子不管运算多少次,式子的值不变。但是:
    ++i
    却不一样了,它运算100次与运算1次的结果是不一样的,因为每次运算都会永久改变i的值。
    那当副作用遇上宏参数会发生什么呢?看一个经典例子:

    #define MAX(a,b) ((a)>(b)?(a):(b))
    int a=0;
    int b =1;
    int c =MAX(a++,b++);

    根据宏替换大法,我们看c被预编译器处理后的样子:

    int c =((a++)>(b++)?(a++):(b++));

    ok,副作用一目了然。因为a++

    int max(a,b)
    {
        return a>b? a:b;
    }
    int a =0;
    int b =1;
    int c =max(a++,b++);

    这么执行的结果就是
    c=1,a=1,b=2;这是我们想要的。
    上面两者的区别在于,使用函数时,只在参数列表里面进行一次带副作用的运算;使用宏时,在宏的列表,宏的内容都执行了带副作用的运算。而我们通常只希望副作用运算执行一次。

    define 替换字符串(符号)里面的内容

    上面提到,当预处理器搜索#define定义的符号时,字符串常量或符号的子串内容并不进行替换。但是如果想要把字符串或符号里面的宏参数进行替换,主要有两种方法,这两种方法的核心思想都是想办法把原字符串(符号)分多个部分,每部分其实都是一个宏参数,通过对每一段进行替换来达到字符串(符号)替换目的:

    1. 利用相邻字符串被自动拼接成一个长字符串,这样就可以手动地将字符串分成多个小部分啦。举个例子:

    #define PRINT(FORMAT,VALUE) printf("The value is " FORMAT"\n",VALUE)
    PRINT("%d",x+3);

    将产生如下的输出:

    The value is 20;

    这么做的可行性在于:”The value is ” FORMAT “\n”,是三个字符串,但是由于他们是相邻的,所以在预处理后会拼接成一个长的字符串。而三个子字符串却可以提供很大的操作性。
    但是这个要求FORMAT是一个字符串才行。
    如果我们想打印宏参数的内容怎么办呢?
    可以使用 #arguement ,这种结构被预处理器翻译为”arguement”。编写下面的代码:

    #define PRINT(FORMAT,VALUE)\
    printf("The value of"#VALUE"is " FORMAT"\n",VALUE)
    printf("%d",x+3);

    它将输出:The value of x+3 is 20
    这是因为”The value of”#VALUE”is ” FORMAT”\n”实际上是包含了”The value of “,#VALUE,”is “,FORMAT,”\n” 五部分字符串,其中VALUE和FORMAT被宏参数的实际值替换了。

    2. 使用## 结构,这个用于处理符号。

    ##作用在于把位于它两边的符号连接成一个符号,通过这个就可以把分离的文本片段重新拼接成一个符号(标识符)
    例如:

    #define ADD_TO_SUM(sum_number,value)\
    sum##sum_number+=(value)
    int sum1=0;
    int sum2=1;
    int sum3=2;
    ADD_TO_SUM(2,100);

    最后一句就相当于在执行:sum2+=(100);,因为##的前面是sum,后面是sum_number+=(value).sum没有替换,sum_number以一个独立的符号出来,刚好就是宏参数的形式,所以就替换了。
    还是有点厉害。

    展开全文
  • 德尔菲——意见可靠预测方法

    千次阅读 2019-07-09 08:59:14
    德尔菲/得尔飞(Delphi Method) 目录 1德尔菲的简介 1.1德尔菲的起源演变 1.2德尔菲的典型特征 2德尔菲的特征 3德尔菲的具体实施步骤 3....

    原文地址:https://wiki.mbalib.com/wiki/%E7%89%B9%E5%B0%94%E8%8F%B2%E6%B3%95

    德尔菲法/得尔飞法(Delphi Method)

    目录

    德尔菲法的简介

      德尔菲法是在20世纪40年代由O.赫尔姆和N.达尔克首创,经过T.J.戈尔登和兰德公司进一步发展而成的。德尔菲这一名称起源于古希腊有关太阳神阿波罗的神话。传说中阿波罗具有预见未来的能力。因此,这种预测方法被命名为德尔菲法。1946年,兰德公司首次用这种方法用来进行预测,后来该方法被迅速广泛采用。

      德尔菲法也称专家调查法,是一种采用通讯方式分别将所需解决的问题单独发送到各个专家手中,征询意见,然后回收汇总全部专家的意见,并整理出综合意见。随后将该综合意见和预测问题再分别反馈给专家,再次征询意见,各专家依据综合意见修改自己原有的意见,然后再汇总。这样多次反复,逐步取得比较一致的预测结果的决策方法。

      德尔菲法依据系统的程序,采用匿名发表意见的方式,即专家之间不得互相讨论,不发生横向联系,只能与调查人员发生关系,通过多轮次调查专家对问卷所提问题的看法,经过反复征询、归纳、修改,最后汇总成专家基本一致的看法,作为预测的结果。这种方法具有广泛的代表性,较为可靠。

    德尔菲法的起源演变

    • 起源

      德尔菲法是在20世纪40年代由赫尔默(Helmer)和戈登(Gordon)首创,1946年,美国兰德公司为避免集体讨论存在的屈从于权威或盲目服从多数的缺陷,首次用这种方法用来进行定性预测,后来该方法被迅速广泛采用。20世纪中期,当美国政府执意发动朝鲜战争的时候,兰德公司又提交了一份预测报告,预告这场战争必败。政府完全没有采纳,结果一败涂地。从此以后,德尔菲法得到广泛认可。

      德尔菲是古希腊地名。相传太阳神阿波罗(Apollo)在德尔菲杀死了一条巨蟒,成了德尔菲主人。在德尔菲有座阿波罗神殿,是一个预卜未来的神谕之地,于是人们就借用此名,作为这种方法的名字。

    • 演变

      德尔菲法最初产生于科技领域,后来逐渐被应用于任何领域的预测,如军事预测、人口预测、医疗保健预测、经营和需求预测、教育预测等。此外,还用来进行评价、决策、管理沟通和规划工作。

    德尔菲法的典型特征

      (1) 吸收专家参与预测,充分利用专家的经验和学识;

      (2) 采用匿名或背靠背的方式,能使每一位专家独立自由地作出自己的判断;

      (3) 预测过程几轮反馈,使专家的意见逐渐趋同。

      德尔菲法的这些特点使它成为一种最为有效的判断预测法。

    德尔菲法的特征

    1. 资源利用的充分性。由于吸收不同的专家与预测,充分利用了专家的经验和学识;
    2. 最终结论的可靠性。由于采用匿名或背靠背的方式,能使每一位专家独立地做出自己的判断,不会受到其他繁杂因素的影响;
    3. 最终结论的统一性。预测过程必须经过几轮的反馈,使专家的意见逐渐趋同。

      正是由于德尔菲法具有以上这些特点,使它在诸多判断预测或决策手段中脱颖而出。这种方法的优点主要是简便易行,具有一定科学性和实用性,可以避免会议讨论时产生的害怕权威随声附和,或固执己见,或因顾虑情面不愿与他人意见冲突等弊病;同时也可以使大家发表的意见较快收敛,参加者也易接受结论,具有一定程度综合意见的客观性。

    德尔菲法的具体实施步骤

    1. 组成专家小组。按照课题所需要的知识范围,确定专家。专家人数的多少,可根据预测课题的大小和涉及面的宽窄而定,一般不超过20人。
    2. 向所有专家提出所要预测的问题及有关要求,并附上有关这个问题的所有背景材料,同时请专家提出还需要什么材料。然后,由专家做书面答复
    3. 各个专家根据他们所收到的材料,提出自己的预测意见,并说明自己是怎样利用这些材料并提出预测值的。
    4. 将各位专家第一次判断意见汇总,列成图表,进行对比,再分发给各位专家,让专家比较自己同他人的不同意见,修改自己的意见和判断。也可以把各位专家的意见加以整理,或请身份更高的其他专家加以评论,然后把这些意见再分送给各位专家,以便他们参考后修改自己的意见。
    5. 将所有专家的修改意见收集起来,汇总,再次分发给各位专家,以便做第二次修改。逐轮收集意见并为专家反馈信息是德尔菲法的主要环节。收集意见和信息反馈一般要经过三、四轮。在向专家进行反馈的时候,只给出各种意见,但并不说明发表各种意见的专家的具体姓名。这一过程重复进行,直到每一个专家不再改变自己的意见为止。
    6. 对专家的意见进行综合处理。

    德尔菲法实施注意事项

      ① 由于专家组成成员之间存在身份和地位上的差别以及其他社会原因,有可能使其中一些人因不愿批评或否定其他人的观点而放弃自己的合理主张。要防止这类问题的出现,必须避免专家们面对面的集体讨论,而是由专家单独提出意见。

      ② 对专家的挑选应基于其对企业内外部情况的了解程度。专家可以是第一线的管理人员,也可以是企业高层管理人员和外请专家。例如,在估计未来企业对劳动力需求时,企业可以挑选人事、计划市场生产及销售部门的经理作为专家。

    • 其他注意事项:

      (1) 为专家提供充分的信息,使其有足够的根据做出判断。例如,为专家提供所收集的有关企业人员安排及经营趋势的历史资料和统计分析结果等等。

      (2) 所提问的问题应是专家能够回答的问题。

      (3) 允许专家粗略的估计数字,不要求精确。但可以要求专家说明预计数字的准确程度。

      (4) 尽可能将过程简化,不问与预测无关的问题。

      (5) 保证所有专家能够从同一角度去理解员工分类和其他有关定义。

      (6) 向专家讲明预测对企业和下属单位的意义,以争取他们对德尔菲法的支持。

    德尔菲法的应用

      如某书刊经销商采用德尔菲法对某一专著销售量进行预测。该经销商首先选择若干书店经理、书评家、读者、编审、销售代表和海外公司经理组成专家小组。将该专著和一些相应的背景材料发给各位专家,要求大家给出该专著最低销售量、最可能销售量和最高销售量三个数字,同时说明自己作出判断的主要理由。将专家们的意见收集起来,归纳整理后返回给各位专家,然后要求专家们参考他人的意见对自己的预测重新考虑。专家们完成第一次预测并得到第一次预测的汇总结果以后,除书店经理B外,其他专家在第二次预测中都做了不同程度的修正。重复进行,在第三次预测中,大多数专家又一次修改了自己的看法。第四次预测时,所有专家都不再修改自己的意见。因此,专家意见收集过程在第四次以后停止。最终预测结果为最低销售量26万册,最高销售量60万册,最可能销售量46万册。

      德尔菲法作为一种主观、定性的方法,不仅可以用于预测领域,而且可以广泛应用于各种评价指标体系的建立和具体指标的确定过程。

      例如,我们在考虑一项投资项目时,需要对该项目的市场吸引力作出评价。我们可以列出同市场吸引力有关的若干因素,包括整体市场规模、年市场增长率、历史毛利率竞争强度、对技术要求、对能源的要求、对环境的影响等。市场吸引力的这一综合指标就等于上述因素加权求和。每一个因素在构成市场吸引力时的重要性即权重和该因素的得分,需要由管理人员的主观判断来确定。这时,我们同样可以采用德尔菲法。

    德尔菲法的优缺点

      德尔菲法同常见的召集专家开会、通过集体讨论、得出一致预测意见的专家会议法既有联系又有区别。德尔菲法能发挥专家会议法的优点,即

    1. 能充分发挥各位专家的作用,集思广益,准确性高。
    2. 能把各位专家意见的分歧点表达出来,取各家之长,避各家之短。

      同时,德尔菲法又能避免专家会议法的缺点:

    1. 权威人士的意见影响他人的意见;
    2. 有些专家碍于情面,不愿意发表与其他人不同的意见;
    3. 出于自尊心而不愿意修改自己原来不全面的意见。

      德尔菲法的主要缺点是过程比较复杂,花费时间较长

    德尔菲法与其他决策法相比较

    效果标准/决策方法互动群体法脑力激荡法名义群体法德尔菲法电子会议法
    观点的数量中等
    观点的质量中等
    社会压力中等
    财务成本
    决策速度中等中等中等
    任务导向
    潜在的人际冲突中等
    成就感从高到低中等
    对决策结果的承诺不适用中等
    群体凝聚力中等

    互动群体法有助于增强群体内部的凝聚力脑力激荡法可以使群体的压力降到最低,德尔菲法能使人际冲突趋于最小,电子会议法可以较快的处理各种观点。

    德尔菲法案例分析

    案例一:德尔菲法应用案列[1]

      某公司研制出一种新兴产品,现在市场上还没有相似产品出现,因此没有历史数据可以获得。公司需要对可能的销售量做出预测,以决定产量。于是该公司成立专家小组,并聘请业务经理、市场专家和销售人员等8位专家,预测全年可能的销售量。8位专家提出个人判断,经过三次反馈得到结果如下表所示。

    专家编号第一次判断第二次判断第三次判断
     最低销售量最可能销售量最高销售量最低销售量最可能销售量最高销售量最低销售量最可能销售量最高销售量
    1150750900600750900550750900
    2200450600300500650400500650
    3400600800500700800500700800
    4750900150060075015005006001250
    5100200350220400500300500600
    6300500750300500750300600750
    7250300400250400500400500600
    8260300500350400600370410610
    平均数345500725390550775415570770
    • 平均值预测:

      在预测时,最终一次判断是综合前几次的反馈做出的,因此在预测时一般以最后一次判断为主。则如果按照8位专家第三次判断的平均值计算,则预测这个新产品的平均销售量为:(415+570+770)/3=585

    • 加权平均预测:

      将最可能销售量、最低销售量和最高销售量分别按0.50、0.20和0.30的概率加权平均,则预测平均销售量为:570*0.5+415*0.2+770*0.3=599

    • 中位数预测:

      用中位数计算,可将第三次判断按预测值高低排列如下:

      最低销售量:

      300 370 400 500 550

      最可能销售量:

      410 500 600 700 750

      最高销售量:

      600 610 650 750 800 900 1250

      最高销售量的中位数为第四项的数字,即750。

      将可最能销售量、最低销售量和最高销售量分别按0.50、0.20和0.30的概率加权平均,则预测平均销售量为:

      600*0.5+400*0.2+750*0.3=695

    案例二:德尔菲法在企业人力资源预测中的运用[2]

      国美公司专业生产电声产品,在20世纪80年代早期,国美凭借自己在行业内技术工艺的领先,迅速在国内市场上占据领先的地位,但由于国内市场管理混乱,假冒产品大行其道,加上三角债问题,使国美在20世纪80年代后期开始逐步放弃了国内市场,转而做OEM出口。近些年,由于电声行业的整体需求加大,加之欧美企业关闭自己的生产厂转向国内采购,使国美在近10年来得到快速发展,近年公司销售额每年以平均26%的速度增长。截至2001年3月,公司销售收入达28063万元,员工总数达2315人。

      表1:近年来公司各部门人员变动情况(单位:万元;人)

    Image:表1:近年来公司各部门人员变动情况.jpg

      1997年来公司各部门人员变动情况如表1。国美公司内部组织结构变动较频繁:

      (1)成立综合办。1998年公司精简机构,将人事部后勤人员)人划出。2000年将总结办的网络管理人员6人合并重组为综合办。

      (2)撤消市场部。1999年公司将负责内销的13人调出,6人去了总经办,7人去了物料部;2001年公司又将市场部剩余的22人并入物料部。

      (3)扩大质管部。2000年公司将派往供应商IQCQC人员13人划归质管部管理。

      (4)ERP的导入。2000年公司导入ERP,物料部10名打单员划入财务部管理。

      一、预测

      1、统计方法的预测结果

      本研究通过先后以销售总量(X1)、销售总额(X2)、销售利润(X3)、出口创汇(X4)为自变量对各部门人员变量进行回归。获取的数据为1997-2000年,采用的统计分析软件为社会科学统计软件包(SPSS)和统计分析软件包(SAS)。通过计算机的处理和分析,得到以下回归方程:

      (1)总经办人员预期数量:Y1=0.0085*X1-0.0026*X3-0.0065*X4+9.151

      (其中Y1为总经办人员预期数量,X1、X2、X3、X4分别为销售总量、销售总额、销售利润和出口创汇,下同)

      (2)财务部人员预期数量:Y2=0.0189*X1+0.007743*X3-0.014*X4-18.548

      (3)市场部人员预期数量:Y3=0.008797*X1-0.0027*X3-0.0068*X4+12.958

      (4)物料部人员预期数量:Y4=0.02667*X1-0.00039*X3-0.013*X4-25.39

      (5)人事部人员预期数量:Y5=*0.0045*X1-0.0019*X3-0.0032*X4+4.716

      (6)生产部人员预期数量:Y6=*0.01794*X1+0.0043*X3-0.0087*X4-22.759

      (7)技术部人员预期数量:Y7=-0.0054*X1+0.0026*X3+0.0034*X4+31.106

      (8)质管部人员预期数量:Y8=0.00160*X1+0.001818*X3-0.0012*X4+5.915

      最后得出公司2001-2002的各部门人员需求预测数据(表2):

      表2:统计方法得出的2001-2002年各部门人员需求预测数据

    Image:表2:统计方法得出的2001-2002年各部门人员需求预测数据.jpg

      国美公司各部门人员的历史数据变动性较大,利用回归分析方法进行预测得出的结果显然与实际情况距离较远。因此公司决定采用德尔菲法进行预测。

      2、德尔菲法预测过程与结果

      首先,作预测筹划工作,包括:确定预测的课题及各预测项目:设立负责预测组织工作的临时机构;选择若干名熟悉所预测课题的专家。2001年3月,公司选择了8位企业内部专家参与预测,包括正副总经理4名,人事、物料、质管、生产经理各一名,他们对企业运作和各部门人员结构都非常熟悉。然后公司召开了专家会议,明确了预测项目、进程和注意事项。

      然后,由专家进行预测。公司把包含预测项目的预测及有关背景材料,包括公司组织架构及岗位编制图、1997年以来公司各部门变动与人员流动图、公司未来2年发展规划、预测表等资料发给专家,由各位专家独立作出预测。

      再后,进行统计与反馈。专家意见汇总后,对各专家意见进行统计分析,综合成新的预测表,并把它再分别寄送给各位专家,由专家们对新预测表作出第二轮判断或预测。如此反复,经过三轮,专家的意见趋于一致。

      最后,表述预测结果。把经过几轮专家预测而形成的结果如下表:

    Image:表3:国美公司2002年各部门人数预测.jpg

      预测结束时间为2001年4月,将当时的预测人数与2002年10月的实际人数比较,预测结果基本正确。

    Image:表4:国美公司2002年各类人员人数预测.jpg

      在预测中,我们还对包括产品开发人员、财务人员、市场专员、管工、管理人员、职能人员、技术人员等各类人员的2002需求情况进行了预测。从表4可看出,当时的预测人数与目前的实际人数也基本一致。

      二、讨论

      1、德尔菲法是目前企业人力资源需求短期预测中使用最广、有效性最好的方法之一

      人力资源需求预测有两类不同方法:一种是定量方法,一种是定性方法。定量的方法包括比率预测法统计分析法,这类方法往往合适于相对稳定的企业,而无法考虑企业业务策略和市场条件的变化。定性的方法主要有名义团体法和德尔菲法。

      在国外企业实践中,不少公司喜欢用定量的方法进行预测,如采用线性回归或多元回归方法,通过建立各种简单的或复杂的预测模型,将未来人员需求是与销售额等经济指标的增加联系起来考虑。从美国企业来看,更多的公司喜欢采用定性的方法进行预测,如许多公司喜欢利用名义团体法,由高层管理者和专家组成小组,围绕公司业务战略、企业和行业销售状况、资本风险等因素的变化,通过开会来共同预测公司未来的人力需求情况。但由于担心缺乏衡量预测数据的客观标准,和与会者之间人际关系群体压力等因素,许多大公司都喜欢采用德尔菲法!

    Image:表5:德尔菲法与定量方法的比较.jpg

      与定量方法相比,德尔菲法无疑是一种更适合当前大多数企业的预测方法。

      首先,从内部组织因素来看,企业的组织业务、技术结构总是处于不断变动中,定量方法显然无法预测这种动态环境下人力资源需求趋势。

      其次,从外部环境因素来看,目前企业的市场环境和政策等因素也是在不断变化的,单纯用统计模型的方法,依据过去的一些数据来预测未来人力需求趋势,很难涵括各种复杂的变化因素。

      第三,从有效性和准确的角度来讲,定量方法的准确性多数情况下也低于德尔菲法,卡尔科维奇(1972)指出:德尔菲法预测的购买者需求和实际雇佣人数之间的一致性,明显比回归分析所揭示的预测要准确。

      2、使用德尔菲法应注意的问题

      (1)尽量避免专家在预测中倾向性选择信息和冒险心理效应。在本次预测的后两轮,从统计数据可以看出,不少专家有一种压低预测人数的倾向,不管是职能人员人数,还是技术人员人数,都预估得过低。因此,在预测的专家培训中,必须强调各自的独立判断;在预测过程中,应注意保密,避免人际压力的影响。最好的办法是由独立的机构而不是人力资源部来汇总、处理信息。

      (2)与名义团体法配套使用。德尔菲法的难点在于如何提出简单明了的问题,如何使专家对预测中涉及的各种概念和指标理解一致,以及如何将专家意见归纳总结。如果在预测前能对专家进行全面的培训,预测后再集中专家采用名义团体法进行讨论,最后达成一致意见,效果会更好。

    相关条目

    参考文献

    1.  统计预测与决策(第二版) - 德尔菲法(上海财经大学教学课件)
    2.  刘善仕.德尔菲法在企业人力资源预测中的运用.企业经济.2003/02
    展开全文
  • 视觉SLAM笔记(44) RGB-D 的直接

    万次阅读 2019-10-30 19:24:37
    稀疏直接定义直接的边、使用直接估计相机运动、半稠密直接、直接的讨论


    1. 稀疏直接法

    现在演示如何使用稀疏的直接法
    为了保持程序简单,使用 RGB-D 数据而非单目数据,这样可以省略掉单目的深度恢复部分
    基于特征点的深度恢复已经在 视觉SLAM笔记(34) 三角测量 介绍过了
    而基于块匹配的深度恢复将在后面介绍

    所以这里考虑 RGB-D 上的稀疏直接法 VO(Visual Odometry,视觉里程计)
    由于求解直接法最后等价于求解一个优化问题
    因此可以使用 g2o 或 Ceres 这些优化库帮助我们求解
    以 g2o 为例设计实验,在使用 g2o 之前,需要把直接法抽象成一个图优化问题

    显然,直接法是由以下顶点和边组成的:

    1. 优化变量为一个相机位姿,因此需要一个位姿顶点
      由于在推导中使用了李代数,故程序中使用李代数表达的 SE(3) 位姿顶点
    展开全文
  • HDMI接口定义,传输流程

    万次阅读 2019-06-12 16:45:10
    Parity Bits校验码是用于检验HDMI Cable传输过程中是否发生了错误,如果该Packet在HDMI接收端校验错误,如果只有一个bit的错误,那么可以修正,超过1bit的错误会被判别为无效Packet(由于HDMI是一直在发送数据因此...

    全文摘自:https://www.cnblogs.com/TaigaCon/p/3840653.html


    HDMI,全称为(High Definition Multimedia Interface)高清多媒体接口,主要用于传输高清音视频信号。

     

    HDMI引脚:

    HDMI有A,B,C,D,E五种引脚类型,目前市面中比较常见的就是Type A:

    其中

    • 1-9 都是TMDS数据传输实际上用到的引脚,分为0,1,2三组
    • 10-12 为TMDS时钟信号,如当前Video Timing为480p@60Hz(Htotal:800,Vtotal:525),则TMDS clock = 800x525x60 = 25.2MHz。TMDS clock就像是对像素的打包,一个clock分别在三个Channel传输一个像素的R、G、B(8bit)信号。
    • 13 为CEC(consumer electronic control)类似一种扩展的HDMI功能,供厂家自己定制HDMI消息,(比如说你有一台sony的DVD与TV,两者用HDMI线接上,如果你用TV的遥控器可以控制DVD,另DVD执行某种功能,那么该功能的命令信号就是通过TV与DVD间的CEC引脚传输的)
    • 14 为保留引脚,未使用(或者也可以为CEC提供多一个引脚)
    • 15-16 为I2C引脚,用于DDC(Display Data Channel,主要用于EDID与HDCP的传输)传输,具体可以查看。在HDMI的流程中,DDC通信几乎是最先做的(前有Hotplug),因为HDMI的主从两个设备需要通过DDC来获得他们对方设备的EDID,从而得到各种信息,并且通过比较timming以确定以后送出来的timming为最合适的
    • 17 为接地引脚
    • 18 为5v的AC引脚
    • 19 为Hotplug(热拔插)引脚(用于监测HDMI设备有没有存在,如果存在(Hotplug为high)那么可以通过DDC去读EDID),HDMI有规定在HDMI 5vAC断电时source device可以读reciever device的EDID,也就是需要Hotplug为High。其中有两种Hotplug相关的情况会导致HDMI被识别为DVI:
      1. Hotplug为High,不过EDID并没有准备好,那么信号源设备会由于无法读到EDID而认为接收设备为DVI,这样会导致HDMI有图像无声的问题。
      2. Hotplug为Low,也会导致信号源无法读到EDID而认为接收设备为DVI,从而导致HDMI有图无声
      3. 在TV这种有多个HDMI通道的情况下,有时会在多个HDMI通道进行切换,切换后HDMI通道应当先初始化,即先把Hotplug拉低,通知HDMI source device之前所用的EDID已经改变,需要重新读取,那么source device在Hotplug被拉高的时候会去读取新的EDID,但是拉低这个过程至少需要100ms,否则source device有可能不会去读取新的EDID,从而输出DVI信号

     

    传输流程

    HDMI TMDS传输的数据类型有三种(加上Hsync与Vsync就算4种):

    1. Preamble(控制信息),主要用于控制接下来传输的数据是Data Island或者Video Data
    2. Data Island(数据包),各种类型的包信息,包括音频数据包,图像信息包等
    3. Video Data (视频信息),视频像素数据,HDMI可以传输RGB与YUV两种格式的像素数据
    4. 还有Hsync与Vsync

    HDMI的数据传输有TMDS0,TMDS1,TMDS2三个通道,每个通道的传输流程都是一样的:

      

    如果是8bit的数据进入TMDS编码器,得到抗干扰性强的10bit TMDS信号,然后再进行串行化输出;在接收端收到串行的HDMI信号后,进行信号复原,得到10bit的TMDS信号,最后用TMDS解码器解码得到原来的8bit数据。

    总体传输流程如下:

      

      

    1. 如果传输的是Video Data,并且格式为RGB,那么会占用三个通道的所有24bit输入,Channel0[7:0]用于传输B,Channel1[7:0]用于传输G,Channel2[7:0]用于传输R。
    2. 如果传输的是Data Island,则占用三个通道共10bit输入,Channel0[3:2]用于传输Data Island Header(包头),Channel1[0:3]与Channel2[0:3]用于传输Data Island Content(包内数据)。
    3. 如果传输的是Preamble,则占用1,2两个通道共4bit输入,Channel1[1:0]与Channel2[1:0]分别为CTL0,CTL1,CTL2,CTL3,用于判断接下来输入的是Video Data或者Data Island

    对于Hsync与VSync,会占用Channel0通道的两个bit输入,Channel0[0]为Hsync,Channel0[1]为Vsync

     

    传输周期

    HDMI的TMDS数据传输可以分为三个传输周期:

    1. Control Period期间会传输Hsync,Vsync,并且在该时期的最后阶段会传输Preamble
    2. Data Island Period期间会传输Data Island(数据包),也会有Hsync与Vsync
    3. Video Data Period期间会传输Video Data(视频像素数据)

    某帧的总体周期如下:

      

    三个传输周期的过渡如下:

      

    1. 左边是Control Period,传输有Hsync,Vsync与Preamble
    2. 中间是Data Island Period,传输有Hsync,Vsync,以及两个Packet Header与Packet(每32个clock 一个packet);另外Data Island的两端会用Guard Band保护并隔开Data Island的数据,因为这个阶段传输的数据大多是非常重要的,比如其中就有图像分辨率,决定后面的Video Data数据的显示方式
    3. 右边是Video Data Island,传输视频像素数据,在该时期的开头也有Guard Band

     

    Data Island Packet结构

      

    所有Data Island Packet都以32个时钟脉冲为一个周期,也就是说每32 clk传输一个包。

    以上图为例,

    1. 包头部是BCH block 4,由Channel0[2]传输,32clk表示有32bit,则为4byte,前三个byte为包头,最后一byte为校验码
    2. 包体为BCH block 0,1,2,3,分别由Channel1,Channel2共8根线传输,共有24byte与6byte的校验码
    3. Parity Bits校验码是用于检验HDMI Cable传输过程中是否发生了错误,如果该Packet在HDMI接收端校验错误,如果只有一个bit的错误,那么可以修正,超过1bit的错误会被判别为无效Packet(由于HDMI是一直在发送数据因此无法重发错误Packet?)

    所以说,在接收端,在解完包之后,需要取出各个BCH block的Parity bit,进行Calibration(校验)

    Packet类型各种各样,详细请看HDMI Spec

     

    Audio Clock

    Audio的采样率有44100,48000,192000等,是各种各样,在HDMI传输时,Audio是PCM级(无压缩)传输,把PCM数据打散到各个包内,为了得到每个音频帧的数据,也需要知道Audio的采样率。HDMI中规定Audio的传输方式:

    Audio采样率fs重建依靠的主要参数为:

    1. TMDS Clock
    2. CTS
    3. N

    在发送设备这端,已知参数有采样率fs,视频时钟Video Clock(TMDS clock),以及预先设定好的参数N,求CTS:

    在接收设备这端,TMDS clock通过硬件设备可以得到,N,与CTS通过Audio Packet传输过来,求fs:

    在接收端为了保持fs的稳定与精确,需要进行锁相,即用VCO(Voltage-controlled oscillator压控振荡器,通过电压控制产生的频率)产生合适的频率,然后用PFD(Phase Frequency Detector)来锁频

     

    1. 首先,由于VCO有个最佳的工作区域如(200MHz~500MHz),那么为了保证VCO在最佳工作频率内,我们可以从后倒推回来,先对输出的fa128做乘法得到
      由于只有那么几种(44.1k,48k等),所以比较容易得到与
    2. 然后,为了更快进行频率匹配,需要对近来的频率(就是晶振时钟)或者(pixel clock)做除法,也对做除法,令两个趋向相等。对于细微的区别可以用D Code 进行修正
    3. 最后做PFD锁相
    4. 第2,3步的反馈操作循环地进行,最后可以得出比较稳定的
    5. 最终得到

     

    HotPlug

    HotPlug即热拔插,当接上接口时就可以判定设备是否存在,以进行后续工作。

    HDMI source device(HDMI HPD)会监测sink device的Hotplug端口,如果Hotplug为High,则证明设备可以工作,然后去读取DCC,如果为low,则证明设备已断开。

    HDMI sink device应该通过把Hotplug拉低,来通知source device EDID已经被改变,那么source device在Hotplug被拉高后,就会重新来读取新的EDID,拉低这段时间应该多于100ms。

    HDMI规定,HDMI 的5v引脚通电时,可以通过DCC去读取EDID,即需要保证Hotplug为high,有些Hotplug是直接接到5V上的(如下)。

    Hotplug接法:(HDMI HPD(Hotplug detect ?)检测sink的Hotplug端)

    上面用5V引脚进行供电,并接上Hotplug,这样做就能保证每次source device接上sink device时,都可以去读取到EDID。但是这样做有一个缺点,当5V电源断开时,会有5v的电压回灌给HDMI HPD与Hotplug,5V电压会冲击Hotplug,一旦Hotplug引脚无法承受5V电压的回灌,会被打穿。

    下面有个较好的Hotplug接法:

     

    上面用的是额外的GPIO引脚加上三极管控制HDMI HPD为0还是1,如果HDMI0_HPD_CTL输出0,那么三极管断开,HDMI0_HPD侦测到High,如果HDMI0_HPD_CTL输出1,那么三极管打通,HDMI0_HPD侦测到low。

     

    HDMI Sink

    例如像TV这种就是HDMI的接收端,那么HDMI接收端需要做些什么东西。

    HDMI可以接收到的有三个通道的TMDS Data,TMDS Clock,可以设置Hotplug,还有DCC传输用的I2C引脚。上面已经讲了TMDS Data,与设置Hotplug,接下来分析TMDS Clock。

    TMDS Clock 就是Pixel Clock,即一个像素点所用的时钟频率。TMDS Clock通过clk 引脚传输到接收端,但是接收端并不清楚发送端发过来的TMDS Clock 频率为多少,因此需要通过Phy(PHY是模拟数字转换部分,不同于ADC,PHY是不知道采样频率的,需要自己锁频、锁相,侦测确切的输入频率)来进行锁相得到。但是由于HDMI频宽太宽(480P@60Hz为25.2MHz,1080P@60Hz为162MHz,甚至还有高达340MHz的),一般VCO(压控振荡器,通过电压控制产生的频率)无法覆盖这么大的范围,因此需要分频带来设置Phy:

    先侦测输入频率落在哪个频带,然后根据不同频带做不同设置。

    用TV产生的晶振来数count,数得count后就知道TDMS Clock了

    ??

    或者用1024个TMDS Clock来数晶振个数

    ??

     

    由于视频信号从RGB个8bit通过TMDS编码后变成了10bit,然后又串行化,所以实际用于接收TMDS Data所用的时钟应该为:

    另外ReceiveClock也可以不用直接采用上面的乘法,而是采用TMDSClock为参考、硬件锁相的方法来得到。

    得到ReceiveClock后就可以去设置频率PLL,然后对三个通道进行采样得到TMDS Data。

     

    Timming Detect

    在Sink端还有需要进行Timming Detect,因为如果设备可以支持(如chroma),HDMI可以自由更换Timming,而当Timming更换了之后,Sink需要重新设定Phy。因此,通过侦测频率的改变来检测是否更换了Timing是必要的。一般会有一个中断服务(或循环)线程来侦测频率的改变,一旦频率改变后,该进程会通知重新设定Phy,保证HDMI的正确运行 

      

     

    HDMI版权内容保护之HDCP

    HDCP通过DDC传输

    HDCP主要用于版权视频的保护,举例来说,如果有一台蓝光DVD播放机可以播放blueray DVD,并且该DVD已经获得HDCP授权,你现在想把该DVD影像输出到某台TV,但是该TV没有获得HDCP授权,那么该TV可能就没法播放影像,或者播放质量下降,如出现雪花,图像从1080p变为480p,或者没有声音,都有可能。

    HDCP是靠两个设备的交互进行HDCP授权认证的,认证流程如下

     

    1. Transmitter会发送一个key An(64bit)与Aksv(key selection vector 40bit)给Receiver
    2. Receiver接收到An后,也会发送一个Bkvs以及REPEATER(表明B设备是否为Repeater设备)给Transmitter
    3. Transmitter开始HDCP认证码算法:

      要理解算法,首先我们需要知道ksv是用来干嘛的

      1. 在每个HDMI设备内部,都会保存40组64bit的key,key[40]
      2. 40bit的kvs,每一个bit都是一个索引,当kvs的某一位n为1时,会把key[n]取出来,
      3. 把所有的key[n]相加,得到km,
    4. Receiver也会做HDCP认证码算法这个步骤得到km'
    5. Transmitter与Receiver都会用km\km'去做hdcpBlkCipher,得到一个值R0与R0'
    6. 100ms后Receiver把R0'发送到Transmitter与R0做比较,相等则认为认证完毕。当然km = km'才能保证R0 = R0'。
    7. 此后的每一帧,Transmitter与Receiver都会运行一次hdcpBlockCipher,不过参数为上次生成的Ks与M,生成的新参数为Ks,M,T
    8. 在第128帧的时候,另R = T
    9. 在间隔第一次通信的2s后,再次进行认证
    10. 后续都采用7,8,9这三个步骤进行迭代认证

     

    此外HDMI自1.1后还支持一个更快速与频繁的认证方式,就是上方设备通信图的下半部分

    1. 在每第16的倍数帧,用T与当前帧的Channel0的0像素做异或得到Pj
    2. Channel0的0像素到达Sink后,也与Sink的T‘做异或得到P'j
    3. Sink把P'j发送到Source,与Pj做比较,相同则通过认证

    了解HDCP对于处理HDMI的异常现象很有帮助,比如说如果时而出现雪花,有可能是信号不好导致Channel0的0像素出错,从而第二阶段的认证有时会不成功...

     

    HDMI Sink总流程

     

    1. 提取与分割10bit的TMDS串行数据
    2. 10bit的数据,通过不同线路进来的,判断是那种类型的:DE,Data Island,RGB,Hs,Vs,Ctrl
    3. TMDS解码
    4. HDCP解码,同时Hs,Vs,DE做delay
    5. RGB与DE,Hs,Vs...
    6. BCH解码得到Packet,错误验证
    7. Packet含义解析
    8. 如果是信息,则存到内存
    9. 如果是Audio Data,生成采样频率
    10. Audio输出
    展开全文
  • 理解梯度下降

    千次阅读 2018-06-18 11:11:48
    本文及其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习与应用》,清华大学出版社,雷明著,由SIGAI...在各种最优化算法中,梯度下降是最简单、最常见的一种,在深度学习的训练中被广为使用。在本...
  • 线性探测:线性探测中函数是位置i的函数,这相当于当发生冲突的时候,逐个单元甚至回绕查询到一个空单元,也就是说数据都需要放置在这一个表格中,当发生冲突的时候就出发上面的机制,不过这样做,花费的时间是...
  • 帮朋友改造显卡风扇发现一个叫FG引脚,并不知是神马。...可以用函数信号发生器提供信号测试Duty--转速曲线。 MCU可以控制PWM控制转速。可以通过FG做闭环控制。 注意接口都是开集电极输出,需要上拉电阻。 ... ..
  • 最优化方法:牛顿迭代和拟牛顿迭代

    万次阅读 多人点赞 2014-04-27 09:18:18
    http://blog.csdn.net/pipisorry/article/details/24574293牛顿和拟牛顿(Newton's method & Quasi-Newton Methods)牛顿(Newton's method) 又称为牛顿-拉弗森方法(Newton-Raphson method),单变量下又...
  • 2、连接器的机械特性 由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。最近,8管脚的RJ-45型连接器变得越来越普遍,尽管它的管脚分配相差很大。...
  • 视觉SLAM笔记(30) 特征点

    万次阅读 2019-10-08 18:46:15
    特征点、特征点、ORB 特征(FAST 关键点、BRIEF 描述子)、特征匹配
  • 光流(optical flow)简介

    千次阅读 2019-04-12 09:19:13
    光流理论背景 1.什么是光流 光流(optical flow)是空间运动物体在观察成像平面上的像素运动的瞬时速度。 光流是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应...
  • 最优化问题(三) 之 外点(罚函数

    千次阅读 多人点赞 2020-10-19 21:04:51
    数学定义 考虑约束优化问题: 1) 对于等式约束问题, 可采用前面提到的拉格朗日乘子。这里我们做一些简化,对每个约束项采用相同的权重,定义如下辅助函数: 其中, δ\deltaδ为足够大的正数。注意,这里的约束...
  • 错误推测

    千次阅读 2019-04-21 16:47:00
    1、定义:是指利用直觉和经验猜测出出错的可能类型,有针对性的列举出程序中所有可能的错误和容易发生错误的情况,  它是测试经验丰富的测试人员喜欢使用的一种测试用例设计方法。 2、基本思想:  -基本思想是...
  • 2. 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。  typedef unsigned char boolean; /* Boolean type. */  typedef unsigned long uint32; /* Unsigned 32 ...
  • 人工智能--框架表示

    万次阅读 2019-03-27 23:19:28
    文章目录框架理论框架的基本结构框架的表示实例框架框架系统框架之间的纵向联系框架之间的...用以往经验来认识新事物使人们常用的方法,但是我们又不可能把过往发生过的所有经验都存在脑海中,而只能用一种通用的数...
  • 定义函数时定义形参,调用函数时传递实参;函数返回值通过return获得;不带返回值时定义为空类型。函数调用形式为函数名 (实参表列)。C语言可以嵌套调用函数。在调用函数时又调用该函数本身为递归,必须有退出条件...
  • 概率论的定义(一)

    千次阅读 2018-04-23 14:25:37
    官方这样描述:是指当随机事件中各种可能发生的结果及其出现的次数都可以由演绎或外推得知,而无需经过任何统计试验即可计算各种可能发生结果的概率。用我们平民的话来说,就是有限等可能事件发生的概率。比如m(A)...
  • [C++] 结构体Struct类型和变量定义

    千次阅读 2020-09-08 18:12:32
    //定义一个结构体类型 //定义一个数据类型,固定大小内存块的别名,还没有分配内存 struct Teacher { int age; }; void main() { struct Teacher Zhang; //告诉C编译器给我分配内存 } 注意:这里不能省略struct ...
  • 边界值分析

    千次阅读 2018-05-22 23:46:00
    一、 定义 边界值分析就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析是作为对等价类划分的补充,这种情况下,其测试用例来自等价类的边界。边界值分析是对等价类划分做补充的一种...
  • C++函数的定义与使用

    万次阅读 多人点赞 2018-03-03 23:10:27
    函数的定义和使用main就是一个函数,它是C++程序的主函数。一个C++程序可以由一个主函数和若干子函数组成。主函数是程序执行的开始点。由主函数调用子函数,子函数还可以再调用其它子函数。调用其它函数的函数称为...
  • C/C++ 宏定义

    千次阅读 2013-07-16 11:24:37
    简单宏定义带参数的宏运算符运算符宏的通用属性宏定义中圆括号创建较长的宏 较长的宏中的逗号运算符宏定义中的do-while循环do 空操作的定义 预定义宏C语言中常用的宏 1. 简单宏定义 简单的宏定义有如下...
  • JTAG各类接口针脚定义及含义

    万次阅读 2019-03-21 17:06:20
    TAG各类接口针脚定义及含义 JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。 一、引脚定义 Test Clock Input (TCK) -----强制要求1 ...
  • DB9针和DB25针串口的引脚定义

    万次阅读 2018-10-28 12:46:26
    本节为大家介绍标准25针串口的引脚定义。 作者:李瑞民来源:机械工业出版社 3.3 串口线的制作和转换 串口的连接线受很多的限制,最典型的限制就是接口类型和连接线的作用,因为接口类型不同,则接口引脚不一样;...
  • 过去十年, IT变化日新月异。如果我们回溯到100年前的1900年代,也会感慨电对经济社会的改变同样如此之大,历史惊人的相似...未来软件将不断重新定义世界的万事万物,数据在软件冶炼工艺的作用下价值将不断被挖掘出来。
  • 频域分析

    千次阅读 2020-02-17 17:59:14
    频域分析法定义2. 目的与意义3. 适用范围4. 优缺点4.1优点4.2 缺点5. 分析过程 1. 频域分析法定义 频域分析是一种研究控制系统的经典方法。是在频域范围内应用图解分析评价系统性能的一种工程方法。 2. 目的与...
  • 视觉里程计 特征点 的基本过程

    千次阅读 2017-11-23 20:16:47
    视觉里程计的任务是估计相邻图像间相机的运动,分为特征点...定义:特征点是图像当中具有代表性的部分,这些点在相机视角发生微小变化后依然保持不变 组成:由关键点和描述子两部分组成 关键点——位置
  • 软件测试定义/过程/分类

    万次阅读 2018-07-01 01:41:50
    软件测试定义:(为了发现程序中的错误而执行程序的过程)1为了发现程序员在开发中存在的代码以及逻辑错误2审核产品的完成是否符合用户的需求3提高客户的体验4交付更高质量的产品二。软件测试的过程阶段:1计划2设计...
  • 熵权基础原理

    千次阅读 2020-07-23 16:40:44
    熵权是用来评判各指标的权重的算法,相比于层次分析熵权具有更高的效率和准确效果。 在介绍熵权定义之前,先引入一个重要的定义信息熵。 信息熵借鉴了热力学中熵的概念,用于描述平均而言事件信息量的大小,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 254,142
精华内容 101,656
关键字:

发生定义法