@wuqi0616
2017-05-24T16:07:09.000000Z
字数 22194
阅读 1509
三轴运动平台
什么是参数估计?
参数估计是指对有一定统计分布的观测子样建立起某种函数模型,在某一准则函数约束下采用一定的数值计算方法来估计参数的过程。
测量领域中参数估计的过程大概分为三步
1、在观测子样和估计参数间建立起符合统计规律的函数模型
2、根据评估目标选择合适的估计准则
3、采用适当的数值解算方法,确保估计参数解的精确性和稳定性。
非线性最小二乘算法的应用大约于上世纪80年代初,非线性最小二乘法除可直接用于估计静态非线性模型的参数外,在时间序列建模、连续动态模型的参数估计中,也往往遇到求解非线性最小二乘问题。其算法主要有两类:一类是搜索算法,另一类是迭代算法
搜索算法的思路是:按一定的规则选择若干组参数值,分别计算它们的目标函数值并比较大小;选出使目标函数值最小的参数值,同时舍弃其他的参数值;然后按规则补充新的参数值,再与原来留下的参数值进行比较,选出使目标函数达到最小的参数值。如此继续进行,直到选不出更好的参数值为止。以不同的规则选择参数值,即可构成不同的搜索算法。常用的方法有单纯形搜索法、复合形搜索法、随机搜索法等。
迭代算法是从参数的某一初始猜测值出发,然后产生一系列的参数点,如果这个参数序列收敛到使目标函数极小的参数点娈,那么对充分大的就可用作为娈。迭代算法的一般步骤是:
1、给出初始猜测值,并置迭代步数
2、确定一个向量作为第步的迭代方向
3、用寻优的方法决定一个标量步长
4、检查停机规则是否满足,如果不满足,则将加1再从2开始重复;如果满足,则取为值
非线性模型响应的误差方程为:
---定义
非线性模型中参数的一个估计量,如果满足关系:
上式定义了非线性最小二乘的估计量,而在参数空间是否存在这样的量?
定理 假设参数空间为上的紧子集,关于在参数空间上连续,则必存在上的可测函数,使得:
由于在上关于和都是连续函数,又因为为紧子集,所以对于任意的,在参数空间上必存在极小值
当非线性模型的非线性强度较弱时,可以将非线性模型在处线性化,并用线性模型的求解理论来解算非线性模型式,得误差方程:
对于非线性强度很强的非线性模型,由于线性近似将产生大于观测误差的模型误差,所以一般采用迭代的方法求解。
---常见的迭代方法有:
可以假设的极小值的一个近似值为,在附近将泰勒展开,取至二次项得:
总结:牛顿法虽然有很快的收敛速度,但是它总是局部收敛,而且对初值十分敏感。
综上,可以发现牛顿法的基本思想是用二次函数:
约束条件限制了,使得不大于,这样总在一个给定的小区域内活动,这个区域是可信赖的,称该方法为信赖域法。
常数取决于对的逼近程度:
信赖域法的迭代步骤:
选取初值和。
按照式(17)和式(18)计算梯度方向和矩阵,若,则停止迭代
按式(20)计算,并检查是否满足约束条件,若不满足,则采取适当的方法对予以压缩,然后再区域内求使得的。
终止迭代,输出和,结束
总结:信赖域法也与初值有关,但仍然是局部收敛,并不像想象的那样全局收敛。
拟牛顿法是在牛顿法的基础之上,用一个仅包含一阶偏导数信息的对称矩阵去逼近二阶偏导数矩阵(Hessian)矩阵,然后再按牛顿法予以迭代。其中有一种数值方法可以确定阵:
令:
总结:拟牛顿法也与初值有关,仍然是局部收敛,只是相对于牛顿法而言降低的计算量但计算复杂度依旧很高。
综上三种方法,都需要计算的二阶偏导数矩阵,而最速下降法只假定在解附近具有二阶连续偏导数,且此二阶偏导数矩阵的行列式大于、等于0,并不涉及到具体的Hessian矩阵计算。
最速下降法的基本思想是基于这样的事实:目标函数在沿着处的梯度方向上数值增加最快。既然我们现在是要求目标函数的最小值,因此,若是在寻找的最小值点的过程中,采用的是沿着在处的负梯度方向上寻找,势必使的数值下降最快,所以称按负梯度方向搜寻的方法为最速下降法,即:
目标函数:
为了确定满足条件的,将式(44)对求导数,令其为0,得:
最速下降法的迭代步骤如下:
总结:一般来说,最速下降法对任意初值都能收敛,但收敛速度并不像该方法的名称那样是最速的,相反它是最慢的,这是因为最速下降法在接近最小值点时会产生拉锯现象。
前面一些方法都是求目标函数最小化的非线性最优化算法,与我们测量平差中已掌握的方法相差很多。因此,测量平差中的一些软件都不能直接应用。而高斯-牛顿法则不同,几乎可以完全不改变原测量平差程序。
测量平差:
由于测量仪器的精度不完善和人为因素及外界条件的影响,测量误差总是不可避免的。为了提高成果的质量,处理好这些测量中存在的误差问题,观测值的个数往往要多于确定未知量所必须观测的个数,也就是要进行多余观测。有了多余观测,势必在观测结果之间产生矛盾,测量平差的目的就在于消除这些矛盾而求得观测量的最可靠结果并评定测量成果的精度。测量平差采用的原理就是“最小二乘法”。
-
高斯-牛顿法的基本出发点就是在初值处对非线性模型进行线性近似,并按照传统的平差方法求出一次近似值,然后反复迭代,直到前后两次值相等,迭代步骤如下:
假设非线性模型存在一阶连续偏导数,且参数之间相互独立,则在近似值处线性化,得误差方程:
总结:虽然高斯-牛顿法有一定的合理性,但在具体执行时,可能会产生一些问题。首先是对初值的依赖性较大,当初值较差时,会出现迭代发散现象,使迭代无法进行下去,好在我们在实际计算时,总是用观测值算出,与很接近,故一般可迭代收敛。
高斯-牛顿法对初值的依赖性较强,当初值较差时,会出现迭代发散现象。为了克服这个缺点,需要对高斯-牛顿法进行下列改进:
定理 设是的近似值,则一定不能达到最小,于是有:
设,那么必存在,使时,有
-
此定理说明,当我们用高斯-牛顿法求出后,若适当选取,使:
输出和,结束
该算法的关键是要计算,韦博成提出了对采用三点抛物线近似方法。即分别求出和时的值,这三个值为:,则:
总结:改进的高斯-牛顿法除具备高斯-牛顿法的全部优点之外,还在很大程度上克服了高斯-牛顿法强烈依赖初值的缺点,是一种很有实用价值的方法。
高斯-牛顿法和改进的高斯-牛顿法有解的必要条件是矩阵列满秩,但在非线性秩亏自由网平差中,由于缺少基准,矩阵总是列降秩的。在这种情况下,高斯-牛顿法和改进的高斯-牛顿法都不能使用。另外,当非线性模型中存在复共线关系时,尽管矩阵列满秩,但的条件数很大,使得呈病态。这时候高斯-牛顿法和改进的高斯-牛顿法也无法使用。为了克服这个缺点,可以采用增大的主对角线元素的办法:
适用于非线性秩亏自由网平差的阻尼最小二乘法的具体算法如下:
1.选取初值(此时),计算。
2.将非线性模型在处线性化。
3.按一般间接平差组成法方程。若,则计算。
4.按照式(59)计算。
5.按照式(60)计算,并计算,若,则停止迭代。
6.按照式(62)计算。继续从2开始迭代
7.输出,,结束
建立速度输入()速度输出()的数学模型:
记录输入量(给定目标速度)、输出量(实际瞬间转速,实际电机位置),可以通过辨识实际输出转速(物理量)与输入量(数字量)之间的输入输出模型进而获得实际输出电机位置(物理量)与输入量(数字量)之间的输入输出模型,即:
什么是过程模型?
过程模型的结构是简单连续时间传递函数描述了动态线性系统中的一项或者多项元素:
1、在系统识别应用中,选择估值>过程模型打开过程模型对话框。
2、如果模型包含多个输入或多个输出,你可以指定是否估计相同的传递函数为所有输入 - 输出对,或各自具有不同的传递函数。选择输入和输出领域的输入和输出通道,字段只有当有多个输入或输出出现。
3、在模型传递函数区,可以使用下列选项指定模型的结构:
4、在Initial Guess区域,选择Auto-selected自动抉择来计算估计的初始参数值。在参数表中的Initial Guess则显示为Auto。如果没有较好的初始猜测值,自动工作要优于特设值。
5、如果我们大概知道参数的值,可以在initial Guess列中输入此值,估计算法就会使用该值作为我们的起始点。类似的,如果我们完全知道该参数值,就在initial Guess列中输入该值并勾选Known复选框来修正该值。如果我们知道该参数的可能值所在的范围,那么我们可以在相应的Bounds字段中输入此范围,使得算法的搜索范围缩小,加速算法估计。
6、在Disturbance Model列表,我们可以选择一个可用选项
7、在Focus列表,选择如何衡量不同频率下拟合的相对重要性
8、在初始状态列表中,指定算法如何处理初始状态。
9、在协方差列表中,如果希望算法计算参数不确定度,请选择估计。 这些不确定性的影响在图上显示为模型置信区域。如果要省略估计不确定度,请选择无。 跳过不确定性计算可能会减少复杂模型和大型数据集的计算时间。
10、在“Model Name”字段中,编辑模型的名称或保留默认值。模型的名称在模型板中应该是唯一的。
11、要查看估计进度,请选中显示进度“Display progress”复选框。这将打开一个进度查看器窗口,其中报告估计进度。
12、点击“Regularization”正则化获得模型参数的正则化估计。在“正则化选项”对话框中指定正则化常量。
13、单击“Estimate”估计将此模型添加到系统识别应用程序中的模型板。
14、要在当前迭代完成后停止搜索并保存结果,请单击停止迭代“Stop Iterations”。要从当前模型继续迭代,请单击“Continue”继续按钮将当前参数值分配为下一次搜索的初始猜测。
得到模型参数估计后:
1、通过在“系统识别”应用程序的“Model Views模型视图”区域中选择相应的复选框来验证模型。
2、通过单击Value —> Initial Guess (值->初始猜测)按钮来优化模型,将当前参数值分配为下一次搜索的初始猜测,编辑名称字段,然后单击估计。
3、将模型导出到MATLAB工作区,以进一步分析,将其拖动到系统标识应用程序中的工作区矩形。
clear all;close all;
N=1000; %设置试验数据长度
A=[1,-1.5, 0.7]; B=[0,1,0.5]; C=[1,0.5];D=[1,0.5]; %模型参数
Model=idpoly(A,B); %理想系统模型
% figure(1);step(Model); axis([0 100 0 10]);grid; %绘制阶跃响应曲线
%产生输入输出数据
Model_Wnoise=idpoly(A, B ,1); %模型中加入白噪声
U=iddata([],idinput(N,'prbs')); %伪随机序列
E=iddata([],idinput(N,'rgs')); %白噪声序列
Y=sim(Model_Wnoise, [U,E]); %产生输出数据
Model_Noise1=idpoly(A,B,C); %有色噪声模型 1
Y1=sim(Model_Noise1, [U,E]);
Model_Noise2=idpoly(A,B,1,D); %有色噪声模型 2
Y2=sim(Model_Noise2, [U,E]);
data=iddata(Y,U); %输入输出数据组
opt = procestOptions;
opt.Display='on';
opt.DisturbanceModel='ARMA2';
opt.SearchMethod='lm';
%搜索方式有'lm','au','gr','gn'
sys=procest(data,'p1d',opt);
compare(data,sys);
该工具箱过程模型辨识模块中可以采用3种搜索方式:
‘lm’---Levenberg-Marquardt line search
‘gr’---Gradient-descent line search
‘gn’---Gauss-Netwon line search
‘au’---Nonlinear least squares with automatically chosen line search method