Maxima中基于特征多项式系数匹配的观测器增益求解问题
问题描述
假设我有如下形式的矩阵A:
然后是如下形式的矩阵C:
最后是如下形式的矩阵L:
我的目标是推导矩阵L的元素计算公式,使得矩阵A-LC的特征值为矩阵A特征值的K倍,K为给定参数。
我首先完成了矩阵的定义:
A: matrix( [-a,0,b,c], [0,a,-c,b], [d,0,-e,-1], [0,d,1,-e] ); C: matrix( [1,0,0,0], [0,1,0,0] ); L: matrix( [l1,-l2], [l2,l1], [l3,-l4], [l4,l3] );
随后我求出了矩阵A的特征多项式(其根为矩阵A的特征值):
char_pol_system : ratsimp(expand(charpoly(A, x))); x^4+2*e*x^3+(e^2-2*b*d-a^2+1)*x^2+((-2*b*d-2*a^2)*e-2*c*d)*x-a^2*e^2+(c^2+b^2)*d^2-a^2
我也求出了矩阵A-LC的特征多项式(其根为矩阵A-LC的特征值)。“A-LC的特征值为A特征值的K倍”的要求通过替换y=Kx实现:
char_pol_observer : subst((K*x), y, ratsimp(expand(charpoly(A-L.C,y)))); K^4*x^4+K^3*(2*l1+2*e)*x^3+K^2*(2*c*l4+2*b*l3+l2^2+l1^2+4*e*l1+e^2-2*b*d-a^2+1)*x^2+K*((2*b*l2+2*c*l1+2*c*e-2*b)*l4+(-2*c*l2+2*b*l1+2*b*e+2*c)*l3+2*e*l2^2+2*c*d*l2+2*e*l1^2+(2*e^2-2*b*d+2)*l1+(-2*b*d-2*a^2)*e-2*c*d)*x+(c^2+b^2)*l4^2+((2*b*e+2*c)*l2+(2*c*e-2*b)*l1)*l4+(c^2+b^2)*l3^2+((2*b-2*c*e)*l2+(2*b*e+2*c)*l1+(-2*c^2-2*b^2)*d)*l3+(e^2+1)*l2^2+(2*c*d*e-2*b*d)*l2+(e^2+1)*l1^2+(-2*b*d*e-2*c*d)*l1-a^2*e^2+(c^2+b^2)*d^2-a^2
现在我得到了两个以x为变量的多项式,我的思路是通过对比x同幂次的系数建立方程,求解未知参数l1-l4。
我的问题是:
- 如何消去第二个多项式中x最高次项的K^4系数?
- 如何编写代码实现两个多项式同幂次x的系数对比并建立对应方程?
解答
1. 消去最高次项K^4系数的方法
直接把原系统特征多项式整体乘以K^4即可,不需要对char_pol_observer做除法,还能避免K=0的特殊情况处理。逻辑上完全成立:若A的特征值为λ,A-LC的特征值为Kλ,那么A-LC的特征多项式代入y=Kx后,应该和A的特征多项式乘以K^4完全相等,两者最高次项的系数会天然对齐。
2. 系数对比建方程的代码实现(适配你当前使用的Maxima环境)
用Maxima内置的coeff函数可以直接提取多项式指定次幂的系数,逐次幂建立等式即可,示例代码如下:
/* 建立两个多项式的等价关系 */ eq_total: char_pol_observer = K^4 * char_pol_system; /* 提取x的0次到4次幂对应的系数方程 */ coeff_eqs: makelist(coeff(lhs(eq_total), x, i) = coeff(rhs(eq_total), x, i), i, 0, 4); /* 输出所有方程 */ for i:1 thru length(coeff_eqs) do print(coeff_eqs[i]);
运行后coeff_eqs列表会存储5个系数匹配方程,其中最高次项(4次)的方程不包含未知量l1-l4,直接忽略,剩下4个方程刚好可以求解4个未知参数。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

