-
Notifications
You must be signed in to change notification settings - Fork 0
/
2.cpp
166 lines (80 loc) · 1.94 KB
/
2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include<iostream>
#include<cmath>
#include<cstdio>
#define MAX 10
using namespace std;
double A[MAX][MAX]; //系数矩阵
int NUM; //A的阶数
int SIZE; //最大迭代次数
int t; //标记最大的数所在的行
double Max; //比较每列时暂时存放最大的数
double tmp; //用于交换时存放中间变量的
double tmp1; //存储中间变量以减少计算量
int sign = 0; //标记行交换的次数
/*
int main(void)
{
int i, j, k; //计数器
//以下代码输入系数矩阵A,右端项b
cout << "请输入行列式A的阶数:";
cin >> NUM;
SIZE = NUM;
cout << "请输入A矩阵:\n";
for (i = 1; i <= SIZE; i++)
{
for (j = 1; j <= SIZE; j++)
cin >> A[i - 1][j - 1];
}
//在屏幕中输出用户输入的行列式A
cout << "\n您输入的维度是:" << NUM << endl << "您输入的矩阵A[][]:\n"; //在屏幕中输出用户输入的矩阵A
for (i = 0; i < SIZE; i++)
{
for (j = 0; j < SIZE; j++)
cout << A[i][j] << "\t";
cout << "\n\n";
}
for (i = 0; i < SIZE - 1; i++)
{
t = i;
Max = A[i][i];
for (j = i + 1; j < SIZE; j++) //判断每列的最大数,并将其放到主对角线上
{
if (fabs(Max) < fabs(A[j][i]))
//当某一行大于k时将其赋值给k,并将其所在行标记下来
{
Max = A[j][i];
t = j;
}
}
if (fabs(Max) < 0.000001) //判断矩阵是否为奇异阵
{
printf("行列式的值是: 0 ");
break;
}
if (t != i) //当t不等于i时交换这两行的所有元素
{
sign++;
for (j = i; j <= SIZE; j++)
{
tmp = A[i][j];
A[i][j] = A[t][j];
A[t][j] = tmp;
}
}
for (j = i + 1; j < SIZE; j++) //消去过程,化为上三角的形式
{
tmp1 = A[j][i] / A[i][i]; //tmp1避免了p每次变化时都要计算这个
for (k = i; k < SIZE + 1; k++) //p=i注意了啊!!
A[j][k] = A[j][k] - A[i][k] * tmp1;
}
}
tmp1 = 1;
for (i = 0; i < SIZE; i++) //求化简后行列式的值
tmp1 *= A[i][i];
if (sign % 2 == 0)
cout << "行列式的值是:" << tmp1 << "\n";
else
cout << "行列式的值是:" << -tmp1 << "\n";
return 0;
}
*/