线性代数矩阵化简器
Fraction 类:
input.jsp:
calculate.jsp:
1
package joey;
2
3
public class Fraction
4
{
5
private int numerator;
6
private int denominator;
7
8
public Fraction(int numerator, int denominator) throws Exception
9
{
10
if (denominator == 0)
11
{
12
throw new Exception("New fraction's denominator can not be 0");
13
}
14
this.numerator = numerator;
15
this.denominator = denominator;
16
}
17
18
public static Fraction toFraction(double numerator) throws Exception
19
{
20
return toFraction(numerator, 1);
21
}
22
23
public static Fraction toFraction(double numerator, int denominator)
24
throws Exception
25
{
26
if (numerator != (int) numerator)
27
{
28
return toFraction(numerator * 10, denominator * 10);
29
}
30
else
31
{
32
Fraction fraction = new Fraction((int) numerator, denominator);
33
return fraction;
34
}
35
}
36
37
public static Fraction getReciprocal(Fraction fraction) throws Exception
38
{
39
if (fraction.getDenominator() == 0)
40
{
41
throw new Exception("This fraction's denominator can not be 0");
42
}
43
if (fraction.getNumerator() == 0)
44
{
45
throw new Exception("This fraction's numerator can not be 0");
46
}
47
Fraction one = new Fraction(1, 1);
48
return Fraction.divide(one, fraction);
49
}
50
51
public static Fraction multiply(Fraction first, Fraction second)
52
throws Exception
53
{
54
if (first.getDenominator() == 0)
55
{
56
throw new Exception("First fraction's denominator can not be 0");
57
}
58
if (second.getDenominator() == 0)
59
{
60
throw new Exception("Second fraction's denominator can not be 0");
61
}
62
Fraction fraction = new Fraction(first.getNumerator()
63
* second.getNumerator(), first.getDenominator()
64
* second.getDenominator());
65
fraction = Fraction.reduce(fraction);
66
return fraction;
67
}
68
69
public static Fraction divide(Fraction first, Fraction second)
70
throws Exception
71
{
72
if (first.getDenominator() == 0)
73
{
74
throw new Exception("First fraction's denominator can not be 0");
75
}
76
if (second.getDenominator() == 0)
77
{
78
throw new Exception("Second fraction's denominator can not be 0");
79
}
80
if (second.getNumerator() == 0)
81
{
82
throw new Exception("Second fraction's numerator can not be 0");
83
}
84
Fraction fraction = new Fraction(first.getNumerator()
85
* second.getDenominator(), first.getDenominator()
86
* second.getNumerator());
87
fraction = Fraction.reduce(fraction);
88
return fraction;
89
}
90
91
public static Fraction add(Fraction first, Fraction second)
92
throws Exception
93
{
94
if (first.getDenominator() == 0)
95
{
96
throw new Exception("First fraction's denominator can not be 0");
97
}
98
if (second.getDenominator() == 0)
99
{
100
throw new Exception("Second fraction's denominator can not be 0");
101
}
102
Fraction fraction = new Fraction(first.getNumerator()
103
* second.getDenominator() + first.getDenominator()
104
* second.getNumerator(), first.getDenominator()
105
* second.getDenominator());
106
fraction = Fraction.reduce(fraction);
107
return fraction;
108
}
109
110
public static Fraction subtract(Fraction first, Fraction second)
111
throws Exception
112
{
113
if (first.getDenominator() == 0)
114
{
115
throw new Exception("First fraction's denominator can not be 0");
116
}
117
if (second.getDenominator() == 0)
118
{
119
throw new Exception("Second fraction's denominator can not be 0");
120
}
121
Fraction fraction = new Fraction(first.getNumerator()
122
* second.getDenominator() - first.getDenominator()
123
* second.getNumerator(), first.getDenominator()
124
* second.getDenominator());
125
fraction = Fraction.reduce(fraction);
126
return fraction;
127
}
128
129
private static int getAbsoluteValue(int input)
130
{
131
if (input >= 0)
132
{
133
return input;
134
}
135
else
136
{
137
return -input;
138
}
139
}
140
141
private static Fraction reduce(Fraction fraction) throws Exception
142
{
143
if (fraction.getDenominator() == 0)
144
{
145
throw new Exception("This fraction's denominator can not be 0");
146
}
147
if (fraction.getDenominator() < 0)
148
{
149
fraction.setNumerator(-fraction.getNumerator());
150
fraction.setDenominator(-fraction.getDenominator());
151
return reduce(fraction);
152
}
153
if (getAbsoluteValue(fraction.getNumerator()) > getAbsoluteValue(fraction
154
.getDenominator()))
155
{
156
for (int i = 2; i <= getAbsoluteValue(fraction.getDenominator()); i++)
157
{
158
if (fraction.getNumerator() % i == 0
159
&& fraction.getDenominator() % i == 0)
160
{
161
fraction.setDenominator(fraction.getDenominator() / i);
162
fraction.setNumerator(fraction.getNumerator() / i);
163
return reduce(fraction);
164
}
165
}
166
return fraction;
167
}
168
else
169
{
170
for (int i = 2; i <= getAbsoluteValue(fraction.getNumerator()); i++)
171
{
172
if (fraction.getNumerator() % i == 0
173
&& fraction.getDenominator() % i == 0)
174
{
175
fraction.setDenominator(fraction.getDenominator() / i);
176
fraction.setNumerator(fraction.getNumerator() / i);
177
return reduce(fraction);
178
}
179
}
180
return fraction;
181
}
182
}
183
184
public int getDenominator()
185
{
186
return denominator;
187
}
188
189
public void setDenominator(int denominator)
190
{
191
this.denominator = denominator;
192
}
193
194
public int getNumerator()
195
{
196
return numerator;
197
}
198
199
public void setNumerator(int numerator)
200
{
201
this.numerator = numerator;
202
}
203
204
public String toString()
205
{
206
if (this.getNumerator() == 0)
207
{
208
return "0";
209
}
210
if (this.getDenominator() == 1)
211
{
212
return String.valueOf(this.getNumerator());
213
}
214
else if (this.getDenominator() == -1)
215
{
216
return String.valueOf(-this.getNumerator());
217
}
218
else
219
{
220
return this.getNumerator() + "/" + this.getDenominator();
221
}
222
}
223
}
224
Gauss_JordanElimination 类:
package joey;2

3
public class Fraction4
{5
private int numerator;6
private int denominator;7
8
public Fraction(int numerator, int denominator) throws Exception9
{10
if (denominator == 0)11
{12
throw new Exception("New fraction's denominator can not be 0");13
}14
this.numerator = numerator;15
this.denominator = denominator;16
}17
18
public static Fraction toFraction(double numerator) throws Exception19
{20
return toFraction(numerator, 1);21
}22
23
public static Fraction toFraction(double numerator, int denominator)24
throws Exception25
{26
if (numerator != (int) numerator)27
{28
return toFraction(numerator * 10, denominator * 10);29
}30
else31
{32
Fraction fraction = new Fraction((int) numerator, denominator);33
return fraction;34
}35
}36
37
public static Fraction getReciprocal(Fraction fraction) throws Exception38
{39
if (fraction.getDenominator() == 0)40
{41
throw new Exception("This fraction's denominator can not be 0");42
}43
if (fraction.getNumerator() == 0)44
{45
throw new Exception("This fraction's numerator can not be 0");46
}47
Fraction one = new Fraction(1, 1);48
return Fraction.divide(one, fraction);49
}50
51
public static Fraction multiply(Fraction first, Fraction second)52
throws Exception53
{54
if (first.getDenominator() == 0)55
{56
throw new Exception("First fraction's denominator can not be 0");57
}58
if (second.getDenominator() == 0)59
{60
throw new Exception("Second fraction's denominator can not be 0");61
}62
Fraction fraction = new Fraction(first.getNumerator()63
* second.getNumerator(), first.getDenominator()64
* second.getDenominator());65
fraction = Fraction.reduce(fraction);66
return fraction;67
}68
69
public static Fraction divide(Fraction first, Fraction second)70
throws Exception71
{72
if (first.getDenominator() == 0)73
{74
throw new Exception("First fraction's denominator can not be 0");75
}76
if (second.getDenominator() == 0)77
{78
throw new Exception("Second fraction's denominator can not be 0");79
}80
if (second.getNumerator() == 0)81
{82
throw new Exception("Second fraction's numerator can not be 0");83
}84
Fraction fraction = new Fraction(first.getNumerator()85
* second.getDenominator(), first.getDenominator()86
* second.getNumerator());87
fraction = Fraction.reduce(fraction);88
return fraction;89
}90
91
public static Fraction add(Fraction first, Fraction second)92
throws Exception93
{94
if (first.getDenominator() == 0)95
{96
throw new Exception("First fraction's denominator can not be 0");97
}98
if (second.getDenominator() == 0)99
{100
throw new Exception("Second fraction's denominator can not be 0");101
}102
Fraction fraction = new Fraction(first.getNumerator()103
* second.getDenominator() + first.getDenominator()104
* second.getNumerator(), first.getDenominator()105
* second.getDenominator());106
fraction = Fraction.reduce(fraction);107
return fraction;108
}109
110
public static Fraction subtract(Fraction first, Fraction second)111
throws Exception112
{113
if (first.getDenominator() == 0)114
{115
throw new Exception("First fraction's denominator can not be 0");116
}117
if (second.getDenominator() == 0)118
{119
throw new Exception("Second fraction's denominator can not be 0");120
}121
Fraction fraction = new Fraction(first.getNumerator()122
* second.getDenominator() - first.getDenominator()123
* second.getNumerator(), first.getDenominator()124
* second.getDenominator());125
fraction = Fraction.reduce(fraction);126
return fraction;127
}128
129
private static int getAbsoluteValue(int input)130
{131
if (input >= 0)132
{133
return input;134
}135
else136
{137
return -input;138
}139
}140
141
private static Fraction reduce(Fraction fraction) throws Exception142
{143
if (fraction.getDenominator() == 0)144
{145
throw new Exception("This fraction's denominator can not be 0");146
}147
if (fraction.getDenominator() < 0)148
{149
fraction.setNumerator(-fraction.getNumerator());150
fraction.setDenominator(-fraction.getDenominator());151
return reduce(fraction);152
}153
if (getAbsoluteValue(fraction.getNumerator()) > getAbsoluteValue(fraction154
.getDenominator()))155
{156
for (int i = 2; i <= getAbsoluteValue(fraction.getDenominator()); i++)157
{158
if (fraction.getNumerator() % i == 0159
&& fraction.getDenominator() % i == 0)160
{161
fraction.setDenominator(fraction.getDenominator() / i);162
fraction.setNumerator(fraction.getNumerator() / i);163
return reduce(fraction);164
}165
}166
return fraction;167
}168
else169
{170
for (int i = 2; i <= getAbsoluteValue(fraction.getNumerator()); i++)171
{172
if (fraction.getNumerator() % i == 0173
&& fraction.getDenominator() % i == 0)174
{175
fraction.setDenominator(fraction.getDenominator() / i);176
fraction.setNumerator(fraction.getNumerator() / i);177
return reduce(fraction);178
}179
}180
return fraction;181
}182
}183
184
public int getDenominator()185
{186
return denominator;187
}188
189
public void setDenominator(int denominator)190
{191
this.denominator = denominator;192
}193
194
public int getNumerator()195
{196
return numerator;197
}198
199
public void setNumerator(int numerator)200
{201
this.numerator = numerator;202
}203
204
public String toString()205
{206
if (this.getNumerator() == 0)207
{208
return "0";209
}210
if (this.getDenominator() == 1)211
{212
return String.valueOf(this.getNumerator());213
}214
else if (this.getDenominator() == -1)215
{216
return String.valueOf(-this.getNumerator());217
}218
else219
{220
return this.getNumerator() + "/" + this.getDenominator();221
}222
}223
}224

1
package joey;
2
3
import java.util.*;
4
5
public class Gauss_JordanElimination
6
{
7
private ArrayList<ArrayList<Fraction>> table;
8
private int columns;
9
10
public Gauss_JordanElimination(ArrayList<ArrayList<Fraction>> table)
11
throws Exception
12
{
13
this.table = table;
14
this.columns = this.table.get(0).size();
15
}
16
17
public void reduceTheMatrix(int dealingColumn, int dealingRow)
18
throws Exception
19
{
20
if (dealingColumn <= 0 || dealingRow <= 0)
21
{
22
return;
23
}
24
if (this.table.get(dealingRow).get(dealingColumn).getNumerator() == 0)
25
{
26
reduceTheMatrix(dealingColumn - 1, dealingRow);
27
}
28
else if(this.table.get(dealingRow).get(dealingColumn).getNumerator() == 1&&this.table.get(dealingRow).get(dealingColumn).getDenominator()==1)
29
{
30
getLeadingZeros(dealingRow, dealingColumn);
31
reduceTheMatrix(dealingColumn - 1, dealingRow - 1);
32
}
33
else
34
{
35
reduceTheMatrix(dealingColumn - 1, dealingRow);
36
}
37
}
38
39
private void getLeadingZeros(int dealingRow, int dealingColumn)
40
throws Exception
41
{
42
ArrayList<Fraction> al;
43
for (int row = dealingRow - 1; row >= 0; row--)
44
{
45
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)
46
{
47
al = new ArrayList<Fraction>();
48
for (int i = 0; i < this.table.get(dealingRow).size(); i++)
49
{
50
Fraction fraction = new Fraction(1, 1);
51
fraction.setDenominator(this.table.get(dealingRow).get(i)
52
.getDenominator());
53
fraction.setNumerator(this.table.get(dealingRow).get(i)
54
.getNumerator());
55
al.add(fraction);
56
}
57
multiplyTempRowByOneFraction(al, this.table.get(row).get(
58
dealingColumn));
59
subtractOneRowByTempRow(row, al);
60
}
61
}
62
}
63
64
private void subtractOneRowByTempRow(int row, ArrayList<Fraction> al)
65
throws Exception
66
{
67
for (int column = 0; column < columns; column++)
68
{
69
this.table.get(row).set(
70
column,
71
Fraction.subtract(this.table.get(row).get(column), al
72
.get(column)));
73
}
74
}
75
76
private void multiplyTempRowByOneFraction(ArrayList<Fraction> al,
77
Fraction fraction) throws Exception
78
{
79
for (int column = 0; column < al.size(); column++)
80
{
81
al.set(column, Fraction.multiply(al.get(column), fraction));
82
}
83
}
84
}
85
package joey;2

3
import java.util.*;4

5
public class Gauss_JordanElimination6
{7
private ArrayList<ArrayList<Fraction>> table;8
private int columns;9
10
public Gauss_JordanElimination(ArrayList<ArrayList<Fraction>> table)11
throws Exception12
{13
this.table = table;14
this.columns = this.table.get(0).size();15
}16
17
public void reduceTheMatrix(int dealingColumn, int dealingRow)18
throws Exception19
{20
if (dealingColumn <= 0 || dealingRow <= 0)21
{22
return;23
}24
if (this.table.get(dealingRow).get(dealingColumn).getNumerator() == 0)25
{26
reduceTheMatrix(dealingColumn - 1, dealingRow);27
}28
else if(this.table.get(dealingRow).get(dealingColumn).getNumerator() == 1&&this.table.get(dealingRow).get(dealingColumn).getDenominator()==1)29
{30
getLeadingZeros(dealingRow, dealingColumn);31
reduceTheMatrix(dealingColumn - 1, dealingRow - 1);32
}33
else34
{35
reduceTheMatrix(dealingColumn - 1, dealingRow);36
}37
}38
39
private void getLeadingZeros(int dealingRow, int dealingColumn)40
throws Exception41
{42
ArrayList<Fraction> al;43
for (int row = dealingRow - 1; row >= 0; row--)44
{45
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)46
{47
al = new ArrayList<Fraction>();48
for (int i = 0; i < this.table.get(dealingRow).size(); i++)49
{50
Fraction fraction = new Fraction(1, 1);51
fraction.setDenominator(this.table.get(dealingRow).get(i)52
.getDenominator());53
fraction.setNumerator(this.table.get(dealingRow).get(i)54
.getNumerator());55
al.add(fraction);56
}57
multiplyTempRowByOneFraction(al, this.table.get(row).get(58
dealingColumn));59
subtractOneRowByTempRow(row, al);60
}61
}62
}63
64
private void subtractOneRowByTempRow(int row, ArrayList<Fraction> al)65
throws Exception66
{67
for (int column = 0; column < columns; column++)68
{69
this.table.get(row).set(70
column,71
Fraction.subtract(this.table.get(row).get(column), al72
.get(column)));73
}74
}75
76
private void multiplyTempRowByOneFraction(ArrayList<Fraction> al,77
Fraction fraction) throws Exception78
{79
for (int column = 0; column < al.size(); column++)80
{81
al.set(column, Fraction.multiply(al.get(column), fraction));82
}83
}84
}85

GaussianElimination 类:
1
package joey;
2
3
import java.util.*;
4
5
public class GaussianElimination
6
{
7
private ArrayList<ArrayList<Fraction>> table;
8
private int columns;
9
private int rows;
10
private int dealingColumn;
11
private int dealingRow;
12
13
public GaussianElimination(ArrayList<ArrayList<Fraction>> table)
14
throws Exception
15
{
16
this.table = table;
17
this.columns = this.table.get(0).size();
18
this.rows = this.table.size();
19
}
20
21
public int getDealingColumn()
22
{
23
return dealingColumn;
24
}
25
26
public int getDealingRow()
27
{
28
return dealingRow;
29
}
30
31
public void reduceTheMatrix() throws Exception
32
{
33
reduceTheMatrix(0, 0);
34
}
35
36
private void reduceTheMatrix(int dealingColumn, int dealingRow)
37
throws Exception
38
{
39
if (dealingColumn >= columns || dealingRow >= rows)
40
{
41
this.dealingColumn = dealingColumn - 1;
42
this.dealingRow = dealingRow - 1;
43
return;
44
}
45
int row;
46
for (row = dealingRow; row < rows; row++)
47
{
48
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)
49
{
50
getLeadingOne(dealingRow, dealingColumn, row);
51
break;
52
}
53
}
54
if (row == rows)
55
{
56
reduceTheMatrix(dealingColumn + 1, dealingRow);
57
}
58
else
59
{
60
getLeadingZeros(dealingRow, dealingColumn);
61
reduceTheMatrix(dealingColumn + 1, dealingRow + 1);
62
}
63
}
64
65
private void getLeadingOne(int dealingRow, int dealingColumn,
66
int noLeadingZeroRow) throws Exception
67
{
68
if (dealingRow != noLeadingZeroRow)
69
{
70
swapTwoRows(dealingRow, noLeadingZeroRow);
71
}
72
multiplyOneRowByOneFraction(dealingRow, Fraction
73
.getReciprocal(this.table.get(dealingRow).get(dealingColumn)));
74
}
75
76
private void getLeadingZeros(int dealingRow, int dealingColumn)
77
throws Exception
78
{
79
for (int row = dealingRow + 1; row < rows; row++)
80
{
81
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)
82
{
83
multiplyOneRowByOneFraction(row, Fraction
84
.getReciprocal(this.table.get(row).get(dealingColumn)));
85
subtractOneRowByAnotherRow(row, dealingRow);
86
}
87
}
88
}
89
90
private void subtractOneRowByAnotherRow(int rowOne, int rowTwo)
91
throws Exception
92
{
93
for (int column = 0; column < columns; column++)
94
{
95
this.table.get(rowOne).set(
96
column,
97
Fraction.subtract(this.table.get(rowOne).get(column),
98
this.table.get(rowTwo).get(column)));
99
}
100
}
101
102
private void multiplyOneRowByOneFraction(int row, Fraction fraction)
103
throws Exception
104
{
105
for (int column = 0; column < columns; column++)
106
{
107
this.table.get(row)
108
.set(
109
column,
110
Fraction.multiply(this.table.get(row).get(column),
111
fraction));
112
}
113
}
114
115
private void swapTwoRows(int rowOne, int rowTwo) throws Exception
116
{
117
Fraction temp;
118
for (int column = 0; column < columns; column++)
119
{
120
temp = this.table.get(rowOne).get(column);
121
this.table.get(rowOne).set(column,
122
this.table.get(rowTwo).get(column));
123
this.table.get(rowTwo).set(column, temp);
124
}
125
}
126
}
127
package joey;2

3
import java.util.*;4

5
public class GaussianElimination6
{7
private ArrayList<ArrayList<Fraction>> table;8
private int columns;9
private int rows;10
private int dealingColumn;11
private int dealingRow;12
13
public GaussianElimination(ArrayList<ArrayList<Fraction>> table)14
throws Exception15
{16
this.table = table;17
this.columns = this.table.get(0).size();18
this.rows = this.table.size();19
}20
21
public int getDealingColumn()22
{23
return dealingColumn;24
}25
26
public int getDealingRow()27
{28
return dealingRow;29
}30
31
public void reduceTheMatrix() throws Exception32
{33
reduceTheMatrix(0, 0);34
}35
36
private void reduceTheMatrix(int dealingColumn, int dealingRow)37
throws Exception38
{39
if (dealingColumn >= columns || dealingRow >= rows)40
{41
this.dealingColumn = dealingColumn - 1;42
this.dealingRow = dealingRow - 1;43
return;44
}45
int row;46
for (row = dealingRow; row < rows; row++)47
{48
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)49
{50
getLeadingOne(dealingRow, dealingColumn, row);51
break;52
}53
}54
if (row == rows)55
{56
reduceTheMatrix(dealingColumn + 1, dealingRow);57
}58
else59
{60
getLeadingZeros(dealingRow, dealingColumn);61
reduceTheMatrix(dealingColumn + 1, dealingRow + 1);62
}63
}64
65
private void getLeadingOne(int dealingRow, int dealingColumn,66
int noLeadingZeroRow) throws Exception67
{68
if (dealingRow != noLeadingZeroRow)69
{70
swapTwoRows(dealingRow, noLeadingZeroRow);71
}72
multiplyOneRowByOneFraction(dealingRow, Fraction73
.getReciprocal(this.table.get(dealingRow).get(dealingColumn)));74
}75
76
private void getLeadingZeros(int dealingRow, int dealingColumn)77
throws Exception78
{79
for (int row = dealingRow + 1; row < rows; row++)80
{81
if (this.table.get(row).get(dealingColumn).getNumerator() != 0)82
{83
multiplyOneRowByOneFraction(row, Fraction84
.getReciprocal(this.table.get(row).get(dealingColumn)));85
subtractOneRowByAnotherRow(row, dealingRow);86
}87
}88
}89
90
private void subtractOneRowByAnotherRow(int rowOne, int rowTwo)91
throws Exception92
{93
for (int column = 0; column < columns; column++)94
{95
this.table.get(rowOne).set(96
column,97
Fraction.subtract(this.table.get(rowOne).get(column),98
this.table.get(rowTwo).get(column)));99
}100
}101
102
private void multiplyOneRowByOneFraction(int row, Fraction fraction)103
throws Exception104
{105
for (int column = 0; column < columns; column++)106
{107
this.table.get(row)108
.set(109
column,110
Fraction.multiply(this.table.get(row).get(column),111
fraction));112
}113
}114
115
private void swapTwoRows(int rowOne, int rowTwo) throws Exception116
{117
Fraction temp;118
for (int column = 0; column < columns; column++)119
{120
temp = this.table.get(rowOne).get(column);121
this.table.get(rowOne).set(column,122
this.table.get(rowTwo).get(column));123
this.table.get(rowTwo).set(column, temp);124
}125
}126
}127

Matrix 类:
1
package joey;
2
3
import java.util.*;
4
5
public class Matrix
6
{
7
private ArrayList<ArrayList<Fraction>> table;
8
private int columns;
9
private int rows;
10
11
public Matrix(ArrayList<ArrayList<Fraction>> table) throws Exception
12
{
13
this.table = table;
14
this.columns = this.table.get(0).size();
15
this.rows = this.table.size();
16
}
17
18
public void printOut()
19
{
20
for (int row = 0; row < rows; row++)
21
{
22
StringBuilder sb = new StringBuilder();
23
for (int column = 0; column < columns; column++)
24
{
25
sb.append(leftAdjusting(this.table.get(row).get(column)
26
.toString(), 8));
27
}
28
System.out.println(sb.toString());
29
}
30
}
31
32
private String leftAdjusting(String input, int length)
33
{
34
try
35
{
36
return input.substring(0, length);
37
}
38
catch (Exception e)
39
{
40
StringBuilder sb = new StringBuilder();
41
for (int i = 0; i < length - input.length(); i++)
42
{
43
sb.append(" ");
44
}
45
return input + sb.toString();
46
}
47
}
48
49
public void reduceTheMatrix() throws Exception
50
{
51
GaussianElimination gaussian = new GaussianElimination(this.table);
52
gaussian.reduceTheMatrix();
53
Gauss_JordanElimination gauss_Jordan = new Gauss_JordanElimination(
54
this.table);
55
gauss_Jordan.reduceTheMatrix(gaussian.getDealingColumn(), gaussian
56
.getDealingRow());
57
}
58
}
59
package joey;2

3
import java.util.*;4

5
public class Matrix6
{7
private ArrayList<ArrayList<Fraction>> table;8
private int columns;9
private int rows;10
11
public Matrix(ArrayList<ArrayList<Fraction>> table) throws Exception12
{13
this.table = table;14
this.columns = this.table.get(0).size();15
this.rows = this.table.size();16
}17
18
public void printOut()19
{20
for (int row = 0; row < rows; row++)21
{22
StringBuilder sb = new StringBuilder();23
for (int column = 0; column < columns; column++)24
{25
sb.append(leftAdjusting(this.table.get(row).get(column)26
.toString(), 8));27
}28
System.out.println(sb.toString());29
}30
}31
32
private String leftAdjusting(String input, int length)33
{34
try35
{36
return input.substring(0, length);37
}38
catch (Exception e)39
{40
StringBuilder sb = new StringBuilder();41
for (int i = 0; i < length - input.length(); i++)42
{43
sb.append(" ");44
}45
return input + sb.toString();46
}47
}48
49
public void reduceTheMatrix() throws Exception50
{51
GaussianElimination gaussian = new GaussianElimination(this.table);52
gaussian.reduceTheMatrix();53
Gauss_JordanElimination gauss_Jordan = new Gauss_JordanElimination(54
this.table);55
gauss_Jordan.reduceTheMatrix(gaussian.getDealingColumn(), gaussian56
.getDealingRow());57
}58
}59

input.jsp:
1
<%@ page language="java" contentType="text/html; charset=utf8"%>
2
<%@ page import="java.util.*"%>
3
<%@ page import="Joey.*"%>
4
<%
5
String content="";
6
int row=0;
7
int column=0;
8
if(request.getQueryString()!=null)
9
{
10
String[] array=request.getQueryString().split(";");
11
row = Integer.parseInt(array[0].split("=")[1]);
12
column = Integer.parseInt(array[1].split("=")[1]);
13
StringBuilder sb = new StringBuilder();
14
for(int i =0; i<row;i++)
15
{
16
sb.append("<tr>");
17
for(int j=0;j<column;j++)
18
{
19
if(j==column-1)
20
{
21
sb.append("<td>");
22
sb.append("=<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>");
23
sb.append("</td>");
24
}
25
else if(j!=column-2)
26
{
27
sb.append("<td>");
28
sb.append("<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>X");
29
sb.append(j+1);
30
sb.append(" + ");
31
sb.append("</td>");
32
}
33
else
34
{
35
sb.append("<td>");
36
sb.append("<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>X");
37
sb.append(j+1);
38
sb.append(" ");
39
sb.append("</td>");
40
}
41
}
42
sb.append("</tr>");
43
}
44
content=sb.toString();
45
}
46
%>
<%@ page language="java" contentType="text/html; charset=utf8"%>2
<%@ page import="java.util.*"%> 3
<%@ page import="Joey.*"%>4
<%5
String content="";6
int row=0;7
int column=0;8
if(request.getQueryString()!=null)9
{10
String[] array=request.getQueryString().split(";");11
row = Integer.parseInt(array[0].split("=")[1]);12
column = Integer.parseInt(array[1].split("=")[1]);13
StringBuilder sb = new StringBuilder();14
for(int i =0; i<row;i++)15
{16
sb.append("<tr>");17
for(int j=0;j<column;j++)18
{19
if(j==column-1)20
{21
sb.append("<td>");22
sb.append("=<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>");23
sb.append("</td>");24
}25
else if(j!=column-2)26
{27
sb.append("<td>");28
sb.append("<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>X");29
sb.append(j+1);30
sb.append(" + ");31
sb.append("</td>");32
}33
else34
{35
sb.append("<td>");36
sb.append("<input name=\"TextBox\" type=\"text\" id=\"TextBox\"/>X");37
sb.append(j+1);38
sb.append(" ");39
sb.append("</td>");40
}41
}42
sb.append("</tr>");43
}44
content=sb.toString();45
}46
%>1
<form action="calculate.jsp" method=post>
2
<table>
3
<%=content%>
4
<input name="Row" type="hidden" id="Row" value="<%=row%>"/>
5
<input name="Column" type="hidden" id="Column" value="<%=column%>"/>
6
</table>
7
<input type="submit" value="Submit"> <input type="reset"
8
value="Reset">
9
</form>
<form action="calculate.jsp" method=post>2
<table>3
<%=content%>4
<input name="Row" type="hidden" id="Row" value="<%=row%>"/>5
<input name="Column" type="hidden" id="Column" value="<%=column%>"/>6
</table>7
<input type="submit" value="Submit"> <input type="reset" 8
value="Reset">9
</form>calculate.jsp:
1
<%@ page language="java" contentType="text/html; charset=utf8"%>
2
<%@ page import="java.util.*"%>
3
<%@ page import="joey.*"%>
4
<%
5
String[] array=request.getParameterValues("TextBox");
6
ArrayList<ArrayList<Fraction>> table=new ArrayList<ArrayList<Fraction>>();
7
ArrayList<Fraction> al;
8
int row = Integer.parseInt(request.getParameter("Row"));
9
int column = Integer.parseInt(request.getParameter("Column"));
10
int pointer = 0;
11
for(int i=0;i<row;i++)
12
{
13
al=new ArrayList<Fraction>();
14
for(int j=0;j<column;j++)
15
{
16
al.add(Fraction.toFraction(Double.parseDouble(array[pointer])));
17
pointer++;
18
}
19
table.add(al);
20
}
21
try
22
{
23
Matrix matrix = new Matrix(table);
24
matrix.reduceTheMatrix();
25
}
26
catch(Exception e)
27
{
28
}
29
String content="";
30
StringBuilder sb = new StringBuilder();
31
for(int i =0; i<row;i++)
32
{
33
sb.append("<tr>");
34
for(int j=0;j<column;j++)
35
{
36
if(j==column-1)
37
{
38
sb.append("<td>");
39
sb.append("= "+table.get(i).get(j).toString());
40
sb.append("</td>");
41
}
42
else if(j!=column-2)
43
{
44
sb.append("<td>");
45
sb.append(table.get(i).get(j).toString()+" X");
46
sb.append(j+1);
47
sb.append(" + ");
48
sb.append("</td>");
49
}
50
else
51
{
52
sb.append("<td>");
53
sb.append(table.get(i).get(j).toString()+" X");
54
sb.append(j+1);
55
sb.append(" ");
56
sb.append("</td>");
57
}
58
}
59
sb.append("</tr>");
60
}
61
content=sb.toString();
62
%>
<%@ page language="java" contentType="text/html; charset=utf8"%>2
<%@ page import="java.util.*"%> 3
<%@ page import="joey.*"%>4
<%5
String[] array=request.getParameterValues("TextBox");6
ArrayList<ArrayList<Fraction>> table=new ArrayList<ArrayList<Fraction>>();7
ArrayList<Fraction> al;8
int row = Integer.parseInt(request.getParameter("Row"));9
int column = Integer.parseInt(request.getParameter("Column"));10
int pointer = 0;11
for(int i=0;i<row;i++)12
{ 13
al=new ArrayList<Fraction>();14
for(int j=0;j<column;j++)15
{16
al.add(Fraction.toFraction(Double.parseDouble(array[pointer])));17
pointer++;18
}19
table.add(al);20
}21
try22
{23
Matrix matrix = new Matrix(table);24
matrix.reduceTheMatrix();25
}26
catch(Exception e)27
{28
}29
String content="";30
StringBuilder sb = new StringBuilder();31
for(int i =0; i<row;i++)32
{33
sb.append("<tr>");34
for(int j=0;j<column;j++)35
{36
if(j==column-1)37
{38
sb.append("<td>");39
sb.append("= "+table.get(i).get(j).toString());40
sb.append("</td>");41
}42
else if(j!=column-2)43
{44
sb.append("<td>");45
sb.append(table.get(i).get(j).toString()+" X");46
sb.append(j+1);47
sb.append(" + ");48
sb.append("</td>");49
}50
else51
{52
sb.append("<td>");53
sb.append(table.get(i).get(j).toString()+" X");54
sb.append(j+1);55
sb.append(" ");56
sb.append("</td>");57
}58
}59
sb.append("</tr>");60
}61
content=sb.toString();62
%>1
<table>
2
<%=content%>
3
</table>
<table>2
<%=content%>3
</table>



浙公网安备 33010602011771号