質問編集履歴
9
エラーメッセージの修正
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
質問タイトルの変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
C++で2次元の3次スプライン補間.
|
1
|
+
C++で2次元の3次スプライン補間.方程式の解が不定の場合の対処法について
|
test
CHANGED
File without changes
|
7
配列のグローバル宣言.スタックの問題解消
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,13 +10,15 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
こ
|
13
|
+
これで計算したところcan not calc(自分で作成したエラー文です)と返されてしまいます.
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
|
17
|
-
|
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
|
-
|
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
|
-
|
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] }
|
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
コードの修正.文字の設定ミス
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
コードの修正.文字の設定ミス
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
コードの修正.文字の設定ミス
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
|
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
コードの修正.文字の設定ミス
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
リンクの編集
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
書式の更新
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|