You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maxima中基于特征多项式系数匹配的观测器增益求解问题

问题描述

假设我有如下形式的矩阵A:
矩阵A
然后是如下形式的矩阵C:
矩阵C
最后是如下形式的矩阵L:
矩阵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。
我的问题是:

  1. 如何消去第二个多项式中x最高次项的K^4系数?
  2. 如何编写代码实现两个多项式同幂次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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:45:01