高手进!!!!!~~~如何用c++计算行列式的值

来源:百度知道 编辑:UC知道 时间:2024/06/17 22:29:48
Determinant.h

#ifndef DETERMINANT_H
#define DETERMINANT_H

#include<iostream>
#include<cstddef>
#include<vector>

class Determinant
{
public:
Determinant();
Determinant(const std::vector<double> &);
Determinant(const Determinant &);
Determinant& operator =(const Determinant &);
//double value(void)const;
//实现计算行列式的值的函数
virtual ~Determinant();
friend std::istream& operator >>(std::istream &,Determinant &);
friend std::ostream& operator <<(std::ostream &,const Determinant &);
private:
size_t GetN()const;
bool isDeterminant()const;

std::vector<double> Pv;
};

#endif

Determinant.cpp

#include<iostream>
#include<stdexcept>
#include<cstddef>
#include<cmath>
#include<vector>
#include"Determinant.h"
us

给你一个示例:
#define N 4
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i,j,m,n,s,t,k=1;
double a[N][N],f=1,c,x,sn;
for (i=0;i<N;i++)
for (j=0;j<N;j++)
scanf ("%lf",&a[i][j]);
for (i=0,j=0;i<N&&j<N;i++,j++)
{
if (a[i][j]==0)
{
for (m=i;a[m][j]==0;m++);
if (m==N)
{
sn=0;
printf("detA=%lf\n",sn);
exit(0);
}
else
for (n=j;n<N;n++)
{
c=a[i][n];
a[i][n]=a[m][n];
a[m][n]=c;
}
k*=(-1);
}
for (s=N-1;s>i;s--)
{
x=a[s][j];
for (t=j;t<N;t++)
a[s][t]-=a[i][t]*(x/a[i][j]);
}
}
for (i=0;i<N;i++)
f*=a[i][i];
sn=k*f;
printf ("detA=%lf\n",sn);
}