一种多项式矩阵列既约分析方法

合集下载

5.1多项式矩阵

5.1多项式矩阵

5.1 多项式矩阵1. 定义: 某个矩阵所有的元素由多项式组成()(())()()[()]:()()[]:ij m nm n m n A a A B C A C λλλλλλαλλ⨯⨯⨯=+∈⨯∈加法封闭性标量多项式封闭()()()n n n n A C C λλλ⨯⨯∈的逆元在上可能不存在2 . 多项式矩阵的子式抽取矩阵的r 行、r 列,组成一个方阵,该方阵的行列式作为一个r 阶子式。

201()=+1021A λλλλλλλ⎡⎤⎢⎥⎢⎥---⎣⎦1阶子式:9个,2阶子式: 9个, 2233C C ⨯个,有非0者。

3阶子式: 1个,其为:()()det 0A λ=多项式矩阵的阶次:如果()A λ的所有1r +阶子式都为0,而存在不为0的r 阶子式,则()()rank A r λ=。

在我们的例子中,rank(()A λ)=2.3. 多项式矩阵的展开2211()A λλλλ⎡⎤+=⎢⎥⎣⎦(1) 按λ的阶次展开:2100011()100100A λλλ⎡⎤⎡⎤⎡⎤=++⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦正则:如果λ的最高阶的系数矩阵为非奇异,则称()A λ为正则。

本例中,1010⎡⎤⎢⎥⎣⎦奇异,故()A λ不是正则。

(2)(i) 先对()A λ的各列依据λ的阶次展开。

记各列的最高次数为12,,c c 。

(ii) 把各列的展开拼起来。

各列的最高项系数拼成一个矩阵0c A 。

注意:各列的最高次数可能不相同。

如果0c A 非奇异,则称()A λ是列正则的。

21000010100()++11000100000A λλλλ⎡⎤⎡⎤⎡⎤⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦ 本例为列正则。

(3)(i) 先对()A λ的各行依据λ的阶次展开; 记各行的最高次数为12,,r r 。

(ii) 把各行的展开拼起来。

各行的最高项系数拼成一个矩阵0r A 。

注意:各行的最高次数可能不相同。

如果0r A 非奇异,则称()A λ是行正则的。

第11章线性系统的多项式矩阵描述解析

第11章线性系统的多项式矩阵描述解析

强调:广义状态变量必须是独立的。对于方程中的 某个储能参数若多次引用,必须给予恰当处理。
例如若将电容C2两端短路,则
(L1s
1 C1s
)1
(s)
1 C1s
1
(s)
(
1 C1s
1 C1s L2s
2 (s) R1)2
U(s) (s)
0
仍按上面整理得:
3s2 1 1
6s2
1 3s
1 (s)
R(s)P1 (s)Q(s) W(s) C(sI A)1 B E
注意PMD的实现具有强不唯一性,结果不唯一,实 现的维数也不唯一。
二.构造PMD的实现方法
构造PMD的实现是基于矩阵分式描述MFD的规范 形,能控形,能观测类实现而建立的。含义是指 PMD的传递函数矩阵G(s)中包含的一个MFD的实 现,称为PMD实现的内核。
n degdetP(s)
4.由(Ao , Bo , Co )导 出PMD的 实 现(A, B, C, E) 直接取定 A Ao,B Bo
1
2
(s)
3s
0
U(s)
degdetP(s)=4,产生系统升级错误的原因是化 简过程中电容C1进行了两次通分运算。
若 将(1)式 改 写为
1 C1s
1
(s)
1 C1s
2
(s)
U(s)
L1s1
(s)
代 入(2)得
- U(s) L1s1(s) (L2s R1)2 (s) 0
3s2 1 1
3.对Pr-1(s)Qr (s)构 造 观 测 器 形 实 现(A o , Bo , Co ) 对 严 真Pr-1 (s)Qr (s),Pr (s)行 既 约 , 构 造 观 测 器 形实 现(A o , Bo , Co )

太原理工大学研究生矩阵论第3.5,3.6

太原理工大学研究生矩阵论第3.5,3.6
则由式(3-13)又有
(3-14)
R( ) G11 ( ) D( ) G12 ( ) N ( )
把由式(3-14)代入式(3-15)得
(3-15)
R( ) G11 ( )D1 ( ) G12 ( ) N1 ( ) R1 ( ) W ()R1 ()
即 R1 ( ) 是 R( ) 的右公因子,按定义得到 R( ) 就是 D( ) 与 N ( ) 的 一个 gcrd. 证毕.
以下提到的 gcrd 均指 n n 方阵, 利用多项式矩阵的 Smith 标准形, 可以证明 n n 的 gcrd 的存在性. 定理 3-13(gcrd 的构造定理) 如果可以找到一个 ( n m ) ( n m ) 的单模多项式矩阵 G ( ) ,使得
D( ) G11 ( ) G12 ( ) D( ) R( ) G( ) N ( ) N ( ) O , (3-13) G ( ) G ( ) 21 22 则 n n 多项式矩阵 R( ) 即为 D( ) 与 N ( ) 的一个 gcrd.
证明 因为 G ( ) 是单模多项式பைடு நூலகம்阵,所以 G ( ) 可逆,设
F11 ( ) F12 ( ) G ( ) F ( ) F ( ) F ( ) , 22 21 用 G 1 ( ) F ( ) 左乘式(3-13)即得
1
D( ) F11 ( ) F12 ( ) R( ) F11 ( ) R( ) N ( ) O F ( ) F ( ) F ( ) R( ) 21 21 22
即有 D( ) F11 ( ) R( ), N ( ) F21 ( ) R( ) , 说明 R( ) 是 D( ) 与 N ( ) 的右公因子. 现设 R1 ( ) 是 D( ) 与 N ( ) 的另一个右公因子,故有

MATLAB矩阵分析及多项式运算

MATLAB矩阵分析及多项式运算

0 0 0 0 0 0 0
ans = 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0
例: >>v=[ 1,2,3,4 ]
v=
>> A= [1 0 0 0
0 2 0 0
1 2 3 4
>>A=diag(v)
0 0 3 0
0 0 0 4]
A= 1
0
0 0 0
2 0 0 3 0 0 4
>>v=diag(A)
>> V=[1 2 3 4 5]; >> diag(V)
ans = 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5
>> diag(V,2) ans =
>> diag(1:3,-1)
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 5 0 0
(7) 范得蒙矩阵 矩阵元素最后一列全为1,倒数第二列为一 个指定的向量,其他各列是其后列与倒数 第二列的点乘积。 函数vander(V)生成以向量V为基础向量的 范得蒙矩阵。
范得蒙矩阵
>> A=vander([1;2;3;5])
>> p=[1 2 3 4 5] p= 1 2 3 4 5 >> A=vander(p) A= 1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 1
– rand函数:产生的矩阵元素服从(0,1)之间的均匀 分布; – randn函数:产生的矩阵元素服从均值为0,方差为1的 正态分布。

第一部分 多项式矩阵理论

第一部分 多项式矩阵理论

第一部分:多项式矩阵理论
引言
互 质 性 1
MIMOs多变量线性系统传递函数矩阵可表达为 如下“分式”形式: N ( s)
G ( s ) ( g ij ( c ) ) pq
D( s )
其中N(s)和D(s)的最大公因子为单模阵,即N和D互质。 互质性是对两个多项式矩阵间的不可简约属性的表征。 互质性可分为右互质性和左互质性。 右互质多项式矩阵D(s)和N(s)列数相同。 左互质多项式矩阵DL(s)和NL(s)行数相同。
右互质。
D(s) 矩阵 对所有s列满秩 N ( s)
右互质的秩判据:
右互质贝左特等式:
存在多项式矩阵X(s)和Y(s), 使得:
X(s)D(s)+Y(s)N(s)=I(单位阵),反之亦然。
列既约性的定义:
给定方非奇异多项式矩阵M(s)
既 约 性 2
ci M(s)为其相应的列次数,i=1,2,…p。
称M(s)为列既约的,当且仅当:
其行列式的次数等于其所有列次数的和,即
deg det M ( s ) ci M ( s)
i 1
p
第一部分:多项式矩阵理论
列次表达式:对于多项式矩阵M(s), 其列次数记为:
单位矩阵I 初等矩阵E
初等变换
矩阵A的行初等变换相当于左乘相应的初等矩阵E 矩阵A的列初等变换相当于右乘相应的初等矩阵E
第一部分:多项式矩阵理论
单模矩阵定义:
称方阵Q(s)为单模阵,当且仅当其行列式detQ(s)=c 为独立于s的非零常数。 例1:非奇异的常数矩阵 s 1 s 2 例2: Q( s )
s kc 1 Sc ( s ) p p

多项式矩阵理论

多项式矩阵理论

如何求gcd 以gcrd为例.
Why:
04级研究生《线性系统理论》教案
Gcd 的性质 以gcrd为例 gcrd不唯一. 若R(s)是D(s)和N(s)的gcrd,W(s)是单模矩阵, 则W(s)R(s)也是D(s)和N(s)的gcrd. Why:
(2)D(s),N(s)的所有gcrd在非奇异性和单模性上相同,即 若R1(s)是D(s),N(s)的一个gcrd R2(s)也是D(s),N(s)的一个gcrd 则R1(s)非奇异R2(s)非奇异 R1(s)单模R2(s)单模 (3) (4)gcrd R(s)可表示为R(s)=X(s)D(s)+Y(s)N(s) (5)gcrd的多项式元的次数可以高于D(s),N(s)元多项式的次数.
04级研究生《线性系统理论》教案
非既约矩阵的既约化
1
通过左乘或右乘单模矩阵,即行(列)初等变换实现既约化。
2
实质:降低行或列的次数
3
含义:在初等运算下,degdetM(s)不变。
4
实现既约化以后,次数不能被降低了。
5
6.12 Smith形
史密斯形的特征
04级研究生《线性系统理论》教案
特征: Smith形的求法 见书。 对Smith形的一些讨论 对给定的多项式矩阵Q(s),其Smith形唯一。 (变换U(s),V(s)不唯一)
次数
6.10 列次数和行次数
03
01
02
04级研究生《线性系统理论》教案

多项式矩阵的列(行)次表示式
列次表示式 上例中的M(s)可表示为 一般地,
1
2
行次表示式
6.11 既约性
一. 既约性的定义 此处是对非奇异多项式矩阵定义的,方阵(可推广至非方)。 M(s)列既约: M(s)行既约: 注: 列既约和行既约之间无必然的联系; M(s)为对角阵时,列既约等价于行既约。 二. 既约性判据 如果已求出detM(s),则可利用定义判断; 利用列(行)次表示式

多项式矩阵理论

多项式矩阵理论
第七章 多项式矩阵理论
7.11 既约性 7.12 史密斯形 7.13 波波夫形 7.14 矩阵束和克罗内克尔形 7.15 小结
7.11 既约形
1.列既约性和行既约性 2.既约性判据
3.非既约性的既约化
既约性
1 行既约(行化简)多项式矩阵 满足下列关系式的非奇异 m 阶多项式方阵 M(s) 是行既约多项式矩阵。
证:由于rankA S 0,所以A s 中一定存在非零元素。通过行或 列的对调,我们总可以假设a11 ( s ) 0. 由引理得,可经过有限次初 等变换得到一个与A S 等价的B s 满足b11(s)为首一非零多项式, b (s) 且b11(s)能整除B s 的所有元素。将B S 第一项分别乘以- i1 加 b11 ( s ) b1 j ( s ) 到第i行,i 2, 3 m, 再将B S 的第一列分别乘以加到j列, b11 ( s ) j 2, 3 n.
A2(s ) P(s ) A1(s ) T(s )
(7 7)
【问题】为什么可以通过初等变换把多项式矩阵 化为Smith形且具有相关性质?
引理:设多项式矩阵 As =(aij (s))mn 的元素 a11 (s) 0,且A(s)中 至少有一个元素不能被它整除,则必存在一个与A(s) 等价的多项式矩阵B(S),其首行首列位置的素b (s) 0 , 且次数比 a11 (s) 的次数低,并且b11 ( s)整除B(s)的所有元 素。
k
i 1
ci
3 deg det A(s) 3;
k
i 1
ri
4 deg det A( s) 3
即A(s)列既约的,但不是行既约的。 同理可得,B(s)既不是行既约的,也不是列既约的

【文献综述】应用矩阵的性质求解行列式

【文献综述】应用矩阵的性质求解行列式

【文献综述】应用矩阵的性质求解行列式文献综述数学与应用数学应用矩阵的性质求解行列式1.本课题的研究意义《高等代数》历来作为数学系各个专业的重要基础课,它在线性规划、离散数学、管理科学、计算机以及物理、化学等学科中也有极为广泛的应用;同时它也是学习相关专业课程的重要语言和工具。

矩阵理论是高等代数中的重要内容之一,而在矩阵理论中,方阵是最为重要的研究对象之一,方阵的可逆性在高等代数的许多领域有着举足轻重的作用。

在线性方程组的求解,线性空间结构问题,二次型的研究以及欧氏空间等等方面都可见其身影。

矩阵的可逆性研究离不开行列式的计算。

在行列式的计算中,当行列式转换成上三角行列式或者是下三角行列式,对角行列式和特殊行列式时计算就会会相对来说简单,于是在计算行列式时就尽量将其转化成三角型行列式,行列式的计算还有其他很多算法(降阶法,加边法,数学归纳法,按一行或一列展开法)还有些特殊的行列式还可以通过范德蒙公式来计算。

在行列式的计算中,运用了大量的矩阵的性质(矩阵的加法,减法,乘法,数乘,还用到了矩阵的分块,矩阵的秩)将行列式转换成三角型行列式。

所以本文从行列式和矩阵的相关性来阐述,运用矩阵的相关性质来求解行列式,以达到简化行列式,是复杂问题简单化,从而解出行列式。

2.目前国内、外的研究现状行列式的概念最早是由十七世纪日本数学家关孝和提出来的,他在1683年写了一部叫做《解伏题之法》的著作,标题的意思是“解行列式问题的方法”,书里对行列式的概念和它的展开已经有了清楚的叙述。

欧洲第一个提出行列式概念的是德国的数学家莱布尼茨。

德国数学家雅可比于1841年总结并提出了行列式的系统理论。

早在17世纪和18世纪初行列式就在解线性方程组中出现,1772年法国数学家范德蒙首先把行列式作为专门理论独立于线性方程之外进行研究,到了19世纪,是行列式理论形成和发展的重要时期,19世纪中叶出现了行列式的大量定理。

矩阵最早来于方程组的系数及常数所构成的方阵,这一概念由19世纪英国数学家凯利首先提出,林谨瑜运用分块矩阵的若干性质来解决行列式的计算。

多项式矩阵理论

多项式矩阵理论

6.1 多项式及其互质性
1 多项式及其性质
以复数 s 为自变量的实系数多项式 d(s)
d (s) dnsn dn1sn1 d1s d0 , s C, di R, i 0,1,2,n
❖ d(s) 的次数
:n = deg d(s);
❖ d(s)为n 次多项式 :最高次幂系数dn ≠ 0;
可化简有理函数:倘若g(s) = n(s)/d(s)中, n(s)和d(s)不互质。
6.2 多项式矩阵及其属性
1 多项式矩阵
多项式矩阵:以多项式为元素的矩阵。
以aij(s)为元素的m×n多项式矩阵A(s)记为
a11(s) a1n (s)
A(s)
am1(s) amn (s)
【例6-3】一个2×3的多项式矩阵
最大公因式:如果 r(s) 是 d(s) 和 n(s) 的公因式,而且可被 d(s) 和 n(s) 的每个 公因式整除,则称 r(s) 是 d(s) 和 n(s) 的最大公因式。
注:若r(s) 最大公因式,c为常数,则cr(s)也是最大公因式,若限定r(s) 为首一多项式,则最大公因式具有唯一性。
互质多项式:如果 d(s) 和 n(s) 的最大公因式是(与 s 无关的)非零常数,则称 d(s) 和 n(s) 为互质多项式,简称 d(s) 和 n(s) 互质。
第六章
多项式矩阵理论 (数学基础部分)
引言(经典控制理论、现代控制理论、多项式矩阵理论的应用)
50年代以前,以控制理论和电路理论为两大支柱的线性系统理论已经发展成为相当成熟的 “经典线性系统理论”。
经典线性系统理论的主要特征: 研究对象 → 线性定常单变量系统; 数学工具 → 复变函数(特别是傅里叶变换和拉普拉斯变换); 研究方法 → 频率响应法; 理论优点 → 输入、输出和反馈信号的物理概念清晰、易于测量; 理论缺点 → ⑴ 只能反映系统的外部特性和行为,是一种外部描述法; ⑵ 设计自由度小、指标模糊,需要反复试凑才能完成任务。

第三章 矩阵的标准形与若干分解形式-2

第三章 矩阵的标准形与若干分解形式-2

§5 多项式矩阵的互质性与既约性一、多项式矩阵的最大公因子定义3-10 多项式矩阵()λR 称为具有相同列数的两个多项式矩阵()()λλD N ,的一个右公因子,如果存在多项式矩阵)(λN 和)(λD 使得:()()()()()()λλλλλλR D D R N N ==,。

类似地可以定义左公因子。

定义3-11 多项式矩阵()λR 称为具有相同列数的两个多项式矩阵()()λλD N ,的一个最大右公因子(记为gcrd ),如果:(1)()λR 是()()λλD N ,的右公因子;(2)()()λλD N ,的任一右公因子()λ1R ,都是()λR 的右乘因子,即存在多项式矩阵()λW ,使得()()()λλλ1R W R =。

对任意的n n ⨯与n m ⨯的多项式矩阵)(λD 与)(λN ,它们的gcrd 都存在。

因为T T T N D R ))(),(()(λλλ=便是一个。

定理3-13 (gcrd 的构造定理) 对于给定的n n ⨯和n m ⨯多项式矩阵()()λλN D ,,如果能找到一个)()(m n m n +⨯+的单模矩阵()λG ,使得()()()()()()()()()()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡022211211λλλλλλλλλλR N D G G G G N D G 3-13 则n n ⨯多项式矩阵()λR ,即为()λN 和()λD 的gcrd 。

证明:(1)证明()λR 是右公因子。

设()()()()()⎥⎦⎤⎢⎣⎡=-λλλλλ222112111F F F F G ,则()()()()()()()()()()()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡λλλλλλλλλλλR F R F R F F F F N D 2111222112110。

(2)证明()λR 是gcrd 。

设()λ1R 也是()()λλD N ,的右公因子,故有()()()()()()λλλλλλ1111,R D D R N N ==。

解多项式方程组求解方法与实际应用

解多项式方程组求解方法与实际应用

解多项式方程组求解方法与实际应用一、引言多项式方程组在数学和应用数学领域具有重要的地位,它们被广泛用于建模和求解实际问题。

本文将介绍多项式方程组的求解方法以及其在实际应用中的应用情况。

二、多项式方程组的求解方法1. 消元法消元法是求解多项式方程组的基本方法之一。

通过运用等式性质和变量代换,逐步消除方程组中的未知数,从而求得解的方法。

常用的消元法包括高斯消元法和高斯约当消元法等。

2. 系数矩阵的行列式对于一个n元的多项式方程组,可以将其系数矩阵进行求行列式的运算。

若行列式的值为0,则方程组无解;若行列式的值不为0,则方程组有唯一解或无穷多解,具体解的个数可以通过进一步的计算确定。

3. 高斯-赛德尔迭代法该方法是一种迭代法,通过逐步更新未知数的值,最终使得多项式方程组的解逼近于真解。

该方法在计算机仿真和数值求解中得到广泛应用。

4. 求解递推关系某些多项式方程组可以转化为递推关系,从而通过递推的方法求解。

例如,对于斐波那契数列的递推关系f(n) = f(n-1) + f(n-2),可以通过给定初始条件进而求解任意项的值。

三、多项式方程组的实际应用1. 控制系统多项式方程组在控制系统中的应用,包括电路、机械系统等。

通过建立相应的方程组,可以求解系统的状态变量和参数,进而实现对系统的控制和调整。

2. 经济学多项式方程组在经济学领域的应用十分广泛。

例如,经济学家可以通过建立多项式方程组模型来研究经济增长、失业率等问题,并通过求解方程组来得出经济模型的解释和预测。

3. 物理学多项式方程组在物理学研究中扮演着重要角色。

例如,牛顿力学中的运动方程可以表示为多项式方程组的形式,这种形式使得物理学家能够通过求解方程组来分析和预测物体的运动。

4. 统计学多项式方程组在统计学领域的应用较为复杂,例如在回归分析和最小二乘拟合等问题中,可以利用多项式方程组来描述变量之间的关系,并通过求解方程组来寻找最佳拟合曲线或平面。

四、结论多项式方程组的求解方法多种多样,可以根据实际问题的特点和要求来选择适合的方法。

高等代数知识点总结

高等代数知识点总结
线性无关:对于向量组1,...,r下列条件等价 • 1,...,r线性无关
• 当c1,...,cr不全为0时,必有c11+...+crr0 • 当c11+...+crr=0时,必有c1=...=cr=0 • 1,...,r的秩数等于r • (1,...,r)是列满秩矩阵
28
极大无关组与秩数:
1. 1,...,rS是S的一个极大无关组当且仅当 ① 1,...,r线性无关 ② S的每个向量都可由1,...,r线性表示
22
两种常用方法
1.分块矩阵的初等变换和Schur公式
• 把初等变换和初等矩阵的思想用到分块矩阵 • Schur公式 设A可逆
I
CA1
O I
A C
B D
A O
B
D CA1B
A C
B D
I O
A1B
A
I B
O
D CA1B
I
CA1
O I
A C
B D
I O
按第k行 第k列展开
Laplace定理
|aij| = ak1Ak1+…+aknAkn = a1kA1k+…+ankAnk
| A | j1
jk

A
i1 j1
ik jk
代余式
A
i1 j1
ik
jk
aj1Ak1+…+ajnAkn = a1jA1k+…+anjAnk =jk|aij|
分块三角矩阵的行列式
对称多项式基本定理 每个对称多项式,都可唯一
地表示成初等对称多项式的多项式
10
运算
行列式

一种多项式矩阵列既约分析方法汇总

一种多项式矩阵列既约分析方法汇总

一种多项式矩阵列既约分析方法一、目的与用途在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对pXp 阶多项式矩阵M(s) 的分析方法,并给出了确定其是否列既约的计算机程序。

经过输入处理也可实现行既约的分析。

二、数学原理给定一个pXp的非奇异多项式矩阵M(s)称为是列既约的,如果满足下述条件pdegdetM(s)=∑δi=1ciM(s)用程序实现时,要先定义一二维数组W[x][x]存放多项式矩阵,矩阵元素为一维整型数组类型,存放多项式的系数和首项次数。

通过键盘输入多项式,对所输入的多项式进行分析处理,得到二维数组w[x][x],每个多项式对应一个一维数组。

根据每个多项式对应的一维数组,得到该多项式的最高指数。

通过对二维数组w[x][x]的搜索,得到每一列最高指数的p最大值。

然后对所得到的最高指数的最大值分别按列进行累加, 得到∑δi=1ciM(s)。

其次,求出二维数组w[x][x]所对应的多项式矩阵的行列式的值,即 detM(s),detM(s)=∑(-1)ai1p1a2p2a3p3a4p4...anpn,其中p1p2p3p4…pn为从1到n所有整数的某detM(s),然种排列结果,i为p1p2p3p4…pn的逆序数。

找出该多项式的最高指数degp后与前面所得到的∑δi=1ciM(s) 进行比较,从而确定多项式矩阵M(s)的列既约性。

三、程序流程图四、使用说明1. 运行程序project1.exe;2. 按初始化键,输入多项式矩阵的行数和列数;3. 点击输入窗口可输入相应多项式。

输入多项式的格式如下所示:s^6+7s^5+3s^2-4s-125其中s的最高次数不能超过99,输入时次数由高到低排列;4. 进行列既约分析;输出结果将显示在屏幕上;5. 关闭程序。

五、举例例1:例2:附:软件清单(编程环境windows2000+delphi6)unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, ComCtrls, StdCtrls, Gauges;type sss=array[0..100] of integer;typeTForm1 = class(TForm)PageControl1: TPageControl;TabSheet1: TTabSheet;TabSheet2: TTabSheet;StringGrid1: TStringGrid;Button4: TButton;Edit1: TEdit;Label1: TLabel;StringGrid2: TStringGrid;Label2: TLabel;procedure FormCreate(Sender: TObject);procedure Button4Click(Sender: TObject);procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);procedure Edit1KeyPress(Sender: TObject; var Key: Char);procedure Edit1Exit(Sender: TObject);procedure FormResize(Sender: TObject);procedure PageControl1Change(Sender: TObject);procedure PageControl1Changing(Sender: TObject;var AllowChange: Boolean);private{ Private declarations }row,col:integer;procedure jyjs;function caldet:sss;public{ Public declarations }procedure changewidth(col:integer;sender:tstringgrid); end;varForm1: TForm1;s:array[0..100,0..100] of sss;implementationuses Unit2;{$R *.dfm}procedure Tform1.changewidth(col:integer;sender:tstringgrid); vari,j,k:integer;begink:=32;i:=form1.Font.Size;for j:=1 to sender.rowcount doif length(sender.Cells[col,j])*(i-2)>k thenk:=length(sender.Cells[col,j])*(i-2);sender.ColWidths[col]:=k;end;procedure TForm1.FormCreate(Sender: TObject);beginrow:=1;col:=1;self.PageControl1.ActivePageIndex:=0;end;procedure TForm1.Button4Click(Sender: TObject);vari,j,k:integer;beginif form2.ShowModal=mrok thentryself.StringGrid1.Enabled:=true;self.Edit1.Enabled:=true;edit1.text:='0';self.StringGrid1.ColCount:=strtoint(form2.colnumber.text)+1; self.StringGrid1.rowCount:=strtoint(form2.rownumber.text)+1; self.StringGrid1.FixedCols:=1;self.StringGrid1.Fixedrows:=1;for i:=1 to self.StringGrid1.rowCount-1 doself.StringGrid1.Cells[0,i]:=inttostr(i);for i:=1 to self.StringGrid1.colCount-1 doself.StringGrid1.ColWidths[i]:=32;for i:=1 to self.StringGrid1.colCount-1 doself.StringGrid1.Cells[i,0]:=inttostr(i);for i:=1 to self.StringGrid1.ColCount-1 dofor j:=1 to self.StringGrid1.rowCount-1 doself.StringGrid1.Cells[i,j]:='0';for i:=1 to 100 dofor j:=1 to 100 dofor k:=0 to 100 dos[i,j][k]:=0;self.Edit1.SetFocus;exceptshowmessage('无效的行数或列数!');end;end;procedure TForm1.StringGrid1MouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer); beginrow:=self.StringGrid1.row;col:=self.StringGrid1.col;label1.Caption:='s('+inttostr(row)+','+inttostr(col)+')=';edit1.Text:=self.StringGrid1.Cells[col,row];edit1.Left:=label1.Left+label1.Width+5;edit1.Width:=StringGrid1.Left+StringGrid1.Width-edit1.Left; edit1.SetFocus; end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); beginif key=#13 thenEdit1Exit(nil);end;procedure TForm1.Edit1Exit(Sender: TObject);vari,j,k,q:integer;temp,s1,s2,s3:string;flag:boolean;beginedit1.Text:=lowercase(edit1.text);flag:=false;tryfor i:=100 downto 1 dobeginif i<>1 thenj:=pos('s^'+inttostr(i),edit1.text)elsej:=pos('s',edit1.text);if (j<>0) thenbegins[col,row][0]:=i;flag:=true;break;end;end;k:=1;q:=0;temp:=edit1.text;if flag thenbeginfor i:=s[col,row][0] downto 1 dobeginif i=1 thenq:=pos('s',temp)elseq:=pos('s^'+inttostr(i),temp);if q<>0 thenbeginif q=1 thens[col,row][k]:=1elseif (copy(temp,1,q-1)='+') or (copy(temp,1,q-1)='-') thens[col,row][k]:=strtoint(copy(temp,1,q-1)+'1') elses[col,row][k]:=strtoint(copy(temp,1,q-1));if i=1 thentemp:=copy(temp,q+length('s'),1000)elsetemp:=copy(temp,q+length('s^'+inttostr(i)),1000); k:=k+1; endelsebegins[col,row][k]:=0;k:=k+1;end;end;if temp='' thens[col,row][k]:=0elses[col,row][k]:=strtoint(temp);endelsebegins[col,row][0]:=0;s[col,row][1]:=strtoint(edit1.text);end;exceptshowmessage('表达式格式错误!请按照如下各式输入:'+#13+' 9s^3+2s^2-3s+1');exit;end;temp:='';for i:= s[col,row][0] downto 0 dobegins1:=inttostr(s[col,row][ abs(i-s[col,row][0])+1 ]); s2:='s^'; s3:=inttostr(i);if strtoint(s3)=0 thenbegins2:='';s3:='';endelse if strtoint(s3)=1 thenbegins2:='s';s3:='';end;if (strtoint(s1)=0) thenbeginif (s[col,row][0]<>0) thens1:=''elses1:='0';s2:='';s3:='';endelsebeginif (strtoint(s1)>0) and (i<>s[col,row][0]) then s1:='+'+s1;if i<>0 thenbeginif s1='-1' then s1:='-';if s1='+1' then s1:='+';if s1='1' then s1:='';end;end;temp:=temp+s1+s2+s3;end;if temp='' then temp:='0';if temp=edit1.Text thenbeginself.StringGrid1.Cells[col,row]:=temp;changewidth(col,stringgrid1);endelsebeginshowmessage('表达式格式错误!请按照如下各式输入:'+#13+' s^3+2s^2-3s+1'); exit;end;end;procedure TForm1.FormResize(Sender: TObject);beginedit1.Text:=self.StringGrid1.Cells[col,row];edit1.Left:=label1.Left+label1.Width+5;edit1.Width:=StringGrid1.Left+StringGrid1.Width-edit1.Left;end;procedure TForm1.PageControl1Change(Sender: TObject);vari:integer;beginif self.PageControl1.ActivePageIndex=1 thenbeginself.StringGrid2.ColCount:=self.StringGrid1.ColCount;self.StringGrid2.rowCount:=self.StringGrid1.rowCount+1;for i:=1 to self.StringGrid2.rowCount-2 doself.StringGrid2.Cells[0,i]:=inttostr(i);self.StringGrid2.cells[0,self.StringGrid2.rowCount-1]:='列最高次数'; for i:=1 to self.StringGrid2.colCount-1 doself.StringGrid2.ColWidths[i]:=32;for i:=1 to self.StringGrid2.colCount-1 doself.StringGrid2.Cells[i,0]:=inttostr(i);self.StringGrid2.ColWidths[0]:=70;self.StringGrid2.ColWidths[self.StringGrid2.colCount-1]:=70;jyjs;end;end;procedure tform1.jyjs;varmc,mr,max,colsum,rowsum,deg,aa:integer;det:sss;detstr,str1,str2,s1,s2,s3:string;begin//复制原矩阵label2.caption:='';for mc:=1 to self.StringGrid1.ColCount-1 dofor mr:=1 to self.StringGrid1.rowCount-1 dobeginself.StringGrid2.Cells[mc,mr]:=self.StringGrid1.Cells[mc,mr]; changewidth(mc,self.StringGrid2);end;//计算kccolsum:=0;for mc:=1 to self.StringGrid2.colCount-1 dobeginmax:=0;for mr:=1 to self.StringGrid2.rowCount-2 dobeginif s[mc,mr][0]>max thenmax:=s[mc,mr][0];end;self.StringGrid2.cells[mc,self.StringGrid2.rowCount-1]:=inttostr(max); colsum:=colsum+max;end;//计算det M(s)det:=caldet;deg:=det[0];detstr:='';for aa:= det[0] downto 0 dobegins1:=inttostr(det[abs(aa-det[0])+1]);s2:='s^';s3:=inttostr(aa);if strtoint(s3)=0 thenbegins2:='';s3:='';endelse if strtoint(s3)=1 thenbegins2:='s';s3:='';end;if (strtoint(s1)=0) thenbeginif (det[0]<>0) thens1:=''elses1:='0';s2:='';s3:='';endelsebeginif (strtoint(s1)>0) and (aa<>det[0]) then s1:='+'+s1;if aa<>0 thenbeginif s1='-1' then s1:='-';if s1='+1' then s1:='+';if s1='1' then s1:='';end;end;detstr:=detstr+s1+s2+s3;end;//显示结果str2:='';if (det[0]=0) and (det[1]=0) thenbeginstr1:='M(s)是奇异的';str2:='M(s)不是列既约';endelsebeginstr1:='M(s)是非奇异的';if deg=colsum thenstr2:=str2+'M(s)是列既约的'elsestr2:=str2+'M(s)不是列既约的';end;label2.caption:=str1+' '+'∑kc='+inttostr(colsum)+' '+#13+ 'det M(s)='+detstr+' '+ 'deg det M(s)='+inttostr(deg)+#13+ str2;end;function tform1.caldet:sss;varn,aa:integer;a:array[1..100] of integer;str:string;he,ji,ji_temp:sss;procedure kkk(y:integer);varm,q,k,j:integer; //k第几层 m,j循环变量 a1,a2,a3,a4,flag:integer; begink:=y+1;if k=n+1 then //求detbegin//求乘积for a1:=0 to 100 doji[a1]:=0;ji[1]:=1;for a1:=1 to n do //s[a1,a[a1]]*jibeginji_temp:=ji;ji[0]:=ji[0]+s[a1,a[a1]][0];for a4:=1 to 100 doji[a4]:=0;for a2:=1 to s[a1,a[a1]][0]+1 dofor a3:=1 to ji_temp[0]+1 dobeginji[a2+a3-1]:=ji[a2+a3-1]+ji_temp[a3]*s[a1,a[a1]][a2]; end; end;//求和//统一次数if he[0]<ji[0] thenbeginfor a1:=he[0]+1 downto 1 dohe[a1+ji[0]-he[0]]:=he[a1];for a1:=ji[0]-he[0] downto 1 dohe[a1]:=0;he[0]:=ji[0];end;if ji[0]<he[0] thenbeginfor a1:=ji[0]+1 downto 1 doji[a1+he[0]-ji[0]]:=ji[a1];for a1:=he[0]-ji[0] downto 1 doji[a1]:=0;ji[0]:=he[0];end;//累加flag:=0;for a1:=1 to n dofor a2:=a1 to n doif a[a1]>a[a2] thenflag:=flag+1;if ( flag mod 2) =0 thenflag:=1elseflag:=-1;for a1:=1 to he[0]+1 dohe[a1]:=he[a1]+flag*ji[a1];for a1:=1 to 100 doif (he[1]=0) and (he[0]<>0) thenbeginfor a2:=1 to he[0]+1 dohe[a2]:=he[a2+1];he[0]:=he[0]-1;end;exit;end;for j:=1 to n do //产生数据begina[k]:=j;q:=0; //检查有无重复数据 for m:=1 to k-1 doif a[m]=j then q:=q+1;if q=0 thenkkk(k);end;end;beginfor aa:=0 to 100 dohe[aa]:=0;n:=self.StringGrid1.ColCount-1;kkk(0);caldet:=he;end;procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);beginallowchange:=edit1.Enabledend;end.。

矩阵多项式问题的两种解法

矩阵多项式问题的两种解法

参考文献
[1] 胡适耕, 刘先忠. 高等代数[M]. 北京: 科学出版社, 2007. [2] 张贤达. 矩阵分析与应用[M]. 北京: 清华大学出版社, 2004. [3] 北京大学数学系几何与代数教研室前代数小组编. 高等代数[M]. 北京: 高等教育出版社, 2003.
DOI: 10.12677/pm.2021.112040
关键词
矩阵多项式,若尔当标准型,Hamilton-Caylay定理,根子空间分解定理
Two Solutions of Matrix Polynomial Problem
He Chen, Changsong Jin School of Mathematics and Statistics, Northeastern University at Qinhuangdao, Qinhuangdao Hebei
312
理论数学
, Jk
)

Ji
=
λ1 1
1
λi
n×n
其中
rank (= f ( A)) ∑ rank ( = f ( Ji )) ∑ ni + ∑ rank ( f ( Ji ))
i
f ( xi )≠0
f (λi )= 0
Ji = J (λi , ni ) ,
= ∑ ni + ∑ rank (d ( Ji ))
同有 p, q ∈ K [x] ,使 =d fp + gq 。
又 0 ∈ ker f ( A) ∩ ker g ( A) ,则 x = p ( A) f ( A) x + q ( A) g ( A) x = 0 。 故 ker f ( A) + ker g ( A) = ker h ( A) ,证毕。

线性系统-(4)

线性系统-(4)

三、线性相关和线性无关 当且仅当存在一组多项式 1 s, 2 s,, p s 若 1 s 2 s p s 0 时,上式成立,则为线性无关。
p 个多项式向量 q1 s, q2 s,, qp s 为线性相关
1 sq1 s 2 sq2 s p sqp s 0
则称R为两个多项式矩阵的一个右公因子。
Rs W s R1 s
则称R为最大右公因子,记gcrd。
定理( gcrd构造定理):对给定的N,D, 如果存在单模阵 U,满足 Ds Rs
U(s) 0 N s
则称R为N,D的一个最大右公因子。
任 意 多 项 式 阵 推论6: Qsmr , R(s)r p 为
sRs minrankQs, rankRs rankQ
五、单模矩阵
Qs 为单模阵,当且仅当其行列式是独立于s的非零常数。
推论1: Qs 为单模阵,当且仅当其逆是一多项式阵 推论2: Qs 为单模阵,则 Qs 是非奇异,反之未必 推论3: 两个单模阵的乘积也是单模阵
七、 Hermite 定理和 Smith 定理(埃尔米特、史密斯)
Hermite 定理 设 Qs为多项式矩阵,并且第一行(列)不恒为零,其
秩为k,则必存在一个下(或上)三角形多项式矩阵 Qs与 Qs 列(或行)等价,并且 Qs具有如下性质:
(1)若 k r ,则的最后r-k列全为零; (2)若1 j k ,则第j行第j列上元素是首1多项式,并且 其是该行中的行次最高的; (3)若 1 j k ,则第j行第j列上元素为1时,该行中的其 它元素全为零。
s minm,r 推论3: Qs 满秩,当且仅当 rankQ 推论4: Qs 为 m m方阵,Qs 非奇异等价于 rankQs m

多项式矩阵方程的约束解的开题报告

多项式矩阵方程的约束解的开题报告

多项式矩阵方程的约束解的开题报告一、研究背景及意义多项式矩阵方程在控制理论、信号处理、图像处理等领域都有重要的应用。

在微分方程研究中,多项式矩阵方程也占有重要的地位。

但是,多项式矩阵方程的求解是一个复杂的问题,需要对其进行约束求解。

因此,研究多项式矩阵方程的约束解具有重要的理论意义和现实意义。

二、研究内容本文主要研究具有多项式项的矩阵方程的约束解。

具体研究内容如下:1. 多项式矩阵方程的定义和性质首先,本文将介绍多项式矩阵方程的基本定义和性质,包括方程的形式、方程的解集、解的唯一性等。

2. 多项式矩阵方程的约束求解方法接下来,针对多项式矩阵方程的求解问题,本文将研究约束求解方法,包括基于矩阵分解的求解方法、基于神经网络的求解方法、基于遗传算法的求解方法等,其中重点关注基于矩阵分解的求解方法。

3. 约束条件的分析与设计在多项式矩阵方程的约束求解中,约束条件的设计是至关重要的。

本文将从约束条件的角度出发,分析不同约束条件的特点和适用范围,并设计符合实际需求的约束条件。

4. 算法仿真与应用实例最后,本文将对所提出的多项式矩阵方程的约束求解方法进行算法仿真,比较不同方法的求解效果。

同时,将以图像处理为例,探究多项式矩阵方程在实际应用中的效果。

三、研究内容与进度安排本文预计在3-4个月的时间内完成。

具体研究内容与进度安排如下:1. 第1-2月,研究多项式矩阵方程的基本定义和性质,并进行约束求解方法的文献综述。

2. 第3-4月,分析约束条件的特点和适用范围,并设计符合实际需求的约束条件。

同时,将根据不同的约束条件,研究不同的求解方法。

3. 第5-6月,进行算法仿真,并以图像处理为例,探究多项式矩阵方程在实际应用中的效果。

4. 第7-8月,完成论文撰写和答辩准备。

四、参考文献1. R. Horn and V. Johnson, Matrix analysis, Cambridge University Press, 2013.2. R. A. Horn and C. R. Johnson, Matrix analysis, Cambridge University Press, 1990.3. T. Kailath, Linear systems, Prentice-Hall, 1980.4. A. Ben-Israel and T. N. E. Greville, Generalized inverses,Springer-Verlag, 2003.5. R. A. Horn, Matrix calculus, Baltimore: Johns Hopkins University Press, 1982.。

有限域上多项式的行列式的一种求法

有限域上多项式的行列式的一种求法

有限域上多项式的行列式的一种求法
苏磊;孙同森;郭晓沛;徐克舰
【期刊名称】《青岛大学学报(自然科学版)》
【年(卷),期】2014(027)002
【摘要】定义了多项式的范数、共轭多项式、多项式的行列式的概念,研究了Galois扩张上多项式的行列式的一种求法,还讨论了本原多项式与其在扩域中的因式以及其不同因式之间的关系.
【总页数】3页(P4-6)
【作者】苏磊;孙同森;郭晓沛;徐克舰
【作者单位】青岛大学数学科学学院,青岛266071;青岛大学数学科学学院,青岛266071;青岛大学数学科学学院,青岛266071;青岛大学数学科学学院,青岛266071
【正文语种】中文
【中图分类】D156.2+1
【相关文献】
1.有限域上多项式分解的一种快速算法 [J], 柯善学;曾本胜;韩文报;祝卫华
2.判定有限域上不可约多项式及本原多项式的一种高效算法 [J], 王鑫;王新梅;韦宝典
3.确定有限域上给定周期的不可约多项式的个数以及利用低次不可约多项式构造高次不可约多项式 [J], 虞培全
4.求有限域Fp上多项式周期的一种实用算法 [J], 王鑫;吴仕文;鲁晓斌;贾利新
5.一种基于有限域上的多项式分解定理的群签名方案 [J], 张兴兰
因版权原因,仅展示原文概要,查看原文内容请购买。

基于矩阵行列变换的测试用例约简算法

基于矩阵行列变换的测试用例约简算法

基于矩阵行列变换的测试用例约简算法周冲波;楼俊钢;程龙【期刊名称】《计算机应用研究》【年(卷),期】2013(30)3【摘要】In allusion to the problem of test requirements reduction, this paper defined a new Boolean operation of the relationships which didn' t change the coverage of test suites to test requirements. Redundance requirements was reducted by column transformation operation of matrix basis of the interrelations among the testing requirements, then test suites could be re-ducted by row transformation operation of matrix. The experimental results based on several cases shows that, compared with some other existed methods, this method has better property that can generate the minimal test suite to test all the test requirements sufficiently.%针对测试用例约简问题,定义了一种不会改变测试需求与测试用例覆盖关系的布尔运算.应用此运算,辅以不同的测试需求、用例集优先策略,经矩阵的列变换得到精简的测试需求集,然后使用行变换对测试用例集进行约简.该方法不受测试用例输入顺序的影响.实验表明,与一些常用的约简算法相比,提出的算法在有序树生成程序测试用例约简的几个实例上都能得到较优的用例集.【总页数】4页(P779-782)【作者】周冲波;楼俊钢;程龙【作者单位】湖州师范学院信息与工程学院,浙江湖州313000【正文语种】中文【中图分类】TP311【相关文献】1.基于分辨矩阵和约简树的增量式属性约简算法 [J], 侯枫;刘丰年2.二进制可辨矩阵的变换及高效属性约简算法的构造 [J], 支天云;苗夺谦3.基于布尔矩阵的初等行变换的知识约简算法 [J], 王道林4.三角矩阵的行列主序压缩存储及变换算法 [J], 陈伟华5.基于自适应高斯混合模型的软件测试用例集约简算法研究 [J], 杨永国因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种多项式矩阵列既约分析方法一、目的与用途在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对pXp 阶多项式矩阵M(s) 的分析方法,并给出了确定其是否列既约的计算机程序。

经过输入处理也可实现行既约的分析。

二、数学原理给定一个pXp 的非奇异多项式矩阵M(s)称为是列既约的,如果满足下述条件∑==pi cis M s M 1)()(det deg δ用程序实现时,要先定义一二维数组W[x][x]存放多项式矩阵,矩阵元素为一维整型数组类型,存放多项式的系数和首项次数。

通过键盘输入多项式,对所输入的多项式进行分析处理,得到二维数组w[x][x],每个多项式对应一个一维数组。

根据每个多项式对应的一维数组,得到该多项式的最高指数。

通过对二维数组w[x][x]的搜索,得到每一列最高指数的最大值。

然后对所得到的最高指数的最大值分别按列进行累加, 得到∑=pi cis M 1)(δ。

其次,求出二维数组w[x][x]所对应的多项式矩阵的行列式的值,即 )(det s M ,npn p p p p ia a a a as M ...)1()(det 44332211∑-=,其中p1p2p3p4…pn 为从1到n 所有整数的某种排列结果,i 为p1p2p3p4…pn 的逆序数。

找出该多项式的最高指数 )(det degs M ,然后与前面所得到的∑=pi cis M 1)(δ进行比较,从而确定多项式矩阵M(s)的列既约性。

三、程序流程图四、使用说明1.运行程序project1.exe;2.按初始化键,输入多项式矩阵的行数和列数;3.点击输入窗口可输入相应多项式。

输入多项式的格式如下所示:s^6+7s^5+3s^2-4s-125其中s的最高次数不能超过99,输入时次数由高到低排列;4.进行列既约分析;输出结果将显示在屏幕上;5.关闭程序。

五、举例例1:例2:附:软件清单(编程环境windows2000+delphi6)unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, ComCtrls, StdCtrls, Gauges;type sss=array[0..100] of integer;typeTForm1 = class(TForm)PageControl1: TPageControl;TabSheet1: TTabSheet;TabSheet2: TTabSheet;StringGrid1: TStringGrid;Button4: TButton;Edit1: TEdit;Label1: TLabel;StringGrid2: TStringGrid;Label2: TLabel;procedure FormCreate(Sender: TObject);procedure Button4Click(Sender: TObject);procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);procedure Edit1KeyPress(Sender: TObject; var Key: Char);procedure Edit1Exit(Sender: TObject);procedure FormResize(Sender: TObject);procedure PageControl1Change(Sender: TObject);procedure PageControl1Changing(Sender: TObject;var AllowChange: Boolean);private{ Private declarations }row,col:integer;procedure jyjs;function caldet:sss;public{ Public declarations }procedure changewidth(col:integer;sender:tstringgrid);end;varForm1: TForm1;s:array[0..100,0..100] of sss;implementationuses Unit2;{$R *.dfm}procedure Tform1.changewidth(col:integer;sender:tstringgrid); vari,j,k:integer;begink:=32;i:=form1.Font.Size;for j:=1 to sender.rowcount doif length(sender.Cells[col,j])*(i-2)>k thenk:=length(sender.Cells[col,j])*(i-2);sender.ColWidths[col]:=k;end;procedure TForm1.FormCreate(Sender: TObject);beginrow:=1;col:=1;self.PageControl1.ActivePageIndex:=0;end;procedure TForm1.Button4Click(Sender: TObject);vari,j,k:integer;beginif form2.ShowModal=mrok thentryself.StringGrid1.Enabled:=true;self.Edit1.Enabled:=true;edit1.text:='0';self.StringGrid1.ColCount:=strtoint(form2.colnumber.text)+1; self.StringGrid1.rowCount:=strtoint(form2.rownumber.text)+1; self.StringGrid1.FixedCols:=1;self.StringGrid1.Fixedrows:=1;for i:=1 to self.StringGrid1.rowCount-1 doself.StringGrid1.Cells[0,i]:=inttostr(i);for i:=1 to self.StringGrid1.colCount-1 doself.StringGrid1.ColWidths[i]:=32;for i:=1 to self.StringGrid1.colCount-1 doself.StringGrid1.Cells[i,0]:=inttostr(i);for i:=1 to self.StringGrid1.ColCount-1 dofor j:=1 to self.StringGrid1.rowCount-1 doself.StringGrid1.Cells[i,j]:='0';for i:=1 to 100 dofor j:=1 to 100 dofor k:=0 to 100 dos[i,j][k]:=0;self.Edit1.SetFocus;exceptshowmessage('无效的行数或列数!');end;end;procedure TForm1.StringGrid1MouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginrow:=self.StringGrid1.row;col:=self.StringGrid1.col;label1.Caption:='s('+inttostr(row)+','+inttostr(col)+')=';edit1.Text:=self.StringGrid1.Cells[col,row];edit1.Left:=label1.Left+label1.Width+5;edit1.Width:=StringGrid1.Left+StringGrid1.Width-edit1.Left; edit1.SetFocus;end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); beginif key=#13 thenEdit1Exit(nil);end;procedure TForm1.Edit1Exit(Sender: TObject);vari,j,k,q:integer;temp,s1,s2,s3:string;flag:boolean;beginedit1.Text:=lowercase(edit1.text);flag:=false;tryfor i:=100 downto 1 dobeginif i<>1 thenj:=pos('s^'+inttostr(i),edit1.text)elsej:=pos('s',edit1.text);if (j<>0) thenbegins[col,row][0]:=i;flag:=true;break;end;end;k:=1;q:=0;temp:=edit1.text;if flag thenbeginfor i:=s[col,row][0] downto 1 dobeginif i=1 thenq:=pos('s',temp)elseq:=pos('s^'+inttostr(i),temp);if q<>0 thenbeginif q=1 thens[col,row][k]:=1elseif (copy(temp,1,q-1)='+') or (copy(temp,1,q-1)='-') thens[col,row][k]:=strtoint(copy(temp,1,q-1)+'1')elses[col,row][k]:=strtoint(copy(temp,1,q-1));if i=1 thentemp:=copy(temp,q+length('s'),1000)elsetemp:=copy(temp,q+length('s^'+inttostr(i)),1000);k:=k+1;endelsebegins[col,row][k]:=0;k:=k+1;end;end;if temp='' thens[col,row][k]:=0elses[col,row][k]:=strtoint(temp);endelsebegins[col,row][0]:=0;s[col,row][1]:=strtoint(edit1.text);end;exceptshowmessage('表达式格式错误!请按照如下各式输入:'+#13+'s^3+2s^2-3s+1');exit;end;temp:='';for i:= s[col,row][0] downto 0 dobegins1:=inttostr(s[col,row][ abs(i-s[col,row][0])+1 ]); s2:='s^';s3:=inttostr(i);if strtoint(s3)=0 thenbegins2:='';s3:='';endelse if strtoint(s3)=1 thenbegins2:='s';s3:='';end;if (strtoint(s1)=0) thenbeginif (s[col,row][0]<>0) thens1:=''elses1:='0';s2:='';s3:='';endelsebeginif (strtoint(s1)>0) and (i<>s[col,row][0]) then s1:='+'+s1;if i<>0 thenbeginif s1='-1' then s1:='-';if s1='+1' then s1:='+';if s1='1' then s1:='';end;end;temp:=temp+s1+s2+s3;end;if temp='' then temp:='0';if temp=edit1.Text thenbeginself.StringGrid1.Cells[col,row]:=temp;changewidth(col,stringgrid1);endelsebeginshowmessage('表达式格式错误!请按照如下各式输入:'+#13+' s^3+2s^2-3s+1');exit;end;end;procedure TForm1.FormResize(Sender: TObject);beginedit1.Text:=self.StringGrid1.Cells[col,row];edit1.Left:=label1.Left+label1.Width+5;edit1.Width:=StringGrid1.Left+StringGrid1.Width-edit1.Left;end;procedure TForm1.PageControl1Change(Sender: TObject);vari:integer;beginif self.PageControl1.ActivePageIndex=1 thenbeginself.StringGrid2.ColCount:=self.StringGrid1.ColCount;self.StringGrid2.rowCount:=self.StringGrid1.rowCount+1;for i:=1 to self.StringGrid2.rowCount-2 doself.StringGrid2.Cells[0,i]:=inttostr(i);self.StringGrid2.cells[0,self.StringGrid2.rowCount-1]:='列最高次数';for i:=1 to self.StringGrid2.colCount-1 doself.StringGrid2.ColWidths[i]:=32;for i:=1 to self.StringGrid2.colCount-1 doself.StringGrid2.Cells[i,0]:=inttostr(i);self.StringGrid2.ColWidths[0]:=70;self.StringGrid2.ColWidths[self.StringGrid2.colCount-1]:=70;jyjs;end;end;procedure tform1.jyjs;varmc,mr,max,colsum,rowsum,deg,aa:integer;det:sss;detstr,str1,str2,s1,s2,s3:string;begin//复制原矩阵label2.caption:='';for mc:=1 to self.StringGrid1.ColCount-1 dofor mr:=1 to self.StringGrid1.rowCount-1 dobeginself.StringGrid2.Cells[mc,mr]:=self.StringGrid1.Cells[mc,mr];changewidth(mc,self.StringGrid2);end;//计算kccolsum:=0;for mc:=1 to self.StringGrid2.colCount-1 dobeginmax:=0;for mr:=1 to self.StringGrid2.rowCount-2 dobeginif s[mc,mr][0]>max thenmax:=s[mc,mr][0];end;self.StringGrid2.cells[mc,self.StringGrid2.rowCount-1]:=inttostr(max); colsum:=colsum+max;end;//计算det M(s)det:=caldet;deg:=det[0];detstr:='';for aa:= det[0] downto 0 dobegins1:=inttostr(det[abs(aa-det[0])+1]);s2:='s^';s3:=inttostr(aa);if strtoint(s3)=0 thenbegins2:='';s3:='';endelse if strtoint(s3)=1 thenbegins2:='s';s3:='';end;if (strtoint(s1)=0) thenbeginif (det[0]<>0) thens1:=''elses1:='0';s2:='';s3:='';endelsebeginif (strtoint(s1)>0) and (aa<>det[0]) then s1:='+'+s1;if aa<>0 thenbeginif s1='-1' then s1:='-';if s1='+1' then s1:='+';if s1='1' then s1:='';end;end;detstr:=detstr+s1+s2+s3;end;//显示结果str2:='';if (det[0]=0) and (det[1]=0) thenbeginstr1:='M(s)是奇异的';str2:='M(s)不是列既约';endelsebeginstr1:='M(s)是非奇异的';if deg=colsum thenstr2:=str2+'M(s)是列既约的'elsestr2:=str2+'M(s)不是列既约的';end;label2.caption:=str1+' '+'∑kc='+inttostr(colsum)+' '+#13+ 'det M(s)='+detstr+' '+'deg det M(s)='+inttostr(deg)+#13+str2;end;function tform1.caldet:sss;varn,aa:integer;a:array[1..100] of integer;str:string;he,ji,ji_temp:sss;procedure kkk(y:integer);varm,q,k,j:integer; //k第几层 m,j循环变量a1,a2,a3,a4,flag:integer;begink:=y+1;if k=n+1 then //求detbegin//求乘积for a1:=0 to 100 doji[a1]:=0;ji[1]:=1;for a1:=1 to n do //s[a1,a[a1]]*jibeginji_temp:=ji;ji[0]:=ji[0]+s[a1,a[a1]][0];for a4:=1 to 100 doji[a4]:=0;for a2:=1 to s[a1,a[a1]][0]+1 dofor a3:=1 to ji_temp[0]+1 dobeginji[a2+a3-1]:=ji[a2+a3-1]+ji_temp[a3]*s[a1,a[a1]][a2]; end;end;//求和//统一次数if he[0]<ji[0] thenbeginfor a1:=he[0]+1 downto 1 dohe[a1+ji[0]-he[0]]:=he[a1];for a1:=ji[0]-he[0] downto 1 dohe[a1]:=0;he[0]:=ji[0];end;if ji[0]<he[0] thenbeginfor a1:=ji[0]+1 downto 1 doji[a1+he[0]-ji[0]]:=ji[a1];for a1:=he[0]-ji[0] downto 1 doji[a1]:=0;ji[0]:=he[0];end;//累加flag:=0;for a1:=1 to n dofor a2:=a1 to n doif a[a1]>a[a2] thenflag:=flag+1;if ( flag mod 2) =0 thenflag:=1elseflag:=-1;for a1:=1 to he[0]+1 dohe[a1]:=he[a1]+flag*ji[a1];for a1:=1 to 100 doif (he[1]=0) and (he[0]<>0) thenbeginfor a2:=1 to he[0]+1 dohe[a2]:=he[a2+1];he[0]:=he[0]-1;end;exit;end;for j:=1 to n do //产生数据begina[k]:=j;q:=0; //检查有无重复数据for m:=1 to k-1 doif a[m]=j then q:=q+1;if q=0 thenkkk(k);end;end;beginfor aa:=0 to 100 dohe[aa]:=0;n:=self.StringGrid1.ColCount-1;kkk(0);caldet:=he;end;procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);beginallowchange:=edit1.Enabledend;end.。

相关文档
最新文档