| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 575 人关注过本帖
标题:怎么求任意阶矩阵的行列式?
收藏  订阅  推荐  打印 
karlzhouzhi
Rank: 2
等级:注册会员
帖子:70
积分:800
注册:2005-12-25
怎么求任意阶矩阵的行列式?

想高手请教,任意输入一个n阶的行矩阵,怎么求它的行列式??
搜索更多相关主题的帖子: 行列式  矩阵  
2006-3-3 12:38
karlzhouzhi
Rank: 2
等级:注册会员
帖子:70
积分:800
注册:2005-12-25

更正,是n阶矩阵,不是行矩阵
2006-3-3 12:39
yanguopen
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2006-3-12

更正,是n阶矩阵,不是行矩阵
2006-3-15 09:18
白色兔子
Rank: 1
等级:新手上路
帖子:31
积分:410
注册:2006-3-8

我也在想这个问题,是不是可以考虑递归呢?
如果是循环的话,n阶的就需要n层循环,效率低,而且没有通用性,好象不行……
我要研究下这个问题

[此贴子已经被作者于2006-3-17 22:25:08编辑过]

2006-3-15 18:45
白色兔子
Rank: 1
等级:新手上路
帖子:31
积分:410
注册:2006-3-8

这个问题搞定了,用的是代数余子式的思路.
有个重载函数,主要就是递归,把高阶递归到二阶的来算.
#include <iostream>
using namespace std;

void main()
{
float **getD(int &size);
float sum(float **s, int size, int n);
float sum(float **s, float *f, int size, int n);

int size;
float **s;

s = getD(size);

cout <<"The sum of D is:"<<sum(s, size, size-1)<<endl;
}

float **getD(int &size)
{
int i,j;
float **s;

cout << "Please input the size of D:";
cin >> size;
s = new float *[size];
for (i = 0; i <= size; i++)
{
s[i] = new float [size];
if (s[i] == NULL)
{
cout <<"Fail";
exit (1);
}
}

--size;
cout <<"Please input the D:";
for (i = 0; i <= size; i++)
for (j = 0; j <= size; j++)
cin >>s[i][j];

return s;
}

float sum(float **s, float *f, int size, int n)
{
int i;
float d=0;

if (n)
{
for (i = 0; i <= size; i++)
if (f[i])
{
f[i] = 0;
if ((i+size-n-1) % 2)
d += s[i][size - n - 1] * sum(s, f, size, n-1) * (-1);
else
d += s[i][size - n - 1] * sum(s, f, size, n-1);
f[i] = 1;
}
}
else
{
for (i = 0; i <= size; i++)
if (f[i])
for (int j = 0; j <= size; j++)
if (f[j]&&(j != i))
return (s[i][size - 1] * s[j][size] - s[i][size] * s[j][size -1]);
}
return d;
}

float sum(float **s, int size, int n)
{
int i;
float *f;

f = new float [size];
if ((s == NULL) || (f ==NULL))
{
cout <<"Fail";
exit (1);
}
for (i = 0; i <= size; i++)
f[i] = 1;

return sum(s, f, size, n);
}

2006-3-17 22:24
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.084371 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved