矩阵构造函数(精选10篇)
层次分析法(The Analytic Hierarchy Process,简记AHP)是美国著名的运筹学加T.L .Satty等人在20世纪70年代提出的一种定性与定量分析相结合的多准则决策方法。AHP方法将人的主观判断为主的定性分析进行量化,用数值来表示各个指标或是备选方案的差异,供决策者参考。AHP方法除了指标体系的设定外,判断矩阵的构造是其至关重要的一步。在层次分析法中,由专家或是决策者对指标或是方案进行比较构建出的判断矩阵一般不具有完全的一致性。T.L.Satty提出用随机一致性比率CR=CI/RI<0.1这个标准来判断该矩阵具有满意的一致性。但是,平均一致性指标RI是使用随机的方法构造出来的,用RI作为标准,进行一致性检验,缺乏足够的依据。同时,用0.1作为一致性检验的临界值也是粗略的,很难说是什么客观的标准[4]。
2 一致性分析
近年来,在判断矩阵的构造上,有两方面的研究成果,一方面是对判断矩阵进行修正,这种方法就是对不具备满意一致性的判断矩阵进行矫正,使其具备满意的一致性。但矫正判断矩阵的方法主要有以下两个缺点,一是调整算法复杂,计算量大,调整成本高;二是调整算法对指标或是方案的重要性进行调整时,在调整方向上缺乏基本的依据。是上调还是下调,不得而知。并且有可能会违背专家评判的初衷,使调整后的判断矩阵虽然具备了满意的一致性要求,却不符合专家的意见。第二个方面的研究成果是判断矩阵的构造方法的改进和创新,与其花费大量精力检验和调整判断矩阵,还不如从构造判断矩阵入手,改进构造方法,构造出满足一致性要求的判断矩阵。
要构造出满意的甚至是完全一致的判断矩阵,就需要清楚判断矩阵不一致性产生的原因,完全一致性包含两方面的一致性:
一是次序一致性,所谓次序一致性就是如果A的重要性大于B,B的重要性大于C,那么A的重要性就一定是大于C。评判时就不可能出现C的重要性大于A的情况。如果出现,就违背了次序一致。那么此时构造出的判断矩阵肯定是不满足一致性要求的,CR的值大于0.1。
二是传递一致性,矩阵只有在满足次序一致性的前提下,才能进一步满足传递一致性。所谓传递一致性就是:假如我们评判的指标的重要性两两比较都可以用一个数值来精确表达,如A:B=a,B:C=b,那么A:C=ab。其中(:)表示两个指标的比较运算。在使用标度法构造判断矩阵的时候,先将某个指标与包含自己的n个指标分别进行比较,得出n个标度。自身的比较,同等重要,取值为1。虽然标度法,是对指标间重要性的一个大概的测度,但当这一轮比较结束之后,各个指标间的重要性关系已经确定。在构造过程中,总共需要进行n(n-1)/2次比较。在剩下的比较中,或多或少的会违背第一轮构造出来的这种关系,也就是会产生传递上的不一致性。比如,在第一轮的比较中,A:B=a,A:C=c,A:D=d,这时,A,B,C,D之间的重要性关系就已经确定,在第二轮的进行的是B与C和D之间的比较,如果他们的重要性标度值与第一轮的比较所确定的关系偏差较大,就可能出现矩阵不满足满意的一致性的情况。同时随着比较次数越多,就可能产生的更大偏差,出现不一致性的可能性也就越大。
3 排序度转换比例构造法
在分析了判断矩阵产生不一致性的原因之后,我们就从这两方面入手,对判断矩阵的构造方法进行改进。本文提出了排序度转换比例构造法。为了讨论方便,我们给出如下定义:
定义1 完全一致性:设矩阵A=(aij)n×n为一正互反矩阵,并且满足aij=aikakj,∀i, j, k∈n.
定义2 排序度:对指标集中的元素两两比较,根据1-9标度法,获取两指标之间的重要性排序度,用dk表示。排序度表如下表所示:
定义3 排序度累积性:假设(-)运算为两元素重要性排序运算,如果A-B=a,B-C=b,则A-C=a+b.
下面是使用排序度转换比例构造法的步骤:
(1)相对于上层准则,由专家将n个指标的重要性进行排序,重要性由高到低排列。得到:B=(b1,b2,…,bn),其中bi为第i个指标,i=1,2,…,n,n为指标个数,当i<j时bi的重要性大于或等于bj的重要性.
(2)指标集中的指标bi和bj做二元比较,根据排序度表,给出两相邻指标之间的排序度,eii+1=dk,,ei+1i=-dk因为bi的重要性大于bi+1的重要性,所以dk>0。根据排序度累积的性质,可知eij=eik+ekj;由此可得二元对比矩阵所有的元素值:
eij值的大小可以反映两个指标之间重要性的差别程度。根据次序一致性及排序度的性质,可以知道矩阵E是满足次序一致性,同时矩阵E具有如下性质:
①eij=-eji;
②eii=0;
③eij=eik+ekj.i, j, k∈n;
(3)由二元对比矩阵,可以计算出指标bi的重要性排序指数:
计算出相邻两个指标之间的相对重要性度量dii+1:
通过这个变换,可以有效地降低指标间重要性比较时产生的偏差,dii+1值的大小,能很较好的反映相邻两个指标之间重要性比较的相对度量,再利用这个度量形成的关系确定所有指标之间的重要性关系。dii+1的取值在[1,2]之间,n-1个dii+1(i=1,2,…,n-1)的值依次是指标集B=(b1,b2,…,bn)相邻两指标重要性程度比较转换后的度量。
(4)通过(3)转换后所得的di=(d12,d23,…,dnn-1),是对相邻的两个指标之间重要性的相对度量。根据传递一致性的要求,计算出任意两个指标之间重要性的相对度量,djj=djk/dik(j>i,j,i∈n),所以构造如下矩阵:
矩阵具备如下性质:
①dij=1/dji;
②dii=1
③djj=djk/diK(j>i,j,i∈n);
根据定义1,可知该判断矩阵是完全一致性的,其唯一的最大特征根为n,其它n-1个特征根为0。
(5)根据矩阵完全一致性的性质,可以通过下面的公式简便的计算出权重:
再将wi归一化处理,即可得到各指标的权重。
4 计算实例与比较研究
现在要对备选的兼并企业进行评价,判断其是否是好的扩张对象。主要由以下几个方面进行评价,建立指标体系:①财务经济状况[F1]②产品市场需求状况[F2]③发展环境[F3]④技术进步潜力[F4]⑤组织管理状况[F5]⑥工艺—技术相关性[F6][6]。
(1)首先,由厂长或董事会对这6个评价元素的重要性进行排序,得到一个重要性由高到 底的指标序列为:①财务经济状况②组织管理状况③工艺—技术相关性④产品市场需求 状况⑤技术进步潜力⑥发展环境。用B={a,b,c,d,e,f}表示,其中重要性是:a≥b≥c≥d≥e≥f;
(2)根据排序度表,对重要性相邻的两指标进行依次比较,得到相邻两指标之间的排序度向量,为d=(0,0,2,2,2)。根据排序度累积性质和二元对比矩阵的性质,得到完整的二元对比矩阵为:
(3)由矩阵D,可以计算出各指标的重要性排序指数为:
f=(12,12,12,0,-12,-24)
根据下面公式计算出相邻两个指标之间的相对重要性度量:
得到d12=1,d23=1,d34=1.333,d45=1.333,d56=1.333
(4)根据传递性一致性,以及在(3)中形成的重要性比例关系,可以构造如下判断矩阵:
根据定义1,可知该矩阵是完全一致性的,其最大的唯一特征根为6,其他5个特征根为0。可以很方便地计算出其各指标的权重。计算出指标集B的权重为:w=(0.21119,0.21119,0.21119,0.15841,0.11887,0.08914)
文献[6]对这6个指标构造的判断矩阵为:
λmax=6.6190,CI=0.1238,RI=1.24,所以
从判断矩阵我们可以看出,F1,F5,F6在重要性程度上是同等重要的,所以在进行评价时它们所赋予的权重也应该是相同的,通过两种方法权重的比较可以看出,本方法构造出的判断矩阵,在对各指标权重的赋予上更为合理。同时本方法构造的判断矩阵,无需对其是否满足满意的一致性进行检验,其本身已经是完全一致的矩阵,简化了整个过程。
5 结语
判断矩阵的构造一直是AHP方法中重要的步骤之一,其构造的好坏直接影响评判的结果和最后的决策。通过对各指标排序度进行转换,也能很好地反映各指标在指标集中的相对地位,结合比例标度构造法,构造出完全一致的判断矩阵,该矩阵无需检验就已满足完全一致性。同时比例构造法扩展了原先的9维标度,使得指标的维数不受限制。各指标的权重也可以很方便地计算出来,该方法可以很容易的在计算机上实现,只需专家给出相邻两指标的排序度,就可以通过程序求得各指标的权重,使AHP的应用更加简便。
参考文献
[1]王武平,杜纲.AHP中可省去构造判断矩阵的广义标度法[J].武汉理工大学学报(交通科学与工程版),2008,32(2):290-293.
[2]黄德才,郑河荣.AHP方法中判断矩阵的标度扩展构造法[J].系统工程,2003,21(1):105-109.
[3]丁开盛,梁雄健.AHP判断矩阵的排序度构造方法[J].Systems Engineering and Electronics,1999,21(12):20-22.
[4]胡毓达,陆晋奎.关于判断矩阵的一致性问题[J].数学研究与评论.1992,12(1):112-115.
[5]黄德才,胥林.AHP法中判断矩阵的比例标度构造法[J].控制与决策,2002,17(4):484-486.
[6]杜栋,庞庆华.现代综合评价方法与案例精选[M].北京:清华大学出版社,2006.
例 已知函数f(x)=x+■+5-m,m∈R. 试讨论关于x的方程f(x)=0的正实数解的个数.
解法一:方程的解即函数f(x)的零点,要讨论f(x)=0的正实数解的个数,我们可以研究f(x)在(0,+∞)上的图象.
f′(x)=1-■=■.
当x>0,m≤4时,∵ (x+2)2>4, ∴ f′(x)>0, f(x)在(0,+∞)上单调递增.又f(0)=5-■>0, ∴ f(x)的大致图象如图1所示, 此时 f(x)没有正的零点.
当x>0,m>4时, f′(x)=■,当0
当f(x)min=f(■-2)=2■+3-m=0,即m=9时,f(x)有1个正的零点;
当f(■-2)>0,即4 当f(■-2)<0且f(0)=5-■>0,即9 当f(■-2)<0且f(0)≤0,即m≥10时, f(x)有1个正的零点. 综上所述,当m<9时,方程f(x)=0没有正实数解;当m=9或m≥10时,方程f(x)=0有1个正实数解;当9 评析:用函数的零点来解决方程的解的问题,是解答例题的关键. 解法一直接利用了条件中的现成函数来作图,但这个函数含有参数,所以要进行分类讨论,解答过程不免有些繁冗. 解法二:采用变量分离法,由方程x+■+5-m=0可得m=■,于是,方程的正实数解的个数就是函数y=m和函数g(x)=■ (x>0)的图象交点的个数. g′(x)=■. 当x>1时,g′(x)>0,g(x)单调递增;当0 评析:解法二通过变量分离法,将方程解的问题转化为关于x的新函数g(x)与y=m的交点问题,其好处是g(x)不再含有参数m,无需对m的取值范围进行分类讨论,优化了解答过程. 解法三:对方程x+■+5-m=0去分母整理得:m(x+1)=x2+7x+10 (①),所以方程的正实数解的个数就是直线y=m(x+1)和抛物线g(x)=x2+7x+10在(0,+∞)上的交点个数. 如图4所示,直线y=m(x+1)过定点(-1,0),当直线与抛物线相切于y轴右侧,即直线与抛物线在x∈(0,+∞)上只有一个交点时,通过①式的判别式Δ=(7-m)2-4(10-m)=0可解得m=9. 当直线过(0,10)时,直线y=m(x+1)与抛物线也只有一个交点,解得m=10. 根据直线斜率的变化可知,当m<9时,方程f(x)=0没有正实数解;当m=9或m≥10时,方程f(x)=0有1个正实数解;当9<m<10时,方程f(x)=0有2个正实数解. 评析:在解法三中,方程的变形是有“预谋”的,目的是构造更简单的函数. 第一步去分母是为了去掉分式函数,第二步整理方程得到①式是为了在方程的等号两边构造我们熟悉的一次函数和二次函数,这样两个函数的图象就可不经过求导直接作出,解答过程更加简洁明了. 小结:从以上分析可以看出,题干给出的函数不一定是我们用来作图分析的最佳选择.有效的策略是:首先利用方程和不等式的性质对数式进行变形化简,简化运算过程;其次,方程和不等式问题的本质就是对等式或不等式两边的函数进行比较,所以要有目的地对等式或不等式进行转化,构造恰当的函数,使图形操作更简便可行. 【练一练】 已知关于x的不等式x2+2x-t+1>x-t恒成立,求t的取值范围. 【参考答案】 #include class A {int a; public: A(){a=0;}// 基类缺省构造函数A(int i){a=i;}// 基类有参构造函数void print(){cout< }; class B:public A {int b1,b2; public: B()// 隐式调用基类缺省构造函数 {b1=0;b2=0;} B(int i)// 隐式调用基类缺省构造函数 {b1=i;b2=0;} B(int i,int j,int k): A(i)// 显示调用基类有参构造函数 {b1=j;b2=k;} void print() {A::print();cout< }; void main() {B d1;//输出: 0,0,0 B d2(5);//0,5,0 B d3(4,5,6);//4,5,6 一、类的设计 1.类的声明 class 类名 { private://私有 ...public://公有 ...}; 2.类的成员 一般在C++类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如果是函数,我们就叫它成员函数。 3.类成员的可见性 private和public访问控制符决定了成员的可见性。由一个访问控制符设定的可访问状态将一直持续到下一个访问控制符出现,或者类声明的结束。私有成员仅能被同一个类中的成员函数访问,公有成员既可以被同一类中的成员函数访问,也可以被其他已经实例化的类中函数访问。当然,这也有例外的情况,这是以后要讨论的友元函数。类中默认的数据类型是private,结构中的默认类型是public。一般情况下,变量都作为私有成员出现,函数都作为公有成员出现。 类中还有一种访问控制符protected,叫保护成员,以后再说明。 4.初始化 在声明一个类的对象时,可以用圆括号()包含一个初始化表。 看下面一个例子: #include “iostream.h” class Box { private: int height,width,depth;//3个私有数据成员 public: Box(int,int,int); ~Box(); int volume();//成员函数 }; Box::Box(int ht,int wd,int dp) { height=ht; width=wd; depth=dp; } Box::~Box() { //nothing } int Box::volume() { return height*width*depth; } int main() { Box thisbox(3,4,5);//声明一个类对象并初始化 cout< return 0; } 当一个类中没有private成员和protected成员时,也没有虚函数,并且不是从其他类中派生出来的,可以用{}来初始化。(以后再讲解) 5.内联函数 内联函数和普通函数的区别是:内联函数是在编译过程中展开的。通常内联函数必须简短。定义类的内联函数有两种方法:一种和C语言一样,在定义函数时使用关键字inline。如: inline int Box::volume() { return height*width*depth; } 还有一种方法就是直接在类声明的内部定义函数体,而不是仅仅给出一个函数原型。我们把上面的函数简化一下: #include “iostream.h” class Box { private: int height,width,depth; public: Box(int ht,int wd,int dp) { height=ht; width=wd; depth=dp; } ~Box(); int volume() { return height*width*depth; } }; int main() { Box thisbox(3,4,5);//声明一个类对象并初始化 cout< return 0; } 这样,两个函数都默认为内联函数了。 二、构造函数 什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。上面的Box()函数就是构造函数。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数,这个构造函数可能会完成一些工作,也可能什么都不做。 绝对不能指定构造函数的类型,即使是void型都不可以。实际上构造函数默认为void型。 当一个类的对象进入作用域时,系统会为其数据成员分配足够的内存,但是系统不一定将其初始化。和内部数据类型对象一样,外部对象的数据成员总是初始化为0。局部对象不会被初始化。构造函数就是被用来进行初始化工作的。当自动类型的类对象离开其作用域时,所站用的内存将释放回系统。 看上面的例子,构造函数Box()函数接受三个整型擦黑素,并把他们赋值给立方体对象的数据成员。 如果构造函数没有参数,那么声明对象时也不需要括号。 1.使用默认参数的构造函数 当在声明类对象时,如果没有指定参数,则使用默认参数来初始化对象。 #include “iostream.h” class Box { private: int height,width,depth; public: Box(int ht=2,int wd=3,int dp=4) { height=ht; width=wd; depth=dp; } ~Box(); int volume() { return height*width*depth; } }; int main() { Box thisbox(3,4,5);//初始化 Box defaulbox;//使用默认参数 cout< cout< 4return 0; } 2.默认构造函数 没有参数或者参数都是默认值的构造函数称为默认构造函数。如果你不提供构造函数,编译器会自动产生一个公共的默认构造函数,这个构造函数什么都不做。如果至少提供一个构造函数,则编译器就不会产生默认构造函数。 3.重载构造函数 一个类中可以有多个构造函数。这些构造函数必须具有不同的参数表。在一个类中需要接受不同初始化值时,就需要编写多个构造函数,但有时候只需要一个不带初始值的空的Box对象。 #include “iostream.h” class Box { private: int height,width,depth; public: Box(){ //nothing } Box(int ht=2,int wd=3,int dp=4) { height=ht; width=wd; depth=dp; } ~Box(); int volume() { return height*width*depth; } }; int main() { Box thisbox(3,4,5);//初始化 Box otherbox; otherbox=thisbox; cout< return 0; } 这两个构造函数一个没有初始化值,一个有。当没有初始化值时,程序使用默认值,即2,3,4。 但是这样的程序是不好的。它允许使用初始化过的和没有初始化过的Box对象,但它没有考虑当thisbox给otherbox赋值失败后,volume()该返回什么。较好的方法是,没有参数表的构造函数也把默认值赋值给对象。 class Box { int height,width,depth; public: Box() { height=0;width=0;depth=0; } Box(int ht,int wd,int dp) { height=ht;width=wd;depth=dp; } int volume() { return height*width*depth; } }; 这还不是最好的方法,更好的方法是使用默认参数,根本不需要不带参数的构造函数。 class Box { int height,width,depth; public: Box(int ht=0,int wd=0,int dp=0) { height=ht;width=wd;depth=dp; } int volume() { return height*width*depth; } }; 三、析构函数 当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。 ALGraph::ALGraph(T a[ ], int n, int e){ vertexNum=n;arcNum=e; for(i=0;i adjlist[i].vertex=a[i]; adjlist[i].firstedge=NULL;} for(k=0;k cin>>i>>j;//输入边所依附的两个顶点的序号s=new ArcNode;s->adjvex=j;//生成一个边表结点ss->next=adjlist[i].firstedge;//将结点s插入到结点i的边表的表头 adjlist[i].firstedge=s; } 卫星导航系统可采用双向无线电伪距时间同步法进行各站之间时间同步, 具有高精度和高可靠性的特点。基本原理是利用站间信号传播路径完全相同, 二者钟差即为所测量的伪距之差除以光速的基本原理。需要同步的各站间分别用本地时钟驱动发射信号, 各站接收对方的信号并进行测距, 完成与本地钟之间的伪距测量, 对测距数据进行相应的数学处理即可以得到时间同步结果[1]。 伪码测距时标偏差指标记的伪距测量时刻与真实的伪距测量时刻存在偏差, 文献[2-3]分析了伪距测量时刻偏差对卫星导航系统性能的重要影响, 同样, 伪距测量时刻偏差也影响测距系统的基本性能[4], 导致定轨结果和导航卫星双向时间比对结果恶化, 使含有时标偏差的多个跟踪弧段O-C曲线呈现锯齿状, 导致双向时间同步结果出现周期性抖动的现象[5], 这也使得每个含有时标偏差弧段计算的钟差拟合参数不能进行跨弧段预报, 从而影响时间同步结果的准确性和数据有效性。文献[5]已经从卫星导航系统的角度分析讨论了时标偏差对卫星伪距测量的影响特性, 并给出了利用伪距O-C (观测值与计算值之差) 进行时标偏差解算的计算模型[6], 但此模型需要具有高精度的卫星轨道支持, 只能在卫星在轨运行期间进行长期数据积累和计算, 具有较长的滞后性。而测距设备作为导航原始测量数据获取的基础设备, 在研制和开发期间需要事先对伪距测量时标偏差大小进行标定。 本文基于前人的标定基本原理, 结合测距设备研制和开发的实际环境对模型进行了改进, 提出了一种新的基于矩阵构造的伪距时标偏差的标定方法, 给出未使用时刻标定方法的站间时间同步结果和使用之后的对比图, 事实证明此方法切实有效。 1 伪码测距时标偏差对站间双向时间同步的影响 卫星导航系统各地面站时差测量与计算方法统称为站间时间同步技术, 是卫星导航的关键技术之一, 站间时间同步误差直接影响导航卫星时间同步精度, 关系到用户定位精度[7]。 站间时间同步一般采用双向无线电伪距同步的方法[8], 两站之间信号传播路径完全相同, 两站钟差即为所测量的伪距之差除以光速C。需要同步的X, Y两站同时发送频率相同或相近的2路测距信号, X, Y两站分别接收对方的测距信号并完成伪距测量。 设X站的钟面时为tX, Y站的钟面时为tY。两站的钟差为: 两站所测得的伪距测量值ρX, ρY为: 式中, ΔtXY为X站与Y站之间的时刻差;CtXD为Y站至X站的传播附加等效距离误差;CtYD为X站至Y站的传播附加等效距离误差;R0X为X站收到信号的真空距离;R0Y为Y站收到信号的真空距离, 故R0X与R0Y相等。 由于收发信号为同频信号, 故CtXD与CtYD相同, 式 (2) 与式 (3) 相减有站间时间同步结果: 式 (4) 成立有一个前提条件, 即X站和Y站测得伪距测量值与其真正的测量时刻相对应, 即所测得伪距打的时间标记应该与该时间的测量伪距值准确对应, 否则会将时间错位的伪距值引入计算, 导致错误的结果, 在卫星处于大动态的情况下尤其明显。在实际工程中, 由于网络时间同步精度影响或者伪距测距处理上的方法问题, 往往会出现较大的偏差, 从而使得站间双向时间同步精度的下降。文献[9-11]提出通过对时间同步的钟差以及其拟合残差的特性分析来评估时间同步结果, 某站间时间同步系统分别在不同伪距时刻偏差的情况下进行时间同步, 当时刻偏差从200 ms增大到600 ms时, 拟合出的钟差直线更加弯曲, 拟合残差从1 ns左右增加到5 ns左右, 时间同步结果越来越差。 2 时标偏差标定原理及方法 2.1 时标偏差标定原理 时标偏差是指标记的伪距测量时刻与真实的伪距测量时刻之差。按照伪距标记时刻要求, 伪距的测量时刻应该标记为信号的本地接收时刻 (本地钟面时) 。如果由于各种可能原因, 本地钟面时T0时刻 (对应系统时间t0时刻) 测量的伪距给出的时标不是T0, 而是另外一个时刻T'0 (对应系统时间t1时刻) , 但是用户仍然将T'0当成了T0来使用, 此时, 就认为该伪距测量值中包含了时标偏差的影响, 定义时标偏差为: 一般来说, 含有钟差和时刻偏差的伪距ρ'sk (t1) 在t0时刻进行泰勒级数展开, 可用式 (6) 表示[1], 给出了基于系统运行状态下导航卫星和地面设备的伪码测距时标偏差系统模型, 计算方法如下: 式中, ρ'sk (t0) 为t0时刻伪距观测值;ρ'sk (t1) 为t1时刻伪距观测值;为t0时刻伪距变化的速度观测值;为t0时刻伪距变化的加速度观测值;C为光速度;ΔT为接收机与卫星的钟差值并包含收发设备的时延。 忽略二阶项影响, 假设时标偏差不变的情况下有: 从而有 构造矩阵, 进一步变形可得到: 式中, 是一个n×2的矩阵;[ρ'sk (t1) -ρ'sk (t0) ]是一个n×1的矩阵;是一个2×1的矩阵, 按照式 (9) 的方法构造线性方程, 可求得时刻偏差的解, 为方便起见, 将此方法命名为矩阵构造法。 2.2 时标偏差标定方法 根据矩阵构造法的原理, 用模拟卫星信号源代替真实卫星, 通过有线方式与接收链路形成闭环的形式构造测试环境, 时刻标定方法测试连接原理如图1所示, 测试时, 模拟卫星信号源发出固定速度和加速度的大动态模拟卫星测试信号, 经过长电缆接入接收链路, 接收机接收测试信号并进行测距, 接收机和模拟卫星信号源采用同一个原子钟提供时钟信号, 驱动接收机和模拟卫星信号源工作, 以满足同源条件, 所有计算机均需要进行网络时间同步或者B码时间同步, 接收和存储接收机产生的测量伪距数据和模拟卫星信号源产生的星地距离理论仿真数据。采集到了足够多的数据后, 采用式 (9) 就可以计算出被测设备的时刻偏差。 3 时刻偏差标定结果 3.1 时刻标定实验结果 利用上述标定原理和方法, 对某型测距设备进行测试, 设置模拟卫星信号源仿真数据为初始距离20 000 km, 初速度为900 m/s, 加速度为-0.25 m/s2, 得到测试结果如图2所示。 时刻偏差约为2.999 94 s。将此设备用于站间时间同步中, 计算出的时间同步结果如图3所示, 从图3中可以看出, 此时钟差曲线比较弯曲, 拟合残差已经超过了10 ns, 均无法满足系统要求, 需要改进后方可接入系统使用。 深入分析并解决测距设备的时刻偏差过大问题后, 对其进行重新测试, 测试条件不变, 得到时刻偏差标定结果如图4所示, 时刻偏差约为0.088 ms。将此设备用于站间时间同步中, 计算出的时间同步结果如图5所示。从图5中可以看出, 此时计算出的钟差曲线已经很平滑, 拟合残差最大约为2 ns, 该结果能满足卫星导航系统站间时间同步系统长期稳定运行的需要。 由以上测试结果可知:此伪码测距时刻偏差标定方法能有效测出时刻偏差, 通过精确评估的系统设备用于站间时间同步中能大幅度提高时间同步精度。 3.2 误差分析 伪码测距时刻标定误差的主要来源分为以下几个方面:模拟卫星信号源的仿真数据与真实信号的误差;系统采用时频信号的相位一致性;记录数据的计算机时标准确性。下面分别进行分析。 模拟卫星信号源的仿真数据与真实信号的误差可通过对模拟卫星信号源测试前标定的方式来进行控制, 偏差一般可以控制在0.3 ns以内, 只要标准差控制在0.5 ns以内, 固定的系统差不会影响标定的结果的正确性。 原子钟输出1 pps和10 MHz时频信号的相位一致性会影响模拟卫星信号源输出信号携带伪码相位和接收机测距结果的准确性, 需要事先通过时间间隔计数器进行标定, 一般控制在0.5 ns以内不会影响标定结果。 记录数据的计算机时标可通过网络时间或者B码进行同步, 同步精度控制在0.1 ms以内不会影响标定结果。 通过以上技术处理, 能控制伪码测距时刻标定的误差, 使得伪码测距时刻标定结果更加准确。 4 结束语 针对伪码测距时刻偏差, 系统地研究了伪码测距时刻偏差的标定原理, 提出了基于有线测试环境的矩阵构造法对测距设备时刻偏差进行标定, 并给出实验结果, 将此方法应用于站间时间同步测距设备的研制和测试中, 站间时间同步计算结果表明, 此方法切实有效, 能满足实际工程的需要。同时也可用此方法对星地链路和星间链路测距设备的时刻偏差进行标定。 未来工作方面, 将进一步研究提高伪码测距时刻标定准确度的方法;进一步准确计算在满足时间同步精度条件下各种动态卫星能容忍的伪码测距时刻偏差。 参考文献 [1]谭述森.导航卫星双向伪距时间同步[J].中国工程科学2006, 8 (12) :70-74. [2]刘利.伪距测量中的时标偏差影响分析[J].时间频率学报, 2012, 35 (2) :105-111. [3]朱陵凤.时标偏差对站间双向时间比对的影响分析[J].宇航计测技术, 2008, 28 (5) :34-37. [4]刘利, 朱陵凤.时标偏差对卫星双向时间传递影响分析[C]∥第一届中国卫星导航学术年会论文集, 2010:356-361. [5]刘文祥, 牟卫华, 王飞雪.测量时刻偏差对单星定轨误差的影响分析[J].中国空间科学技术, 2011, 31 (4) :70-76. [6]郑爱武.USB观测数据时标偏差影响分析与评估[J].空间控制技术与应用, 2011, 37 (1) :36-39. [7]朱陵凤, 李超, 韩春好.无线电时间比对中的时标偏差影响分析[J].无线电通信技术, 2016, 42 (2) :66-69. [8]朱祥维, 李星, 孙广富, 等.卫星导航系统站间时间同步方法研究[C]∥2005年全国时间频率学术交流会文集, 2005:312-316. [9]李瑞锋, 王元明.星地双向时间同步技术在COMPASS中的应用[J].武汉大学学报信息科学版, 2013, 38 (7) :842-844. [10]李跃华;蔺玉亭;张达, 等.钟差数据处理方法研究[C]∥第二届中国卫星导航学术年会电子文集, 2011:535-539. 关键词:函数导数;构造思想;不等式 下面借助于教学过程中的几个例子,通过构造函数的方法来解决这类不等式的证明问题。 例1.已知m∈R函数f(x)=mx--lnx,g(x)=+lnx (1)若y=f(x)-g(x)在[1,+∞)上为单调递增函数,求实数m的取值范围 (2)证明:+++…+<,(n∈N*) 解析:(1)∵y=f(x)-g(x)=mx--2lnx, ∴y'=m+-≥0在[1,+∞)上恒成立, 即m≥在[1,+∞)上恒成立,又=≤1, 所以m≥1.故m所求的取值范围为[1,+∞). (2)由(1)令m=1,设h(x)=f(x)-g(x)=x--2lnx≥h(1)=0 则2lnx≤x-,即≤(1-). 于是≤(1-),(n∈N*) ∴++++…+≤[n-(+++…+)]<[n-(+++…+)]=[n-(1-+-+-)]= 所以+++…+<,(n∈N*) 例2.(1)已知函数f(x)=x(lnx+1),(x>0)若斜率为k的直线与y=f'(x)曲线 交于A(x1,y1),B(x2,y2)两点,求证:x1< (2)在数列{an}中,a1=1,an=an-1+2n·3n-2,(n≥2,n∈N*),cn= 求证:ln(1+n) 解析:(1)f'(x)=lnx+2(x>0),k= =要证x1< 即证x1< 等价于证明1<<,令t= 则只要证1< 故考虑证lnt 设g(t)=t-1-lnt,(t>1)则g'(t)=1->0 故g(t)在(1,∞)上是增函数 所以当t>1时, g(t)=t-1-lnt>g(1)=0,即lnt 设h(t)=tlnt-(t-1),则h'(t)=lnt>0,(t>1) h(t)在(1,∞)上是增函数,∴当t>1时, h(t)=tlnt-(t-1)>h(1)=0,即t-1 (2)据题意有=+2×3n-2,(n≥2) 由累加法得-=(-)+(-)+…+(-) =2(30+31+32+…+3n-2)=3n-1-1 ∴an=n·3n-1(n≥2),当n=1时,a1=1也满足上式 ∴an=n·3n-1(n∈N*) 从而cn=,∵ln(1+n)=ln(×××…) =ln+ln+ln+…+ln(1+) 为证ln(1+n) 令f(x)=x-ln(1+x),0 则f(x)在(0,1]上为单调递增函数,从而f(x)>f(0)=0 即x>ln(1+x),(0 ∴ln(1+)<,故得证! 例3.函数f(x)=a(-1)-logb (1)当b=e(e是自然数的底数)时,若函数f(x)在 [1,∞)上为增函数,求实数a的取值范围 (2)求证:当n∈N,且n>19时,不等式9< 解析:(1)当b=e时,f'(x)=,依题意≥0在[1,∞)恒成立, 即x≥a在[1,∞)恒成立∴a≤1 (2)当a=1,b=e时,f(x)=+lnx在[1,∞)上为增函数, 当n>1时,令x=,则x>1,故f()=+ln=-+ln>0 ∴ln> ∴+++…+ 又>=+++…+>++++++…+>+(+)+(+++)+…(+…+)>++…+=+9>9故不等式成立。 例4.设函数f(x)=mlnx,h(x)=x-a (1)当m=2时,若函数k(x)=h(x)-f(x)在[1,3]上恰有两个不同零点,求实数a的取值范围; (2)证明:当n≥2,n∈N*时,loge 2+loge 3+loge 4+…+loge n> 解析(1) 函数k(x)=h(x)-f(x)在[1,3]上恰有两个不同零点等价于方程x-2lnx=a,在[1,3]上恰有两个相异实根 令g(x)=x-2lnx,则g'(x)=1-, 当x∈[1,2),g'(x)<0;当x∈(2,3],g'(x)>0 故g(x)min=g(2)=2-2ln2,又g(1)=1,g(3)=3-2ln3,g(3)-g(1)=ln<0∴g(1)>g(3), 由题意只需g(2) (2)∵loge x=,在F(x)=f(x)-h(x)中,令m=1,a=0, 从而F(x)=lnx-x,∴F'(x)=-1=故函数F(x)在(0,1)上递增;在(1,∞)上递减 ∴F(x)≤F(1),即lnx≤-1+x ∴>=>=-,(n≥2) ∴loge 2+loge 3+loge 4+…+loge n=++…+>1-+-+…+(-)=1+--=即得证。 总之,利用导数研究函数与不等式,方程,数列这一类解答题比较灵活,通过巧妙构造函数可以将其化归为易解决的问题,以上的几个例子都体现了构造函数这一思想方法。利用函数导数证明不等式一般需要注意: (1)充分联想前一个问题或已知条件中函数的结构; (2)观察待证不等式,分析法构造适当的函数; 实验(上机)目的1、巩固类的创建 2、会定义类的成员:字段及方法 3、会调用类的方法实现对象的操作 实验(上机)课时 4学时 实验(上机)环境 Visual Studio 2010 预备知识 1、面向对象方法。 2、类的定义。 实验(上机)内容 1、定义轿车类,添加属性牌号、颜色、重量、出厂日期;输出该车的颜色、重量和出厂日期的方法,重载构造函数,初始化有牌号和出厂日期的车辆。在窗体中创建一个轿车对象,调试程序。 2、创建一个班级类,包含辅导员、班级名称、所属系部、人数属性,其中人数不能超过60人;输出班级的名称和人数的方法;重载构造函数,创建带名称和辅导员的班级及默认人数为50人。在窗体中实例化对象”_0900103班”和“_0900141班”,并输出。 3、创建时间Shijian类,它包含3个整型属性:Hour、Minute、Second,它们用于表示采取统一时间格式(24小时时钟格式)的一个时间。并定义一个不含参数的ToUniversalString方法,该方法采用统一时间格式返回一个字符串,它包括6个数位--2个表示小时,2个表示分钟,2个表示秒。创建Shijian类的2个实例,编译和调试Shijian类。 要求:采用默认和重载的构造函数两种方式进行实例化类。 4、完成学生类的建立(提示:建立三个属性分别是xuehao,name,birthday;添加一个方法输出学生的相关信息,其输出格式为: “姓名:张三 学号:00000000 生日:1989-12-12”。) 要求:采用默认和重载的构造函数两种方式进行实例化类。 实验(上机)步骤 按上课代码演示步骤完成上机内容 考核内容 1、熟练使用开发环境; 2、代码完整无误; 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化成员变量呢,这一点对操作保护成员是至关重要的,答案是肯定的关于c++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用,在正式讲解之前先看看c++对构造函数的一个基本定义, 1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。 2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。 3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。 4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。 我们来看下面的代码: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要,请务必著名出处和作者 #include using namespace std; class Student { public: Student()//无参数构造函数 { number = 1; score = 100; } void show(); protected: int number; int score; }; void Student::show() { cout< } void main() { Student a; a.show(); cin.get(); } 在类中的定义的和类名相同,并且没有任何返回类型的Student()就是构造函数,这是一个无参数的构造函数,他在对象创建的时候自动调用,如果去掉Student()函数体内的代码那么它和c++的默认提供的构造函数等价的, 构造函数可以带任意多个的形式参数,这一点和普通函数的特性是一样的! 下面我们来看一个带参数的构造函数是如何进行对象的始化操作的。 代码如下: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include using namespace std; class Teacher { public: Teacher(char *input_name)//有参数的构造函数 { name=new char[10]; //name=input_name;//这样赋值是错误的 strcpy(name,input_name); } void show(); protected: char *name; }; void Teacher::show() { cout< } void main() { //Teacher a;//这里是错误的,因为没有无参数的构造函数 Teacher a(“test”); a.show(); cin.get(); } 我们创建了一个带有字符指针的带有形参的Teacher(char *input_name)的构造函数,调用它创建对象的使用类名加对象名称加扩号和扩号内参数的方式调用,这和调用函数有点类似,但意义也有所不同,因为构造函数是为创建对象而设立的,这里的意义不单纯是调用函数,而是创建一个类对象。 一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码 Teacher a; 就是错误的!!! 这里还有一处也要注意: //name=input_name;//这样赋值是错误的 因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍) 本文介绍构造法在证明不等式时的三个思路方向,阐述构造函数在证明不等式中的“神奇”效果. 方向一:选择主元,构造主元函数证明不等式 当待证式子中有多个变量时,要敢于把其中的一个变量作为主元,把其余的变量作为参数来处理,这样便可构造出大家熟知某个的一元函数模型. 例1 已知a,b,c∈R,且|a|<1,|b|<1,|c|<1,求证:ab+bc+ac>-1. 分析 已知的是三个变量a,b,c的取值范围,而要求的是ab+bc+ac的范围,所以可将此式视为一元函数,如f(a)=(b+c)a+bc.从而转化为证明:当-1-1. 证明 设f(a)=ab+bc+ca=(b+c)a+bc. 当b+c=0时,f(a)=bc. 因为|b|<1,|c|<1,所以|bc|<1,所以bc>-1. 当b+c≠0时,f(a)为a的一次函数,故f(a)大于f(-1),f(1)中的较小者. 因为f(1)=b+c+bc=(b+1)(c+1)-1,且 b>-1,c>-1,所以b+1>0,c+1>0, 所以(b+1)(c+1)>0,所以f(1)>-1. 因为f(-1)=-b-c+bc=(1-b)(1-c)-1,且b<1,c<1,所以1-b>0,1-c>0,所以(1-b)(1-c)>0, 所以f(-1)>-1. 所以当|a|<1时,f(a)>-1. 综上,可知ab+bc+ac>-1. 评注 一般情况下,不等式问题可转化为以下几种函数问题: ①已知函数定义域,求函数最值或值域; ②利用函数单调性,比较函数值的大小. 例2 已知a,b,c∈R,且a+2b+3c=6,求证:a2+2b2+3c2≥6. 分析 先消去一个变量,再视一个变量为主元,另一个变量为参数,可构造一元二次函数. 证明 由已知,得a=6-2b-3c, 从而a2+2b2+3c2-6 =(6-2b-3c)2+2b2+3c2-6 =36+4b2+9c2-24b-36c +12bc+2b2+3c2-6 =6[b2+2(c-2)b+(2c2-6c+5)]. 令f(b)=b2+2(c-2)b+2c2-6c+5. 由Δ=[2(c-2)]2-4(2c2-6c+5)=-4(c-1)2≤0, 可得f(b)≥0. 故a2+2b2+3c2≥6. 评注 条件中的等式可以用来消元. 方向二:类比结构特征,构造函数证明不等式 例3 已知a,b,c∈(0, +∞),且a+b>c,求证:a1+a+b1+b>c1+c. 分析 分析待证式子的结构特征,发现其左右两边均具有形式“x1+x”,从而想到利用函数f(x)=x1+x的单调性来证明. 证明 设函数f(x)=x1+x(x∈(0, +∞)). 任取x1,x2∈(0, +∞),且x1 则f(x1)-f(x2)=x11+x1-x21+x2=x1-x2(1+x1)(1+x2)<0, 所以f(x)在(0, +∞)上是单调增函数. 因为a+b>c,所以f(a+b)>f(c), 从而a1+a+b1+b>a1+a+b+b1+a+b=a+b1+a+b>c1+c. 评注 如果不等式中的各项具有共同的特征,则可以考虑抓住这一特征构造函数,利用函数的相关知识来解决问题. 例4 求证不等式:a1-2a 分析 构造函数f(x)=x1-2x-x2 (x≠0),可证得其为偶函数. 证明 设f(x)=x1-2x-x2(x≠0), 则f(-x)=-x1-2-x+x2=-x•2x2x-1+x2 =x1-2x[1-(1-2x)]+x2 =x1-2x-x+x2=f(x), 所以f(x)的图像关于y轴对称. 当x>0时,1-2x<0,故f(x)<0; 当x<0时,依图像的对称性,知f(x)<0. 故当x≠0时,恒有f(x)<0. 所以a1-2a 评注 这里利用了偶函数的性质,避免了分类讨论,简化了证明过程. 例5 已知a,b,c∈R,且a>0,2b>a+c,求证:b-b2-ac 分析 待证结论中的b±b2-ac很容易让人联想到一元二次方程的求根公式.而当a>0时,f(x)=ax2+bx+c的图像是开口向上的,此时,若存在实数α,β,且α<β,使f(α)=f(β),则由f(x) 证明 设f(x)=ax2-2bx+c. 因为a>0,2b>a+c,所以f(1)=a-2b+c<0, 故函数f(x)的图像大致如右图: 抛物线开口向上,与x轴有两个不同的交点(x1,0),(x2,0),且x1<1 而方程f(x)=0的两根为b±b2-aca, 所以b-b2-aca<1 又因为a>0,所以b-b2-ac 评注 由f(x)=ax2-2bx+c及a>0,2b>a+c,知函数f(x)的图像与x轴必有两个交点,因此无需讨论判别式的符号. 方向三:类比相似结论,构造函数证明不等式 例6 先阅读下列不等式的证法,再解决后面的问题. 已知a1,a2∈R,a1+a2=1,求证:a21+a22≥12. 证明:构造函数f(x)=(x-a1)2+(x-a2)2, 则f(x)=2x2-2(a1+a2)x+a21+a22=2x2-2x+a21+a22. 因为对一切x∈R,恒有f(x)≥0,所以Δ=4-8(a21+a22)≤0, 从而a21+a22≥12. (1)若a1,a2, …, an∈R, a1+a2+…+an=1,请写出上述结论的推广结论; (2)参考上述解法,对你的推广结论加以证明. 解 (1)若a1,a2, …,an∈R,a1+a2+…+an=1,则 a21+a22+…+a2n≥1n. (2)构造函数f(x)=(x-a1)2+(x-a2)2+…+(x-an)2 =nx2-2(a1+a2+…+an)x+a21+a22+…+a2n =nx2-2x+a21+a22+…+a2n. 因为对一切x∈R,都有f(x)≥0,所以Δ=4-4n(a21+a22+…+a2n)≤0, 故a21+a22+…+a2n≥1n. 评注 利用构造法解题的最大特点是:调整思维角度,在更广阔的背景下考察问题中所涉及的代数、几何元素及其相互关系.所以应用构造法解题的关键有:①要明确解题的方向,即为何构造;②要弄清题目条件的本质特征,以便进行逻辑组合. 巩固练习 1. 设a,b,c∈R,求证:a2+ac+c2+3b(a+b+c)≥0,并指出等号何时成立. 2. 已知i,m,n∈N,且1 求证:(1+m)n>(1+n)m. 【矩阵构造函数】推荐阅读: 抽象函数构造函数09-30 高考构造函数法07-19 构造函数证不等式07-15 构造函数处理不等式问题11-16 构造函数妙解不等式11-02 构造函数法证明不等式的常见方法公开课09-13 矩阵知识总结10-21 矩阵式管理模式05-25 生命周期矩阵分析法10-16 如何构造高效课堂?09-20矩阵构造函数 篇3
矩阵构造函数 篇4
矩阵构造函数 篇5
矩阵构造函数 篇6
矩阵构造函数 篇7
实验(上机)类的属性和构造函数 篇8
矩阵构造函数 篇9
矩阵构造函数 篇10