一种多项式矩阵列既约分析方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种多项式矩阵列既约分析方法
一、目的与用途
在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对pXp 阶多项式矩阵M(s) 的分析方法,并给出了确定其是否列既约的计算机程序。经过输入处理也可实现行既约的分析。
二、数学原理
给定一个pXp 的非奇异多项式矩阵M(s)称为是列既约的,如果满足下述条件
∑==
p
i ci
s M s M 1
)()(det deg δ
用程序实现时,要先定义一二维数组W[x][x]存放多项式矩阵,矩阵元素为一维整型数组类型,存放多项式的系数和首项次数。通过键盘输入多项式,对所输入的多项式进行分析处理,得到二维数组w[x][x],每个多项式对应一个一维数组。根据每个多项式对应的一维数组,得到该多项式的最高指数。通过对二维数组w[x][x]的搜索,得到每一列最高指数的
最大值。然后对所得到的最高指数的最大值分别按列进行累加, 得到
∑=p
i ci
s M 1
)(δ
。
其次,求出二维数组w[x][x]所对应的多项式矩阵的行列式的值,即 )(det s M ,npn p p p p i
a a a a a
s M ...)1()(det 4433221
1∑-=
,其中p1p2p3p4…pn 为从1到n 所有整数的某
种排列结果,i 为p1p2p3p4…pn 的逆序数。找出该多项式的最高指数 )(det deg
s M ,然
后与前面所得到的
∑=p
i ci
s 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;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, ComCtrls, StdCtrls, Gauges;
type sss=array[0..100] of integer;
type
TForm1 = 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;
var
Form1: TForm1;
s:array[0..100,0..100] of sss;
implementation
uses Unit2;
{$R *.dfm}
procedure Tform1.changewidth(col:integer;sender:tstringgrid); var
i,j,k:integer;
begin
k:=32;
i:=form1.Font.Size;
for j:=1 to sender.rowcount do
if length(sender.Cells[col,j])*(i-2)>k then
k:=length(sender.Cells[col,j])*(i-2);
sender.ColWidths[col]:=k;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
row:=1;
col:=1;
self.PageControl1.ActivePageIndex:=0;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,j,k:integer;
begin