| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1334 人关注过本帖
标题:求助:关于n阶行列式的计算!
只看楼主 加入收藏
rediums
Rank: 2
等 级:新手上路
威 望:3
帖 子:367
专家分:0
注 册:2007-7-29
结帖率:100%
收藏
 问题点数:0 回复次数:7 
求助:关于n阶行列式的计算!
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

假设一个二维数组中存储了以上行列式,应该怎样计算该行列式的值呀?
搜索更多相关主题的帖子: 行列式 
2007-09-29 10:44
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 
怎么计算?加还是乘?
2007-09-29 11:42
smofbao
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2006-4-5
收藏
得分:0 
看来没有学习线性代数呀!
你这个问题用一般的递归算法就可以了。
找个算法分析看看。

2007-09-29 12:00
duffebear
Rank: 1
等 级:新手上路
威 望:2
帖 子:172
专家分:0
注 册:2007-1-30
收藏
得分:0 
见《线性代数》

死后定当长眠 生前何须久睡
2007-09-29 12:14
rediums
Rank: 2
等 级:新手上路
威 望:3
帖 子:367
专家分:0
注 册:2007-7-29
收藏
得分:0 

看来没有说清楚,计算行列式我当然会,我要的是具体到c++上应该怎么算,能否给段代码出来


2007-09-29 17:04
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 

学高代时就有体会:不断的重复那么一件事!
乘完加,加完乘的,化三角呗!

[此贴子已经被作者于2007-9-29 22:37:08编辑过]


2007-09-29 22:36
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(rediums)求助:关于n阶行列式的计算!

see http://en.wikipedia.org/wiki/Determinant

As far as I know, there are at least 3 methods:

0. Leibniz formula --- calculate all n! products and sum them up;
1. Recur on minors;
2. Gaussian elimination.


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-09-30 14:57
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(rediums)求助:关于n阶行列式的计算!

/*---------------------------------------------------------------------------
File name: determinant.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 10/29/2007 20:38:40
Environment: WinXPSP2 En Pro + VS2005 v8.0.50727.762


use the uppper-triangulation process to calculate the
determinant of a matrix.
*/

#include <stdio.h>
#include <math.h>

#define N 3
#define EPS 1e-10

void PrintMatrix(double a[][N])
{
int i, j;

for (i = 0; i < N; ++i)
{
for (j = 0; j < N; ++j)
{
printf("%8.4g ", a[i][j]);
}
printf("\n");
}
printf("\n");
}

/*
* divides a row of a by the divisor. divisor != 0.0.
*/
void DivideRow(double a[][N], int r, double divisor)
{
int j;

for (j = 0; j < N; ++j)
{
a[r][j] /= divisor;
}
}

/*
* row1 := row 1 - row2.
*/
void SubtractRow(double a[][N], int r1, int r2)
{
int j;
for (j = 0; j < N; ++j)
{
a[r1][j] -= a[r2][j];
}
}

/*
* Upper-triangulates a matrix.
* returns the determinant of the matrix.
*/
double LU(double a[][N])
{
int i, j, k;
double factor = 1.0;
double temp;

// skip row 0
for (i = 1; i < N; ++i)
{
for (j = 0; j < i; ++j)
{
if (i != j)
{
temp = a[i][j];
if (fabs(temp) > EPS)
{
DivideRow(a, i, temp);
factor *= temp;
}
}

temp = a[j][j];
if (fabs(temp) > EPS && fabs(temp - 1.0) > EPS)
{
DivideRow(a, j, temp);
factor *= temp;
}

if (fabs(a[i][j]) > EPS)
{
SubtractRow(a, i, j);
}

for (k = 0; k < N; ++k)
{
if (fabs(a[k][k]) <= EPS)
{
return 0.0;
}
}
}
}

a[N-1][N-1] *= factor;

return a[N-1][N-1];
}

double multDia(double a[][N])
{
int i;
double factor = 1.0;

for (i = 0; i < N; ++i)
{
factor *= a[i][i];
}
return factor;
}

int main()
{
double a[N][N] =
{
{8, 0, 1},
{2, 1, 3},
{5, 3, 9}
};
double factor;

PrintMatrix(a);
factor = LU(a);
PrintMatrix(a);

printf("determinant = %g.\n", factor);

return 0;
}


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-10-30 11:45
快速回复:求助:关于n阶行列式的计算!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014871 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved