質問編集履歴

9

エラーメッセージの修正

2020/09/07 11:57

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -36,12 +36,6 @@
36
36
 
37
37
 
38
38
 
39
- ### 発生している問題・エラーメッセージ
40
-
41
-
42
-
43
- セグメンテーション違反です.
44
-
45
39
 
46
40
 
47
41
  ### 該当のソースコード

8

質問タイトルの変更

2020/09/07 11:57

投稿

Kinsho
Kinsho

スコア18

test CHANGED
@@ -1 +1 @@
1
- C++で2次元の3次スプライン補間.「セグメンテーション違反です」とは?
1
+ C++で2次元の3次スプライン補間.方程式の解が不定の場合の対処法について
test CHANGED
File without changes

7

配列のグローバル宣言.スタックの問題解消

2020/09/07 11:36

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -10,13 +10,15 @@
10
10
 
11
11
 
12
12
 
13
- こで2重forループを入るまならプログラムは問題なく動き,sq[][],cb[][]にも無事に数字が格納されています.かしのforルプを動かすとセグメンテーション違反とのエラーが出きてしまい,調べてもエラー内容がよくわかりせん
13
+ これで計算たとろcan not calc(自分で作成したエラ文で返されてしまいま
14
-
15
-
16
-
14
+
17
- PCスペックの問題かと思ました,大学研究室本格的な計算機投げても同様のエラーを返されたのでプログラムの方問題があるよす.
15
+ おそらくcsv中に値が十分に散らばってない部分あり連立方程式解が一位定まらずエラーになってしまのだと考えられます.
16
+
18
-
17
+ 当然すべてのセルにとりあえず1を足すなどの処理は無意味で根本的な対策が必要みたいです.
18
+
19
+
20
+
19
-
21
+ このような場合に良い対処法などはありますでしょうか?
20
22
 
21
23
 
22
24
 
@@ -142,7 +144,13 @@
142
144
 
143
145
  }
144
146
 
145
-
147
+ double sq[w][w];
148
+
149
+ double cb[w][w];
150
+
151
+ double a[w][w], b[w][w], c[w][w], d[w][w], e[w][w], f[w][w], g[w][w], h[w][w];
152
+
153
+ double s[w][w], t[w][w], k[w][w], l[w][w], m[w][w], n[w][w], o[w][w], p[w][w];
146
154
 
147
155
 
148
156
 
@@ -174,9 +182,7 @@
174
182
 
175
183
 
176
184
 
177
- double sq[w][w];
185
+
178
-
179
- double cb[w][w];
180
186
 
181
187
  for(int i=0;i<y;i++) {
182
188
 
@@ -222,9 +228,7 @@
222
228
 
223
229
  //多分ここからが問題と思われます
224
230
 
225
- double a[w][w], b[w][w], c[w][w], d[w][w], e[w][w], f[w][w], g[w][w], h[w][w];
231
+
226
-
227
- double s[w][w], t[w][w], k[w][w], l[w][w], m[w][w], n[w][w], o[w][w], p[w][w];
228
232
 
229
233
  //1つずつ解く
230
234
 
@@ -274,7 +278,7 @@
274
278
 
275
279
  { cb[0][j + 1],cb[0][j + 1] * si[i + 2][0],cb[0][j + 1] * sq[i + 2][0],cb[0][j + 1] * cb[i + 2][0],sq[0][j + 1], sq[0][j + 1] * si[i + 2][0], sq[0][j + 1] * sq[i + 2][0], sq[0][j + 1] * cb[i + 2][0],si[0][j + 1], si[0][j + 1] * si[i + 2][0], si[0][j + 1] * sq[i + 2][0], si[0][j + 1] * cb[i + 2][0],1, si[i + 2][0], sq[i + 2][0], cb[i + 2][0] , si[i + 2][j + 1] },//15
276
280
 
277
- { cb[0][j + 2],cb[0][j + 2] * si[i + 2][0],cb[0][j + 2] * sq[i + 2][0],cb[0][j + 2] * cb[i + 2][0],sq[0][j + 2], sq[0][j + 2] * si[i + 2][0], sq[0][j + 2] * sq[i + 2][0], sq[0][j + 2] * cb[i + 2][0],si[0][j + 2], si[0][j + 2] * si[i + 2][0], si[0][j + 2] * sq[i + 2][0], si[0][j + 2] * cb[i + 2][0], 1, si[i + 2][0], sq[i + 2][0], cb[i + 2][0],si[i + 2][j + 2] },//16
281
+ { cb[0][j + 2],cb[0][j + 2] * si[i + 2][0],cb[0][j + 2] * sq[i + 2][0],cb[0][j + 2] * cb[i + 2][0],sq[0][j + 2], sq[0][j + 2] * si[i + 2][0], sq[0][j + 2] * sq[i + 2][0], sq[0][j + 2] * cb[i + 2][0],si[0][j + 2], si[0][j + 2] * si[i + 2][0], si[0][j + 2] * sq[i + 2][0], si[0][j + 2] * cb[i + 2][0], 1, si[i + 2][0], sq[i + 2][0], cb[i + 2][0],si[i + 2][j + 2] }//16
278
282
 
279
283
  };
280
284
 
@@ -388,6 +392,4 @@
388
392
 
389
393
 
390
394
 
391
-
392
-
393
395
  ```

6

コードの修正.文字の設定ミス

2020/09/07 11:32

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -318,7 +318,7 @@
318
318
 
319
319
  for (int ii = 15; ii >= 0; ii--) {
320
320
 
321
- for (int jj = ii + 1; jj<16; j++)z[ii][16] -= z[jj][16] * z[ii][jj];
321
+ for (int jj = ii + 1; jj<16; jj++)z[ii][16] -= z[jj][16] * z[ii][jj];
322
322
 
323
323
  }
324
324
 
@@ -390,6 +390,4 @@
390
390
 
391
391
 
392
392
 
393
-
394
-
395
393
  ```

5

コードの修正.文字の設定ミス

2020/09/07 10:55

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -306,7 +306,7 @@
306
306
 
307
307
 
308
308
 
309
- for (int jj = ii + 1; jj<16; j++) {
309
+ for (int jj = ii + 1; jj<16; jj++) {
310
310
 
311
311
  double beginDelete = z[jj][ii];
312
312
 
@@ -390,4 +390,6 @@
390
390
 
391
391
 
392
392
 
393
+
394
+
393
395
  ```

4

コードの修正.文字の設定ミス

2020/09/07 10:55

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -284,9 +284,9 @@
284
284
 
285
285
  int maxLine = ii;
286
286
 
287
- for (int j = ii; j<16; j++) if (abs(z[maxLine][ii])<abs(z[j][ii])) maxLine = j;
287
+ for (int jj = ii; jj<16; jj++) if (abs(z[maxLine][ii])<abs(z[jj][ii])) maxLine = jj;
288
-
288
+
289
- for (int j = ii; j <= 16; j++) swap(z[ii][j], z[maxLine][j]);
289
+ for (int jj = ii; jj<= 16; jj++) swap(z[ii][jj], z[maxLine][jj]);
290
290
 
291
291
 
292
292
 
@@ -302,15 +302,15 @@
302
302
 
303
303
 
304
304
 
305
- for (int j = ii; j <= 16; j++)z[ii][j] /= beginNum;
305
+ for (int jj = ii; jj <= 16; jj++)z[ii][jj] /= beginNum;
306
-
307
-
308
-
306
+
307
+
308
+
309
- for (int j = ii + 1; j<16; j++) {
309
+ for (int jj = ii + 1; jj<16; j++) {
310
-
310
+
311
- double beginDelete = z[j][ii];
311
+ double beginDelete = z[jj][ii];
312
-
312
+
313
- for (int k = ii; k <= 16; k++)z[j][k] -= beginDelete*z[ii][k];
313
+ for (int k = ii; k <= 16; k++)z[jj][k] -= beginDelete*z[ii][k];
314
314
 
315
315
  }
316
316
 
@@ -318,7 +318,7 @@
318
318
 
319
319
  for (int ii = 15; ii >= 0; ii--) {
320
320
 
321
- for (int j = ii + 1; j<16; j++)z[ii][16] -= z[j][16] * z[ii][j];
321
+ for (int jj = ii + 1; jj<16; j++)z[ii][16] -= z[jj][16] * z[ii][jj];
322
322
 
323
323
  }
324
324
 
@@ -388,4 +388,6 @@
388
388
 
389
389
 
390
390
 
391
+
392
+
391
393
  ```

3

コードの修正.文字の設定ミス

2020/09/07 10:45

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -276,21 +276,21 @@
276
276
 
277
277
  { cb[0][j + 2],cb[0][j + 2] * si[i + 2][0],cb[0][j + 2] * sq[i + 2][0],cb[0][j + 2] * cb[i + 2][0],sq[0][j + 2], sq[0][j + 2] * si[i + 2][0], sq[0][j + 2] * sq[i + 2][0], sq[0][j + 2] * cb[i + 2][0],si[0][j + 2], si[0][j + 2] * si[i + 2][0], si[0][j + 2] * sq[i + 2][0], si[0][j + 2] * cb[i + 2][0], 1, si[i + 2][0], sq[i + 2][0], cb[i + 2][0],si[i + 2][j + 2] },//16
278
278
 
279
- };//この部分の係数の入力ミスは大丈夫そうです
279
+ };
280
280
 
281
281
 
282
282
 
283
- for (int i = 0; i<16; i++) {
283
+ for (int ii = 0; ii<16; ii++) {
284
-
284
+
285
- int maxLine = i;
285
+ int maxLine = ii;
286
-
286
+
287
- for (int j = i; j<16; j++) if (abs(z[maxLine][i])<abs(z[j][i])) maxLine = j;
287
+ for (int j = ii; j<16; j++) if (abs(z[maxLine][ii])<abs(z[j][ii])) maxLine = j;
288
-
288
+
289
- for (int j = i; j <= 16; j++) swap(z[i][j], z[maxLine][j]);
289
+ for (int j = ii; j <= 16; j++) swap(z[ii][j], z[maxLine][j]);
290
-
291
-
292
-
290
+
291
+
292
+
293
- double beginNum = z[i][i];
293
+ double beginNum = z[ii][ii];
294
294
 
295
295
  if (!beginNum) {
296
296
 
@@ -302,23 +302,23 @@
302
302
 
303
303
 
304
304
 
305
- for (int j = i; j <= 16; j++)z[i][j] /= beginNum;
305
+ for (int j = ii; j <= 16; j++)z[ii][j] /= beginNum;
306
-
307
-
308
-
306
+
307
+
308
+
309
- for (int j = i + 1; j<16; j++) {
309
+ for (int j = ii + 1; j<16; j++) {
310
-
310
+
311
- double beginDelete = z[j][i];
311
+ double beginDelete = z[j][ii];
312
-
312
+
313
- for (int k = i; k <= 16; k++)z[j][k] -= beginDelete*z[i][k];
313
+ for (int k = ii; k <= 16; k++)z[j][k] -= beginDelete*z[ii][k];
314
314
 
315
315
  }
316
316
 
317
317
  }
318
318
 
319
- for (int i = 15; i >= 0; i--) {
319
+ for (int ii = 15; ii >= 0; ii--) {
320
-
320
+
321
- for (int j = i + 1; j<16; j++)z[i][16] -= z[j][16] * z[i][j];
321
+ for (int j = ii + 1; j<16; j++)z[ii][16] -= z[j][16] * z[ii][j];
322
322
 
323
323
  }
324
324
 
@@ -384,4 +384,8 @@
384
384
 
385
385
 
386
386
 
387
+
388
+
389
+
390
+
387
391
  ```

2

リンクの編集

2020/09/07 10:42

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,12 @@
1
1
  C++で2次元の3次スプライン補間を行おうと考えています.
2
2
 
3
- 元々のcsvはこのBx.csv(https://drive.google.com/file/d/1vcpLAAZIc6EL4QZ8YTfYthSwZu7UqGWR/view?usp=sharing)というファイルを使用します.
3
+ 元々のcsvはこのBx.csv( https://drive.google.com/file/d/1vcpLAAZIc6EL4QZ8YTfYthSwZu7UqGWR/view?usp=sharing )というファイルを使用します.
4
4
 
5
5
  このファイルの1行目がx座標,1列目がy座標を表しています.
6
6
 
7
7
  それを2乗3乗した2次元配列を作成しそれを基に16本の連立方程式を作り,それを解くことによって0.01×0.01の各マス内における3次スプライン補間式の係数を導出したいです.
8
8
 
9
- 添付プログラム序盤のcsvの読み取りはこちら(https://teratail.com/questions/289856)を,連立方程式の解き方はこちら(https://qiita.com/kubo_programmer/items/c42ec88bdba3c5c0919f)を参考にさせていただきました.
9
+ 添付プログラム序盤のcsvの読み取りはこちら( https://teratail.com/questions/289856 )を,連立方程式の解き方はこちら( https://qiita.com/kubo_programmer/items/c42ec88bdba3c5c0919f )を参考にさせていただきました.
10
10
 
11
11
 
12
12
 

1

書式の更新

2020/09/07 10:17

投稿

Kinsho
Kinsho

スコア18

test CHANGED
File without changes
test CHANGED
File without changes