# 多线程求行列式值

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<sys/time.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip>
using namespace std;
#define Max_Matrix_size 1000
double Matrix[Max_Matrix_size][Max_Matrix_size];
int Matrix_size;
double result = 0.0;
double det_cal(double **mmatrix,int size){
if(size == 1){
return mmatrix[0][0];
}
else{
double res = 0.0;
double **matrix = (double **)malloc(sizeof(double*) * (size));
for(int i = 0;i < size - 1;i++){
matrix[i] = (double *)malloc(sizeof(double) * (size));
}
for(int i = 0;i < size;i++){
for(int j = 1;j < size;j++){
for(int k = 0;k < size;k++){
if(k < i){
matrix[j - 1][k] = mmatrix[j][k];
}
if(k > i){
matrix[j - 1][k - 1] = mmatrix[j][k];
}
}
}
if(i % 2 == 0){
res += mmatrix[0][i] * det_cal(matrix,size - 1);
}
else{
res -= mmatrix[0][i] * det_cal(matrix,size - 1);
}
}
for (int i = 0; i < size - 1; i++) {
free(matrix[i]);
}
free(matrix);
return res;
}
}
int q = *(int*)arg;
double **matrix = (double **)malloc(sizeof(double*) * (Matrix_size));
for(int i = 0;i < Matrix_size;i++){
matrix[i] = (double *)malloc(sizeof(double) * (Matrix_size));
}
for(int i = q * Per_thread_do;i < ((q + 1) * Per_thread_do);i++){
for(int j = 1;j < Matrix_size;j++){
for(int k = 0;k < Matrix_size;k++){
if(k < i){
matrix[j - 1][k] = Matrix[j][k];
}
if(k > i){
matrix[j - 1][k - 1] = Matrix[j][k];
}
}
}
if(i % 2 == 0){
Per_thread_cal[q] += Matrix[0][i] * det_cal(matrix,Matrix_size - 1);
}

else{
Per_thread_cal[q] -= Matrix[0][i] * det_cal(matrix,Matrix_size - 1);
}
}
}
for(int i = q * Per_thread_do;i < Matrix_size;i++){
for(int j = 1;j < Matrix_size;j++){
for(int k = 0;k < Matrix_size;k++){
if(k < i){
matrix[j - 1][k] = Matrix[j][k];
}
if(k > i){
matrix[j - 1][k - 1] = Matrix[j][k];
}
}
}
if(i % 2 == 0){
Per_thread_cal[q] += Matrix[0][i] * det_cal(matrix,Matrix_size - 1);
}

else{
Per_thread_cal[q] -= Matrix[0][i] * det_cal(matrix,Matrix_size - 1);
}
}
}
for(int i = 0;i < Matrix_size - 1;i++){
free(matrix[i]);
}
free(matrix);
}
int main(int argc,char *argv[]){
if(argc != 4){
return 0;
}
Matrix_size = atoi(argv[1]);
char *input = argv[3];
freopen(input,"r",stdin);
for(int i = 0;i < Matrix_size;i++){
for(int j = 0;j < Matrix_size;j++){
cin>>Matrix[i][j];
}
}
//int id[100];
int *id = (int *)malloc(sizeof(int) * (Thread_num));
struct timeval begin,end;
gettimeofday(&begin,NULL);
for(int i = 0;i < Thread_num;i++){
id[i] = i;
}
for(int i = 0;i < Thread_num;i++){
}
free(id);
cout<<fixed<<setprecision(2)<<result<<endl;
gettimeofday(&end,NULL);
int time = (end.tv_sec - begin.tv_sec) * 1000000 + (end.tv_usec - begin.tv_usec);
printf("time: %d us\n", time);
return 0;
}

• 本文已收录于以下专栏：

## 用行列式的定义方法求解n阶行列式的值（C++）

• QianYiYu
• 2017年03月15日 22:27
• 1957

## c语言实现求行列式值

double hanglieshi(double *h,int i,int j) { int k,l; if(i!=j) { printf("Error"); return 0; } ...
• u011146989
• 2014年10月02日 19:25
• 1128

## 用C语言编程递归求行列式的值

/************************************************************************功能: 用递归方法求行列式的值作者: 黄志斌 于 广西...
• benny5609
• 2007年09月17日 10:43
• 2228

## Java之行列式求值

public class MatrixDet { public static double Det(double [][]Matrix,int N)//计算n阶行列式（N=n-1） { in...
• u014581901
• 2016年03月04日 15:47
• 1726

## 计算行列式的值

• lff0305
• 2016年05月08日 10:14
• 634

## C++ 求一个矩阵的行列式的值（星星笔记）

• XX_123_1_RJ
• 2014年09月14日 09:34
• 7400

## VC++ 求矩阵的转置和行列式的值（线性代数）

C++和线代无疑是天作之合，线代里的矩阵内容很多都能用C++求解，冥冥之中这两者的联系还会有更深层次的不为人知的秘密。目前利用C++求线代里的东西无疑是行列式的值、矩阵的转置、伴随矩阵、逆矩阵，这里先...
• Antares_SANTALEN
• 2016年09月13日 09:50
• 797

## java实现N阶行列式求解

import java.text.DecimalFormat; /*** * N阶行列式求解 * @author imlilu * */ public class Test { publ...
• wo17796452
• 2015年06月29日 10:36
• 1512

## N阶行列式计算程序(VB,递归)

• stardreams
• 2007年04月04日 14:09
• 2694

## ACM矩阵行列式计算

ACM行列式计算 计算行列式的基本方法就是把矩阵化成上三角或下三角，然后观察对角线的元素，如果其中有个一元素为0则整体为0，否则行列式的值就是对角线上各个元素的乘积。      先说明一下行列式的...
• zhoufenqin
• 2012年07月27日 15:31
• 5243

举报原因： 您举报文章：多线程求行列式值 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)