Algorithm 版 (精华区)
发信人: Lerry (想不开·撞树), 信区: Algorithm
标 题: [合集]谁能推荐一种算矩阵秩的算法?
发信站: 哈工大紫丁香 (2002年09月15日21:52:37 星期天), 站内信件
────────────────────────────────────────
Systems (Systems) 于 2002年09月10日20:03:18 星期二 说道:
谢谢
────────────────────────────────────────
fobcaesar (温泉企鹅)〓(缥缈的金星) 于 2002年09月10日21:56:56 星期二 说道:
matlab里面有
────────────────────────────────────────
Systems (Systems) 于 2002年09月11日09:09:28 星期三 说道:
我手边没有MATLAB,而且我要自己编程算
────────────────────────────────────────
xiong (矿泉水有益健康) 于 2002年09月11日10:58:38 星期三 说道:
高斯消去不行么
────────────────────────────────────────
Systems (Systems) 于 2002年09月11日15:19:01 星期三 说道:
试试看吧,好象效率不高
────────────────────────────────────────
Systems (Systems) 于 2002年09月11日15:22:07 星期三 说道:
如果主对角线上某个元素是0怎么办呢?
────────────────────────────────────────
xiong (矿泉水有益健康) 于 2002年09月11日16:17:59 星期三 说道:
如果a[i][i]=0,进行行初等变换,寻找a[k][i]!=0(i<k<=n),交换i和k行,再依次消去i
行i列的下方元素成上三角阵
────────────────────────────────────────
Systems (Systems) 于 2002年09月12日09:26:33 星期四 说道:
done!!!真麻烦呀,把源代码列出来:)
//Rank of a matrix.
long rank(const Matrix &rhs)
{
long m = rhs.get_m();
long n = rhs.get_n();
if(m == 1 && n == 1 && rhs.get_e()[0] != 0)
{
return 1;
}
if(m == 1 && n == 1 && rhs.get_e()[0] == 0)
{
return 0;
}
Matrix c;
if(m <= n)
{
c = rhs;
}
else
{
c = rhs.transp();
m = rhs.get_n();
n = rhs.get_m();
}
long rank = m;
double theta = 1e-6;
int flag = 0;
for(long r = 0; r < m; r++)
{
double rr = c.get_e()[r * n + r];
if(fabs(rr) <= theta && r < (m - 1))
{
flag = 1;
for(long l = r; l < m && flag == 1; l++)
{
for(long k = r; k < n && flag == 1; k++)
{
if(c.get_e()[l * n + k] > theta && l != k)
{
rr = c.get_e()[l * n + k];
flag = 0;
c.rchange((r + 1), (l + 1));
c.cchange((r + 1), (k + 1));
}
}
}
}
if(flag == 1)
{
return r;
}
if(fabs(rr) <= theta && r == (m - 1))
{
return r;
}
for(long q = 0; q < n; q++)
{
c.get_e()[r * n + q] = c.get_e()[r * n + q]/rr;
}
for(long u = r; u < (m - 1); u++)
{
double pp = c.get_e()[(u + 1) * n + r];
for(long w = 0; w < n; w++)
{
c.get_e()[(u + 1) * n + w] = c.get_e()[(u + 1) * n + w] -
c.get_e()[r * n
+ w] * pp;
}
}
}
return rank;
}
//其中有一些是我编的矩阵类中的方法
【 在 xiong (矿泉水有益健康) 的大作中提到: 】
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.404毫秒