一种多项式矩阵列既约分析方法
- 格式:doc
- 大小:138.00 KB
- 文档页数:16
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 λ是行正则的。
【文献综述】应用矩阵的性质求解行列式文献综述数学与应用数学应用矩阵的性质求解行列式1.本课题的研究意义《高等代数》历来作为数学系各个专业的重要基础课,它在线性规划、离散数学、管理科学、计算机以及物理、化学等学科中也有极为广泛的应用;同时它也是学习相关专业课程的重要语言和工具。
矩阵理论是高等代数中的重要内容之一,而在矩阵理论中,方阵是最为重要的研究对象之一,方阵的可逆性在高等代数的许多领域有着举足轻重的作用。
在线性方程组的求解,线性空间结构问题,二次型的研究以及欧氏空间等等方面都可见其身影。
矩阵的可逆性研究离不开行列式的计算。
在行列式的计算中,当行列式转换成上三角行列式或者是下三角行列式,对角行列式和特殊行列式时计算就会会相对来说简单,于是在计算行列式时就尽量将其转化成三角型行列式,行列式的计算还有其他很多算法(降阶法,加边法,数学归纳法,按一行或一列展开法)还有些特殊的行列式还可以通过范德蒙公式来计算。
在行列式的计算中,运用了大量的矩阵的性质(矩阵的加法,减法,乘法,数乘,还用到了矩阵的分块,矩阵的秩)将行列式转换成三角型行列式。
所以本文从行列式和矩阵的相关性来阐述,运用矩阵的相关性质来求解行列式,以达到简化行列式,是复杂问题简单化,从而解出行列式。
2.目前国内、外的研究现状行列式的概念最早是由十七世纪日本数学家关孝和提出来的,他在1683年写了一部叫做《解伏题之法》的著作,标题的意思是“解行列式问题的方法”,书里对行列式的概念和它的展开已经有了清楚的叙述。
欧洲第一个提出行列式概念的是德国的数学家莱布尼茨。
德国数学家雅可比于1841年总结并提出了行列式的系统理论。
早在17世纪和18世纪初行列式就在解线性方程组中出现,1772年法国数学家范德蒙首先把行列式作为专门理论独立于线性方程之外进行研究,到了19世纪,是行列式理论形成和发展的重要时期,19世纪中叶出现了行列式的大量定理。
矩阵最早来于方程组的系数及常数所构成的方阵,这一概念由19世纪英国数学家凯利首先提出,林谨瑜运用分块矩阵的若干性质来解决行列式的计算。
§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. 统计学多项式方程组在统计学领域的应用较为复杂,例如在回归分析和最小二乘拟合等问题中,可以利用多项式方程组来描述变量之间的关系,并通过求解方程组来寻找最佳拟合曲线或平面。
四、结论多项式方程组的求解方法多种多样,可以根据实际问题的特点和要求来选择适合的方法。
一种多项式矩阵列既约分析方法一、目的与用途在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对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. 多项式矩阵方程的定义和性质首先,本文将介绍多项式矩阵方程的基本定义和性质,包括方程的形式、方程的解集、解的唯一性等。
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], 张兴兰
因版权原因,仅展示原文概要,查看原文内容请购买。
一种多项式矩阵列既约分析方法一、目的与用途在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对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.。