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

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

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

一、目的与用途

在多项式矩阵分析中,矩阵的既约性是一个很重要的问题,本文介绍了针对pXp 阶多项式矩阵M(s) 的分析方法,并给出了确定其是否列既约的计算机程序。经过输入处理也可实现行既约的分析。

二、数学原理

给定一个pXp的非奇异多项式矩阵M(s)称为是列既约的,如果满足下述条件

p

degdetM(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)ai

1p1a2p2a3p3a4p4...anpn,其中p1p2p3p4…pn为从1到n所有整数的某

detM(s),然种排列结果,i为p1p2p3p4…pn的逆序数。找出该多项式的最高指数deg

p

后与前面所得到的∑δ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;

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

if form2.ShowModal=mrok then

try

self.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 do

self.StringGrid1.Cells[0,i]:=inttostr(i);

for i:=1 to self.StringGrid1.colCount-1 do

self.StringGrid1.ColWidths[i]:=32;

for i:=1 to self.StringGrid1.colCount-1 do

self.StringGrid1.Cells[i,0]:=inttostr(i);

for i:=1 to self.StringGrid1.ColCount-1 do

for j:=1 to self.StringGrid1.rowCount-1 do

self.StringGrid1.Cells[i,j]:='0';

for i:=1 to 100 do

for j:=1 to 100 do

for k:=0 to 100 do

s[i,j][k]:=0;

相关文档
最新文档