質問編集履歴

9

2022/01/13 01:19

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,315 +1,69 @@
1
1
  ### 前提・実現したいこと
2
-
3
2
  温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
4
-
5
-
6
3
 
7
4
  ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
8
5
 
9
-
10
-
11
6
  その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
12
7
 
13
-
14
-
15
8
  ### 発生している問題・エラーメッセージ
16
-
17
9
  現在つまづいていている点として、main_01.cの実行後に出力されるdat形式のファイルをgnuplotでpm3dを用いてsplotしても以下のようにグラフが全く表示されない点です。
18
-
19
10
  ![イメージ説明](de9fe11cc93958b27baa58d5384cff36.jpeg)
20
11
 
21
-
22
-
23
12
  またgnuplot上で以下のエラーが表示されます。
24
-
25
13
  ```
26
-
27
14
  Warning: Single isoline (scan) is not enough for a pm3d plot.
28
-
29
15
  Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
30
-
31
16
  ```
32
-
33
17
  ###追記1
34
-
35
18
  描画結果1
36
-
37
19
  ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
38
-
39
20
  描画できるようにはなりましたが、直線になってしまいます。
40
21
 
41
-
42
-
43
22
  ###追記2
44
-
45
23
  描画結果2
46
-
47
24
  配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
48
-
49
25
  ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
50
-
51
26
  軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
52
-
53
27
  軸の範囲が0<=x<=200、0<=y<=100になっているのは配列(行列)サイズがa[100][200]となっているためですが、軸は0<=x<=2、0<=y<=1としなければいけない制約があります。また、格子間隔(離散した間隔)が0.01という制約もあるためa[1/0.01][2/0.01]としております。この配列サイズを維持したまgnuplot上での軸を0<=x<=2、0<=y<=1と表示するにはどうすればよいのでしょうか。
54
28
 
55
-
56
-
57
29
  ### 試したこと
58
-
59
30
  pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
60
31
 
61
-
62
-
63
32
  [参照サイト](http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/faq/faq-j.html#SECTION000510000000000000000)
64
-
65
33
  このサイトの
66
-
67
34
  > 3.10 pm3d によるデータファイルの splot で何も表示されません
68
35
 
69
-
70
-
71
36
  によるとdatファイルに2つのつながっている線 (孤立線) を分離する空行がないと描画できないとありましたが、今回私が作成しようとしているプログラムで出力されるdatファイルのどのタイミングで空行を入れるのかわかりません。つきましては、プログラムmain_01.cにてdatファイルを出力している箇所に適切な空行を入れる命令をご提示いただけますでしょうか。
72
-
73
37
  または、main_01.cのアルゴリズムが間違えていましたら、ご指摘いただければ幸いです。
74
38
 
75
-
76
-
77
39
  かれこれ4時間以上考えたり、インターネットで調べてみましたが解決できませんでした。よろしくお願いいたします。
78
-
79
40
  ### 該当のソースコード
80
41
 
81
42
 
82
43
 
83
- ```C
44
+ ```gnuplot
45
+ cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
84
46
 
85
- //main_01.c
86
-
87
- //G-S法
88
-
89
- #define _CRT_SECURE_NO_WARNINGS
90
-
91
- #include <stdio.h>
92
-
93
- #include <stdlib.h>
94
-
95
- #include <math.h>
96
-
97
-
98
-
99
- //#define dt (0.01) //格子間隔
100
-
101
-
102
-
103
- #define N (100) // 1/dt
104
-
105
- #define M (200) // 2/dt
106
-
107
-
108
-
109
- #define cycle (50000) //サイクル数
110
-
111
- #define eps (pow(10,-12)) //収束判定
112
-
113
-
114
-
115
- int main(void)
47
+ set pm3d
116
-
117
- {
118
-
119
- //datファイルに書き込む
120
-
121
- FILE* fp1;
122
-
123
- double* file1 = "g-s_result.dat";
124
-
125
- fp1 = fopen(file1, "w");
126
-
127
- if (fp1 == NULL)
128
-
129
- {
130
-
131
- printf("%f file cannot open!\n", file1);
132
-
133
- return -1;
48
+ set pm3d map
134
-
49
+ set pm3d interpolate 5, 5
135
- }
50
+ set ticslevel 0
136
-
137
-
138
-
139
- //列番号を挿入
51
+ #set cbrange[0:1]
140
-
141
- double num = 2.0;
52
+ #set xrange [0:200]
142
-
143
- fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
144
-
145
- for (int i = 0; i < M; i++)
146
-
147
- {
148
-
149
- fprintf(fp1, "%6.6f\t", num);
150
-
151
- num -= dt;
152
-
153
- }
154
-
155
- fprintf(fp1, "\n");
156
-
157
- num = 0.0; //初期化
158
-
159
-
160
-
161
- //配列を書き込む
53
+ #set yrange [100:0]
162
-
54
+ set autoscale xfix
55
+ set autoscale yfix
163
- for (int i = 0; i < N; i++)
56
+ set yrange [] reverse
164
-
165
- {
166
-
167
- num += dt;
168
-
169
- fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
170
-
171
- for (int j = 0; j < M; j++)
172
-
173
- {
174
-
175
- fprintf(fp1, "%6.6f\t", a[i][j]);
176
-
177
- }
178
-
179
- fprintf(fp1, "\n"); //1行終えたので改行
180
-
181
- }
182
-
183
- fclose(fp1);
57
+ set autoscale cbfix
184
-
185
- //int tmp_count = 0;
186
-
187
- //int prev = 0, cur = 0;
58
+ set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
188
-
189
- //double data[3];
190
-
191
- //for (int i = 1; i < N - 1; i++)
59
+ splot 'g-s_result.dat' matrix nonuniform
192
-
193
- //{
194
-
195
- // for (int j = 1; j < M - 1; j++)
196
-
197
- // {
198
-
199
- // data[tmp_count] = a[i][j];
200
-
201
- // tmp_count++;
202
-
203
- // if (tmp_count == 3)
204
-
205
- // {
206
-
207
- // // 有効数字の桁数
208
-
209
- // cur = (int)(data[0] * 10);
210
-
211
- // // 前の行の値と異なる場合は改行を出力
212
-
213
- // if (cur != prev) fprintf(fp1, "\n");
214
-
215
- // fprintf(fp1, "%6.6f\t%6.6f\t%6.6f\t\n", data[0], data[1], data[2]);
216
-
217
- // tmp_count = 0;
218
-
219
- // prev = cur;
220
-
221
- // }
222
-
223
- // }
224
-
225
- //}
226
-
227
- //fclose(fp1);
228
-
229
-
230
-
231
- free(a);
232
-
233
- free(tmp_a);
234
-
235
-
236
-
237
- return 0;
238
-
239
- }
240
-
241
60
  ```
242
61
 
243
-
244
-
245
- ```dat
246
-
247
- //文字数overのため省略
248
-
249
- 配列列数 0.01 0.02 ・・・
250
-
251
- 0.01
252
-
253
- 0.02
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
- ```
262
-
263
-
264
-
265
- ```gnuplot
266
-
267
- cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
268
-
269
-
270
-
271
- set pm3d
272
-
273
- set pm3d map
274
-
275
- set pm3d interpolate 5, 5
276
-
277
- set ticslevel 0
278
-
279
- #set cbrange[0:1]
280
-
281
- #set xrange [0:200]
282
-
283
- #set yrange [100:0]
284
-
285
- set autoscale xfix
286
-
287
- set autoscale yfix
288
-
289
- set yrange [] reverse
290
-
291
- set autoscale cbfix
292
-
293
- set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
294
-
295
- splot 'g-s_result.dat' matrix nonuniform
296
-
297
- ```
298
-
299
-
300
-
301
62
  ###最終結果
302
-
303
63
  ![イメージ説明](057b31044db6c57742507882b21761e2.jpeg)
304
64
 
305
-
306
-
307
65
  ### 補足情報(FW/ツールのバージョンなど)
308
-
309
66
  以下の環境で実施しております。
310
-
311
67
  Visual Studio 2019 (C言語の実行環境)
312
-
313
68
  Visual Studio Code
314
-
315
69
  gnuplot 5.4(グラフ描画ソフト)

8

プログラムの修正

2021/12/12 01:20

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -116,254 +116,70 @@
116
116
 
117
117
  {
118
118
 
119
- //double型の2次元配列 N行M列の行列
120
-
121
- double** a;
122
-
123
- a = (double**)malloc(sizeof(double*) * N);
124
-
125
- for (int i = 0; i < N; i++) {
126
-
127
- a[i] = (double*)malloc(sizeof(double) * M);
128
-
129
- //N個の各配列がM個の要素を持つメージ
119
+ //datファルに書き込む
120
+
121
+ FILE* fp1;
122
+
123
+ double* file1 = "g-s_result.dat";
124
+
125
+ fp1 = fopen(file1, "w");
126
+
127
+ if (fp1 == NULL)
128
+
129
+ {
130
+
131
+ printf("%f file cannot open!\n", file1);
132
+
133
+ return -1;
130
134
 
131
135
  }
132
136
 
137
+
138
+
139
+ //列番号を挿入
140
+
133
- double** tmp_a;
141
+ double num = 2.0;
134
-
142
+
135
- tmp_a = (double**)malloc(sizeof(double*) * N);
143
+ fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
136
-
144
+
137
- for (int i = 0; i < N; i++) {
145
+ for (int i = 0; i < M; i++)
146
+
138
-
147
+ {
148
+
139
- tmp_a[i] = (double*)malloc(sizeof(double) * M);
149
+ fprintf(fp1, "%6.6f\t", num);
140
-
150
+
141
- //N個の各配列がM個の要素を持つイメージ
151
+ num -= dt;
142
152
 
143
153
  }
144
154
 
145
-
155
+ fprintf(fp1, "\n");
156
+
146
-
157
+ num = 0.0; //初期化
158
+
159
+
160
+
147
- //まず、すべての要素0で初期化
161
+ //配列書き込む
148
162
 
149
163
  for (int i = 0; i < N; i++)
150
164
 
151
165
  {
152
166
 
167
+ num += dt;
168
+
169
+ fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
170
+
153
171
  for (int j = 0; j < M; j++)
154
172
 
155
173
  {
156
174
 
157
- a[i][j] = 0.0;
175
+ fprintf(fp1, "%6.6f\t", a[i][j]);
158
176
 
159
177
  }
160
178
 
179
+ fprintf(fp1, "\n"); //1行終えたので改行
180
+
161
181
  }
162
182
 
163
-
164
-
165
- //0行目の要素はすべて1で初期化
166
-
167
- for (int j = 0; j < M; j++)
168
-
169
- {
170
-
171
- a[0][j] = 1.0;
172
-
173
- }
174
-
175
-
176
-
177
- //1行目からi-1行目までの0列目の要素は-1で初期化
178
-
179
- for (int i = 1; i < N - 1; i++)
180
-
181
- {
182
-
183
- a[i][0] = -1.0;
184
-
185
- }
186
-
187
-
188
-
189
- //1行目からi-1行目までのj列目の要素は-1で初期化
190
-
191
- for (int i = 1; i < N - 1; i++)
192
-
193
- {
194
-
195
- a[i][M - 1] = -1.0;
196
-
197
- }
198
-
199
-
200
-
201
- //i行目の要素はすべて-1で初期化
202
-
203
- for (int j = 0; j < M; j++)
204
-
205
- {
206
-
207
- a[N - 1][j] = -1.0;
208
-
209
- }
210
-
211
-
212
-
213
-
214
-
215
- /*G-S法*/
216
-
217
- int count = 0;
218
-
219
- while (count != cycle)
220
-
221
- {
222
-
223
- //aの配列の中身をtmp_a配列にコピー
224
-
225
- for (int i = 0; i < N; i++)
226
-
227
- {
228
-
229
- for (int j = 0; j < M; j++)
230
-
231
- {
232
-
233
- tmp_a[i][j] = a[i][j];
234
-
235
- }
236
-
237
- }
238
-
239
- //G-S法による計算
240
-
241
- for (int i = 1; i < N - 1; i++)
242
-
243
- {
244
-
245
- for (int j = 1; j < M - 1; j++)
246
-
247
- {
248
-
249
- a[i][j] = (a[i - 1][j] + a[i][j + 1] + a[i + 1][j] + a[i][j - 1]) / 4;
250
-
251
- }
252
-
253
- }
254
-
255
- //収束したか否かの判定
256
-
257
- double error = fabs(a[1][1] - tmp_a[1][1]);
258
-
259
- double tmp_error = 0.0;
260
-
261
- double sum_error = 0.0;
262
-
263
- for (int i = 1; i < N - 1; i++) {
264
-
265
- for (int j = 1; j < M - 1; j++) {
266
-
267
- tmp_error = fabs(a[i][j] - tmp_a[i][j]);
268
-
269
- if (tmp_error > error)
270
-
271
- error = tmp_error;
272
-
273
- sum_error += error;
274
-
275
- }
276
-
277
- }
278
-
279
- //errorの合計/N*M<eps
280
-
281
- error = sum_error / (N * M);
282
-
283
- if (error < eps)
284
-
285
- {
286
-
287
- printf("%dサイクル目で収束\n", count);
288
-
289
- break;
290
-
291
- }
292
-
293
- count++;
294
-
295
- }
296
-
297
-
298
-
299
-
300
-
301
-
302
-
303
- //datファイルに書き込む
304
-
305
- FILE* fp1;
306
-
307
- double* file1 = "g-s_result.dat";
308
-
309
- fp1 = fopen(file1, "w");
310
-
311
- if (fp1 == NULL)
312
-
313
- {
314
-
315
- printf("%f file cannot open!\n", file1);
316
-
317
- return -1;
318
-
319
- }
320
-
321
-
322
-
323
- //列番号を挿入
324
-
325
- double num = 2.0;
326
-
327
- fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
328
-
329
- for (int i = 0; i < M; i++)
330
-
331
- {
332
-
333
- fprintf(fp1, "%6.6f\t", num);
334
-
335
- num -= dt;
336
-
337
- }
338
-
339
- fprintf(fp1, "\n");
340
-
341
- num = 0.0; //初期化
342
-
343
-
344
-
345
- //配列を書き込む
346
-
347
- for (int i = 0; i < N; i++)
348
-
349
- {
350
-
351
- num += dt;
352
-
353
- fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
354
-
355
- for (int j = 0; j < M; j++)
356
-
357
- {
358
-
359
- fprintf(fp1, "%6.6f\t", a[i][j]);
360
-
361
- }
362
-
363
- fprintf(fp1, "\n"); //1行終えたので改行
364
-
365
- }
366
-
367
183
  fclose(fp1);
368
184
 
369
185
  //int tmp_count = 0;

7

誤字の修正

2021/12/12 01:20

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ###追記1
34
34
 
35
- 描画結果
35
+ 描画結果1
36
36
 
37
37
  ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
38
38
 
@@ -44,6 +44,8 @@
44
44
 
45
45
  描画結果2
46
46
 
47
+ 配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
48
+
47
49
  ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
48
50
 
49
51
  軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。

6

datの追加

2021/12/07 11:49

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -424,6 +424,26 @@
424
424
 
425
425
 
426
426
 
427
+ ```dat
428
+
429
+ //文字数overのため省略
430
+
431
+ 配列列数 0.01 0.02 ・・・
432
+
433
+ 0.01
434
+
435
+ 0.02
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+ ```
444
+
445
+
446
+
427
447
  ```gnuplot
428
448
 
429
449
  cd 'C:\Users\%USERNAME%\Desktop\gnuplot'

5

結果の追加

2021/12/07 11:12

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -462,7 +462,7 @@
462
462
 
463
463
  ###最終結果
464
464
 
465
-
465
+ ![イメージ説明](057b31044db6c57742507882b21761e2.jpeg)
466
466
 
467
467
 
468
468
 

4

ソースコードの変更

2021/12/07 11:05

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -4,17 +4,11 @@
4
4
 
5
5
 
6
6
 
7
- 下の画像のようにガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
7
+ ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
8
-
9
- ![イメージ説明](b61112670ebca1d7d4a515a029b3c30a.jpeg)
8
+
10
-
11
-
12
-
9
+
10
+
13
- その数値計算を行った後にその行列の内側部(グレー部)の行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで以下のような温度分布のグラフを描画します。(g-s_method.pltを参照)この画像の行列はあくまでも例であり、実際の行列サイズは大きいです。
11
+ その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
14
-
15
- ![イメージ説明](6e7aa0e7e5007b085589895038aa6d87.jpeg)
16
-
17
- このグラフは見本のグラフです。
18
12
 
19
13
 
20
14
 
@@ -324,10 +318,38 @@
324
318
 
325
319
 
326
320
 
321
+ //列番号を挿入
322
+
323
+ double num = 2.0;
324
+
325
+ fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
326
+
327
+ for (int i = 0; i < M; i++)
328
+
329
+ {
330
+
331
+ fprintf(fp1, "%6.6f\t", num);
332
+
333
+ num -= dt;
334
+
335
+ }
336
+
337
+ fprintf(fp1, "\n");
338
+
339
+ num = 0.0; //初期化
340
+
341
+
342
+
343
+ //配列を書き込む
344
+
327
345
  for (int i = 0; i < N; i++)
328
346
 
329
347
  {
330
348
 
349
+ num += dt;
350
+
351
+ fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
352
+
331
353
  for (int j = 0; j < M; j++)
332
354
 
333
355
  {
@@ -404,8 +426,6 @@
404
426
 
405
427
  ```gnuplot
406
428
 
407
- #g-s_method.plt
408
-
409
429
  cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
410
430
 
411
431
 
@@ -418,24 +438,40 @@
418
438
 
419
439
  set ticslevel 0
420
440
 
421
- set cbrange[0:1]
441
+ #set cbrange[0:1]
422
-
442
+
423
- set xrange [0:200]
443
+ #set xrange [0:200]
424
-
444
+
425
- set yrange [100:0]
445
+ #set yrange [100:0]
446
+
447
+ set autoscale xfix
448
+
449
+ set autoscale yfix
450
+
451
+ set yrange [] reverse
452
+
453
+ set autoscale cbfix
426
454
 
427
455
  set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
428
456
 
429
- splot 'g-s_result.dat' matrix
457
+ splot 'g-s_result.dat' matrix nonuniform
430
458
 
431
459
  ```
432
460
 
433
461
 
434
462
 
463
+ ###最終結果
464
+
465
+
466
+
467
+
468
+
435
469
  ### 補足情報(FW/ツールのバージョンなど)
436
470
 
437
471
  以下の環境で実施しております。
438
472
 
439
473
  Visual Studio 2019 (C言語の実行環境)
440
474
 
475
+ Visual Studio Code
476
+
441
477
  gnuplot 5.4(グラフ描画ソフト)

3

追記2

2021/12/07 11:02

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -54,6 +54,8 @@
54
54
 
55
55
  軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
56
56
 
57
+ 軸の範囲が0<=x<=200、0<=y<=100になっているのは配列(行列)サイズがa[100][200]となっているためですが、軸は0<=x<=2、0<=y<=1としなければいけない制約があります。また、格子間隔(離散した間隔)が0.01という制約もあるためa[1/0.01][2/0.01]としております。この配列サイズを維持したまgnuplot上での軸を0<=x<=2、0<=y<=1と表示するにはどうすればよいのでしょうか。
58
+
57
59
 
58
60
 
59
61
  ### 試したこと

2

描画結果の追加、プログラムの更新

2021/12/05 07:47

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ```
38
38
 
39
- 追記
39
+ ###追記1
40
40
 
41
41
  描画結果
42
42
 
@@ -46,6 +46,16 @@
46
46
 
47
47
 
48
48
 
49
+ ###追記2
50
+
51
+ 描画結果2
52
+
53
+ ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
54
+
55
+ 軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
56
+
57
+
58
+
49
59
  ### 試したこと
50
60
 
51
61
  pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
@@ -88,13 +98,13 @@
88
98
 
89
99
 
90
100
 
91
- //#define dt (0.005)
101
+ //#define dt (0.01) //格子間隔
92
-
93
-
94
-
102
+
103
+
104
+
95
- #define N (200) // 1/dt
105
+ #define N (100) // 1/dt
96
-
106
+
97
- #define M (400) // 2/dt
107
+ #define M (200) // 2/dt
98
108
 
99
109
 
100
110
 
@@ -312,37 +322,67 @@
312
322
 
313
323
 
314
324
 
315
- int tmp_count = 0;
316
-
317
- for (int i = 1; i < N - 1; i++)
325
+ for (int i = 0; i < N; i++)
318
-
326
+
319
- {
327
+ {
320
-
328
+
321
- for (int j = 1; j < M - 1; j++)
329
+ for (int j = 0; j < M; j++)
322
330
 
323
331
  {
324
332
 
325
- fprintf(fp1,"%6.6f\t", a[i][j]);
333
+ fprintf(fp1, "%6.6f\t", a[i][j]);
326
-
327
- tmp_count++;
334
+
328
-
329
- if (tmp_count == 3)//3つ値を書き込んだら改行
330
-
331
- {
332
-
333
- tmp_count = 0;
334
-
335
- fprintf(fp1,"\n");
336
-
337
- }
335
+ }
338
-
336
+
339
- }
337
+ fprintf(fp1, "\n"); //1行終えたので改行
340
338
 
341
339
  }
342
340
 
343
341
  fclose(fp1);
344
342
 
345
-
343
+ //int tmp_count = 0;
344
+
345
+ //int prev = 0, cur = 0;
346
+
347
+ //double data[3];
348
+
349
+ //for (int i = 1; i < N - 1; i++)
350
+
351
+ //{
352
+
353
+ // for (int j = 1; j < M - 1; j++)
354
+
355
+ // {
356
+
357
+ // data[tmp_count] = a[i][j];
358
+
359
+ // tmp_count++;
360
+
361
+ // if (tmp_count == 3)
362
+
363
+ // {
364
+
365
+ // // 有効数字の桁数
366
+
367
+ // cur = (int)(data[0] * 10);
368
+
369
+ // // 前の行の値と異なる場合は改行を出力
370
+
371
+ // if (cur != prev) fprintf(fp1, "\n");
372
+
373
+ // fprintf(fp1, "%6.6f\t%6.6f\t%6.6f\t\n", data[0], data[1], data[2]);
374
+
375
+ // tmp_count = 0;
376
+
377
+ // prev = cur;
378
+
379
+ // }
380
+
381
+ // }
382
+
383
+ //}
384
+
385
+ //fclose(fp1);
346
386
 
347
387
 
348
388
 
@@ -358,244 +398,38 @@
358
398
 
359
399
  ```
360
400
 
361
- ```dat
362
-
363
- //g-s_result.dat
364
-
365
- -0.000028 0.395250 0.581139
366
-
367
- 0.682899 0.745610 0.787775
368
-
369
- 0.817980 0.840656 0.858298
370
-
371
- 0.872410 0.883954 0.893570
372
-
373
- 0.901703 0.908670 0.914705
374
-
375
- 0.919982 0.924635 0.928769
376
-
377
- 0.932464 0.935787 0.938791
378
-
379
- 0.941519 0.944008 0.946287
380
-
381
- 0.948382 0.950313 0.952099
382
-
383
- 0.953756 0.955296 0.956732
384
-
385
- 0.958074 0.959330 0.960508
386
-
387
- 0.961616 0.962658 0.963642
388
-
389
- 0.964570 0.965448 0.966280
390
-
391
- 0.967069 0.967818 0.968530
392
-
393
- 0.969208 0.969854 0.970469
394
-
395
- 0.971057 0.971619 0.972156
396
-
397
- 0.972670 0.973163 0.973635
398
-
399
- 0.974088 0.974523 0.974940
400
-
401
- 0.975342 0.975728 0.976100
402
-
403
- 0.976458 0.976803 0.977136
404
-
405
- 0.977457 0.977766 0.978065
406
-
407
- 0.978354 0.978633 0.978903
408
-
409
- 0.979164 0.979417 0.979661
410
-
411
- 0.979898 0.980127 0.980349
412
-
413
- 0.980565 0.980774 0.980976
414
-
415
- 0.981173 0.981364 0.981549
416
-
417
- 0.981729 0.981904 0.982073
418
-
419
- 0.982238 0.982399 0.982555
420
-
421
- 0.982707 0.982854 0.982998
422
-
423
- 0.983137 0.983273 0.983406
424
-
425
- 0.983535 0.983660 0.983783
426
-
427
- 0.983902 0.984018 0.984131
428
-
429
- 0.984241 0.984349 0.984453
430
-
431
- 0.984556 0.984655 0.984752
432
-
433
- 0.984847 0.984940 0.985030
434
-
435
- 0.985118 0.985204 0.985288
436
-
437
- 0.985369 0.985449 0.985527
438
-
439
- 0.985603 0.985678 0.985750
440
-
441
- 0.985821 0.985890 0.985957
442
-
443
- 0.986023 0.986088 0.986150
444
-
445
- 0.986212 0.986272 0.986330
446
-
447
- 0.986387 0.986443 0.986498
448
-
449
- 0.986551 0.986603 0.986653
450
-
451
- 0.986703 0.986751 0.986798
452
-
453
- 0.986844 0.986889 0.986933
454
-
455
- 0.986976 0.987018 0.987059
456
-
457
- 0.987099 0.987137 0.987175
458
-
459
- 0.987212 0.987248 0.987283
460
-
461
- 0.987318 0.987351 0.987384
462
-
463
- 0.987415 0.987446 0.987476
464
-
465
- 0.987506 0.987534 0.987562
466
-
467
- 0.987589 0.987615 0.987640
468
-
469
- 0.987665 0.987689 0.987713
470
-
471
- 0.987735 0.987757 0.987779
472
-
473
- 0.987799 0.987819 0.987839
474
-
475
- 0.987857 0.987875 0.987893
476
-
477
- 0.987910 0.987926 0.987942
478
-
479
- 0.987957 0.987971 0.987985
480
-
481
- 0.987998 0.988011 0.988023
482
-
483
- 0.988035 0.988046 0.988056
484
-
485
- 0.988066 0.988075 0.988084
486
-
487
- 0.988093 0.988100 0.988108
488
-
489
- 0.988114 0.988120 0.988126
490
-
491
- 0.988131 0.988136 0.988140
492
-
493
- 0.988144 0.988147 0.988149
494
-
495
- 0.988151 0.988153 0.988154
496
-
497
- 0.988154 0.988154 0.988154
498
-
499
- 0.988153 0.988151 0.988149
500
-
501
- 0.988147 0.988144 0.988140
502
-
503
- 0.988136 0.988131 0.988126
504
-
505
- 0.988120 0.988114 0.988108
506
-
507
- 0.988100 0.988093 0.988084
508
-
509
- 0.988075 0.988066 0.988056
510
-
511
- 0.988046 0.988035 0.988023
512
-
513
- 0.988011 0.987998 0.987985
514
-
515
- 0.987971 0.987957 0.987941
516
-
517
- 0.987926 0.987910 0.987893
518
-
519
- 0.987875 0.987857 0.987839
520
-
521
- 0.987819 0.987799 0.987779
522
-
523
- 0.987757 0.987735 0.987713
524
-
525
- 0.987689 0.987665 0.987640
526
-
527
- 0.987615 0.987589 0.987562
528
-
529
- 0.987534 0.987506 0.987476
530
-
531
- 0.987446 0.987415 0.987384
532
-
533
- 0.987351 0.987318 0.987283
534
-
535
- 0.987248 0.987212 0.987175
536
-
537
- 0.987137 0.987099 0.987059
538
-
539
- 0.987018 0.986976 0.986933
540
-
541
- 0.986889 0.986844 0.986798
542
-
543
- 0.986751 0.986703 0.986653
544
-
545
- 0.986603 0.986551 0.986498
546
-
547
- 0.986443 0.986387 0.986330
548
-
549
- 0.986272 0.986212 0.986150
550
-
551
- 0.986088 0.986023 0.985957
552
-
553
- 0.985890 0.985821 0.985750
554
-
555
- 0.985678 0.985603 0.985527
556
-
557
- 0.985449 0.985369 0.985288
558
-
559
- 0.985204 0.985118 0.985030
560
-
561
- 0.984940 0.984847 0.984752
562
-
563
- 0.984655 0.984556 0.984453
564
-
565
- ・・・(つづく)
401
+
402
+
403
+ ```gnuplot
404
+
405
+ #g-s_method.plt
406
+
407
+ cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
408
+
409
+
410
+
411
+ set pm3d
412
+
413
+ set pm3d map
414
+
415
+ set pm3d interpolate 5, 5
416
+
417
+ set ticslevel 0
418
+
419
+ set cbrange[0:1]
420
+
421
+ set xrange [0:200]
422
+
423
+ set yrange [100:0]
424
+
425
+ set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
426
+
427
+ splot 'g-s_result.dat' matrix
566
428
 
567
429
  ```
568
430
 
569
431
 
570
432
 
571
- ```plt
572
-
573
- #g-s_method.plt
574
-
575
- cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
576
-
577
-
578
-
579
- set pm3d
580
-
581
- set pm3d map
582
-
583
- set ticslevel 0
584
-
585
- set cbrange[0:1]
586
-
587
- set xrange [-2:2]
588
-
589
- set yrange [-1:1]
590
-
591
- set palette rgbformulae 15, 5, 7
592
-
593
- splot 'g-s_result.dat' with pm3d
594
-
595
- ```
596
-
597
-
598
-
599
433
  ### 補足情報(FW/ツールのバージョンなど)
600
434
 
601
435
  以下の環境で実施しております。

1

g-s_metod.pltの更新、描画結果の表示

2021/12/05 07:44

投稿

noukanokurashi
noukanokurashi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,14 @@
36
36
 
37
37
  ```
38
38
 
39
+ 追記
40
+
41
+ 描画結果
42
+
43
+ ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
44
+
45
+ 描画できるようにはなりましたが、直線になってしまいます。
46
+
39
47
 
40
48
 
41
49
  ### 試したこと
@@ -574,17 +582,11 @@
574
582
 
575
583
  set ticslevel 0
576
584
 
577
- set cbrange[-1:1]
585
+ set cbrange[0:1]
578
-
579
-
580
-
581
- #描画のx,y軸は以下の範囲で指定されております
586
+
582
-
583
- set xrange [0:2]
587
+ set xrange [-2:2]
584
-
588
+
585
- set yrange [1:0]
589
+ set yrange [-1:1]
586
-
587
-
588
590
 
589
591
  set palette rgbformulae 15, 5, 7
590
592