用了一个多小时,晚上实在有点不想睡觉,起来写DD
数学建模的老师叫我用MATLAB来写,可是我还用得不好,程序老出错
没办法啊,就先用C++来写,程序没错哈,有哪个朋友有更好的算法,记得告诉我哈。
我在这里谢了……
#include<iostream.h>
#define NUM 15
class juzhen
{
private:
double J[NUM][NUM];
int flag;
int n;
double x,ZH;
public:
juzhen(int);
~juzhen();
void input(void);
void create(void);
void output(void);
void out(void);
};
juzhen::juzhen(int j)
{
n=j;
flag=0;
x=0;
ZH=1;
}
juzhen::~juzhen()
{}
void juzhen::input()
{
cout<<"请输入你所要计算的行列式:"<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
cin>>J[i][j];
}
}
void juzhen::create()
{
for(int a=0;a<n-1;a++)
{
if(J[a][a]==0)
{
for(int i=a+1;i<n;i++)
{
if(J[i][a]!=0)
{
for(int j=a;j<n;j++)
{
double temp=J[a][j];
J[a][j]=J[i][j];
J[i][j]=temp;
}
flag++;
break;
}
}
}
for(int i=a+1;i<n;i++)
{
if(J[i][a]!=0)
{
x=(-1)*J[i][a]/J[a][a];
for(int j=a;j<n;j++)
{
J[i][j]=J[i][j]+x*J[a][j];
}
}
}
}
}
void juzhen::output()
{
cout<<"经转化后的上三角行列式如下:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<J[i][j]<<" ";
}
cout<<endl;
}
}
void juzhen::out()
{
cout<<"原行列式的值为:";
for(int k=0;k<n;k++)
{
ZH=ZH*J[k][k];
}
if(flag%2==0)
cout<<ZH;
if(flag%2!=0)
cout<<(-1)*ZH;cout<<endl;
}
void main()
{
int s;
cout<<"请输入你要计算的行列式的阶数:";
cin>>s;
juzhen W(s);
W.input();
W.create();
W.output();
W.out();
}