質問するログイン新規登録

回答編集履歴

4

追記2

2021/12/04 10:27

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -100,4 +100,15 @@
100
100
  `if (m.get(i).get(k) > t) {` を
101
101
  `if (Math.abs(m.get(i).get(k)) > t) {` に修正してください。
102
102
 
103
- 今回のデータでは、たまたま結果が正しくなっていました。
103
+ 今回のデータでは、たまたま結果が正しくなっていました。
104
+
105
+ **追記2**
106
+ ```java
107
+ if (p != k)
108
+ for (int j = 0; j <= N; j++) {
109
+ t = m.get(k).get(j);
110
+ m.get(k).set(j, m.get(p).get(j));
111
+ m.get(p).set(j, t);
112
+ }
113
+ ```
114
+ これは、`if (p != k) java.util.Collections.swap(m, k, p);` と書き換え可能です。

3

追記

2021/12/04 10:27

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -93,4 +93,11 @@
93
93
  0.000 0.000 0.000 1.000 1.000
94
94
 
95
95
  2.000 -1.000 3.000 1.000
96
- ```
96
+ ```
97
+ **追記**
98
+ 上記のコードに間違いがありました。
99
+
100
+ `if (m.get(i).get(k) > t) {` を
101
+ `if (Math.abs(m.get(i).get(k)) > t) {` に修正してください。
102
+
103
+ 今回のデータでは、たまたま結果が正しくなっていました。

2

コードの修正

2021/12/04 09:51

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -48,7 +48,7 @@
48
48
  }
49
49
 
50
50
  for (int k = N; --k > 0; )
51
- for (int i = k-1; i >= 0; i--) {
51
+ for (int i = k; --i >= 0; ) {
52
52
  double t = m.get(i).get(k) / m.get(k).get(k);
53
53
  for (int j = 0; j <= N; j++)
54
54
  m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));

1

コードの修正

2021/12/03 06:33

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -29,35 +29,31 @@
29
29
  for (int k = 0; k < N; k++) {
30
30
  double t = Math.abs(m.get(k).get(k));
31
31
  int p = k;
32
- for (int i = k+1; i < N; i++) {
32
+ for (int i = k+1; i < N; i++)
33
33
  if (m.get(i).get(k) > t) {
34
34
  t = Math.abs(m.get(i).get(k));
35
35
  p = i;
36
36
  }
37
- }
38
- if (p != k) {
37
+ if (p != k)
39
38
  for (int j = 0; j <= N; j++) {
40
39
  t = m.get(k).get(j);
41
40
  m.get(k).set(j, m.get(p).get(j));
42
41
  m.get(p).set(j, t);
43
42
  }
44
- }
45
43
  for (int i = k+1; i < N; i++) {
46
44
  t = m.get(i).get(k) / m.get(k).get(k);
47
- for (int j = k; j <= N; j++) {
45
+ for (int j = k; j <= N; j++)
48
- m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
46
+ m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
49
- }
50
47
  }
51
48
  }
52
49
 
53
- for (int k = N; --k > 0; ) {
50
+ for (int k = N; --k > 0; )
54
51
  for (int i = k-1; i >= 0; i--) {
55
52
  double t = m.get(i).get(k) / m.get(k).get(k);
56
- for (int j = 0; j <= N; j++) {
53
+ for (int j = 0; j <= N; j++)
57
54
  m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
58
- }
59
55
  }
60
- }
56
+
61
57
  for (int k = 0; k < N; k++) {
62
58
  m.get(k).set(N, m.get(k).get(N) / m.get(k).get(k));
63
59
  m.get(k).set(k, 1.0);