c语言程序设计.docVIP

  • 2
  • 0
  • 约2.82千字
  • 约 9页
  • 2024-03-05 发布于湖北
  • 举报

reporter:@AnDongshengAllRightsReserved.

创建时间:CREATEDATE\@yyyy年M月d日h时m分s秒2015年4月13日17时59分0秒

第二章程序设计报告

班级:12自动化2

编制人:ads

2015.4

程序要求:

编写程序实现基于塞尔维斯特准则的二次型标量函数的正定性判断。

二、任务需求分析:

二次型标量函数对应的矩阵,一般为实对称矩阵,可以根据赛尔维思特准则进行判断其正定性。因此首先需要判断其对应的矩阵是否为实对称矩阵,而实对称矩阵的定义是在该矩阵中对于任意元素a[i][j]=a[j][i]总成立。其次,根据赛尔维思特准则,先算出其各主子行列式即,△1,△2,△3,.....△n。

(1)若该实对称矩阵的各主子行列式均为正△10,△20,△30,.....△n;则该矩阵对应的二次标量函数为正定。

(2)若对于该实对称矩阵的任一主子行列式△i,当i为偶数时△i0且当i为奇数时△i0,则该矩阵对应的二次标量函数为负定。

三、程序设计流程图:

开始

开始

判断该矩阵是否为实对称矩阵

调用函数分别求出各主子行列式

是否满足第偶个主子行列式为正,第奇个为负

各主子行列式是否均为正

输入系数方阵介数

输入系数方阵A

该实对称矩阵对应的二次型函数为正定

该实对称矩阵对应的二次型函数为负定

该实对称矩阵对应的二次型函数既不为正定,也不为负定

输出结果

结束

四、程序设计实现:

输入:系数矩阵的介数n、和矩阵A;

输出:判断是否为实对称矩阵的结果;若为实对称矩阵,并將输出其各主子行列式的值,以及判断其对应的二次型标量函数是否为正定的结果。

五、程序验证与测试:

当输入矩阵不是是对称矩阵时

2.当输入的矩阵为实对称矩阵时:

六、程序源代码:

#includestdio.h

#includestdlib.h

#defineN10/*定义最大为10阶行列式*/

intFun(intm,inta[N][N]);/*函数声明*/

intjudge(intn,inta[N][N]);//判断是否为实对称的函数

intmain()

{

intn=0,m=0;/*初始化阶数n*/

inti=0,j=0;

intd,h=0,l=0;

inta[N][N]={{0}};/*定义行列式*/

printf(请输入矩阵介数:\n);

scanf(%d,n);/*读入阶数*/

printf(输入矩阵的各元素为:\n);

while(1)

{

for(i=0;in;i++)

{

for(j=0;jn;j++)

scanf(%d,a[i][j]);

}

if(judge(n,a))

{

printf(矩阵的各主子行列式为:);

while(1)

{

for(m=1;m=n;m++)

{

printf(\n△%d=%d\n,m,Fun(m,a));

if(Fun(m,a)0)h++;elseh--;

if(m%2==0){if(Fun(m,a)0)l++;elsel--;}

else{if(Fun(m,a)0)l++;elsel--;}

}

if(h==n)

printf(此矩阵对应的二次型标量函数为正定\n);

elseif(l==n)

printf(此矩阵对应的二次型标量函数为负定\n);

elseprintf(此矩阵对应的二次型标量函数既不是正定也不是负定\n);

return0;

}

}

elseprintf(此矩阵不是实对称矩阵\n请重新输入:\n);

}

return0;

}

intFun(intm,inta[N][N])

{

intb[N][N]={{0}};/*定义数组b并初始化*/

inti=0,j=0,sum=0;intx=0,c=0,p=0;

文档评论(0)

1亿VIP精品文档

相关文档