一种多项式矩阵列既约分析方法
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章线性系统的多项式矩阵描述解析

强调:广义状态变量必须是独立的。对于方程中的 某个储能参数若多次引用,必须给予恰当处理。
例如若将电容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-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矩阵分析及多项式运算

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世纪英国数学家凯利首先提出,林谨瑜运用分块矩阵的若干性质来解决行列式的计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.。