- 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)