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

質問編集履歴

9

2022/01/13 01:19

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,158 +1,69 @@
1
- ### 前提・実現したいこと
2
- 温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
3
-
4
- ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
5
-
6
- その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
7
-
8
- ### 発生している問題・エラーメッセージ
9
- 現在つまづいていている点として、main_01.cの実行後に出力されるdat形式のファイルをgnuplotでpm3dを用いてsplotしても以下のようにグラフが全く表示されない点です。
10
- ![イメージ説明](de9fe11cc93958b27baa58d5384cff36.jpeg)
11
-
12
- またgnuplot上で以下のエラーが表示されます。
13
- ```
14
- Warning: Single isoline (scan) is not enough for a pm3d plot.
15
- Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
16
- ```
17
- ###追記1
18
- 描画結果1
19
- ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
20
- 描画できるようにはなりましたが、直線になってしまいます。
21
-
22
- ###追記2
23
- 描画結果2
24
- 配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
25
- ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
26
- 軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
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と表示するにはどうすればよいのでしょうか。
28
-
29
- ### 試したこと
30
- pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
31
-
32
- [参照サイト](http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/faq/faq-j.html#SECTION000510000000000000000)
33
- このサイトの
34
- > 3.10 pm3d によるデータファイルの splot で何も表示されません
35
-
36
- によるとdatファイルに2つのつながっている線 (孤立線) を分離する空行がないと描画できないとありましたが、今回私が作成しようとしているプログラムで出力されるdatファイルのどのタイミングで空行を入れるのかわかりません。つきましては、プログラムmain_01.cにてdatファイルを出力している箇所に適切な空行を入れる命令をご提示いただけますでしょうか。
37
- または、main_01.cのアルゴリズムが間違えていましたら、ご指摘いただければ幸いです。
38
-
39
- かれこれ4時間以上考えたり、インターネットで調べてみましたが解決できませんでした。よろしくお願いいたします。
40
- ### 該当のソースコード
41
-
42
- ```C
43
- //main_01.c
44
- //G-S法
45
- #define _CRT_SECURE_NO_WARNINGS
46
- #include <stdio.h>
47
- #include <stdlib.h>
48
- #include <math.h>
49
-
50
- //#define dt (0.01) //格子間隔
51
-
52
- #define N (100) // 1/dt
53
- #define M (200) // 2/dt
54
-
55
- #define cycle (50000) //サイクル数
56
- #define eps (pow(10,-12)) //収束判定
57
-
58
- int main(void)
59
- {
60
- //datファイルに書き込む
61
- FILE* fp1;
62
- double* file1 = "g-s_result.dat";
63
- fp1 = fopen(file1, "w");
64
- if (fp1 == NULL)
65
- {
66
- printf("%f file cannot open!\n", file1);
67
- return -1;
68
- }
69
-
70
- //列番号を挿入
71
- double num = 2.0;
72
- fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
73
- for (int i = 0; i < M; i++)
74
- {
75
- fprintf(fp1, "%6.6f\t", num);
76
- num -= dt;
77
- }
78
- fprintf(fp1, "\n");
79
- num = 0.0; //初期化
80
-
81
- //配列を書き込む
82
- for (int i = 0; i < N; i++)
83
- {
84
- num += dt;
85
- fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
86
- for (int j = 0; j < M; j++)
87
- {
88
- fprintf(fp1, "%6.6f\t", a[i][j]);
89
- }
90
- fprintf(fp1, "\n"); //1行終えたので改行
91
- }
92
- fclose(fp1);
93
- //int tmp_count = 0;
94
- //int prev = 0, cur = 0;
95
- //double data[3];
96
- //for (int i = 1; i < N - 1; i++)
97
- //{
98
- // for (int j = 1; j < M - 1; j++)
99
- // {
100
- // data[tmp_count] = a[i][j];
101
- // tmp_count++;
102
- // if (tmp_count == 3)
103
- // {
104
- // // 有効数字の桁数
105
- // cur = (int)(data[0] * 10);
106
- // // 前の行の値と異なる場合は改行を出力
107
- // if (cur != prev) fprintf(fp1, "\n");
108
- // fprintf(fp1, "%6.6f\t%6.6f\t%6.6f\t\n", data[0], data[1], data[2]);
109
- // tmp_count = 0;
110
- // prev = cur;
111
- // }
112
- // }
113
- //}
114
- //fclose(fp1);
115
-
116
- free(a);
117
- free(tmp_a);
118
-
119
- return 0;
120
- }
121
- ```
122
-
123
- ```dat
124
- //文字数overのため省略
125
- 配列列数 0.01 0.02 ・・・
126
- 0.01
127
- 0.02
128
-
129
-
130
-
131
- ```
132
-
133
- ```gnuplot
134
- cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
135
-
136
- set pm3d
137
- set pm3d map
138
- set pm3d interpolate 5, 5
139
- set ticslevel 0
140
- #set cbrange[0:1]
141
- #set xrange [0:200]
142
- #set yrange [100:0]
143
- set autoscale xfix
144
- set autoscale yfix
145
- set yrange [] reverse
146
- set autoscale cbfix
147
- set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
148
- splot 'g-s_result.dat' matrix nonuniform
149
- ```
150
-
151
- ###最終結果
152
- ![イメージ説明](057b31044db6c57742507882b21761e2.jpeg)
153
-
154
- ### 補足情報(FW/ツールのバージョンなど)
155
- 以下の環境で実施しております。
156
- Visual Studio 2019 (C言語の実行環境)
157
- Visual Studio Code
1
+ ### 前提・実現したいこと
2
+ 温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
3
+
4
+ ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
5
+
6
+ その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
7
+
8
+ ### 発生している問題・エラーメッセージ
9
+ 現在つまづいていている点として、main_01.cの実行後に出力されるdat形式のファイルをgnuplotでpm3dを用いてsplotしても以下のようにグラフが全く表示されない点です。
10
+ ![イメージ説明](de9fe11cc93958b27baa58d5384cff36.jpeg)
11
+
12
+ またgnuplot上で以下のエラーが表示されます。
13
+ ```
14
+ Warning: Single isoline (scan) is not enough for a pm3d plot.
15
+ Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
16
+ ```
17
+ ###追記1
18
+ 描画結果1
19
+ ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
20
+ 描画できるようにはなりましたが、直線になってしまいます。
21
+
22
+ ###追記2
23
+ 描画結果2
24
+ 配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
25
+ ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
26
+ 軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
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と表示するにはどうすればよいのでしょうか。
28
+
29
+ ### 試したこと
30
+ pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
31
+
32
+ [参照サイト](http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/faq/faq-j.html#SECTION000510000000000000000)
33
+ このサイトの
34
+ > 3.10 pm3d によるデータファイルの splot で何も表示されません
35
+
36
+ によるとdatファイルに2つのつながっている線 (孤立線) を分離する空行がないと描画できないとありましたが、今回私が作成しようとしているプログラムで出力されるdatファイルのどのタイミングで空行を入れるのかわかりません。つきましては、プログラムmain_01.cにてdatファイルを出力している箇所に適切な空行を入れる命令をご提示いただけますでしょうか。
37
+ または、main_01.cのアルゴリズムが間違えていましたら、ご指摘いただければ幸いです。
38
+
39
+ かれこれ4時間以上考えたり、インターネットで調べてみましたが解決できませんでした。よろしくお願いいたします。
40
+ ### 該当のソースコード
41
+
42
+
43
+
44
+ ```gnuplot
45
+ cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
46
+
47
+ set pm3d
48
+ set pm3d map
49
+ set pm3d interpolate 5, 5
50
+ set ticslevel 0
51
+ #set cbrange[0:1]
52
+ #set xrange [0:200]
53
+ #set yrange [100:0]
54
+ set autoscale xfix
55
+ set autoscale yfix
56
+ set yrange [] reverse
57
+ set autoscale cbfix
58
+ set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
59
+ splot 'g-s_result.dat' matrix nonuniform
60
+ ```
61
+
62
+ ###最終結果
63
+ ![イメージ説明](057b31044db6c57742507882b21761e2.jpeg)
64
+
65
+ ### 補足情報(FW/ツールのバージョンなど)
66
+ 以下の環境で実施しております。
67
+ Visual Studio 2019 (C言語の実行環境)
68
+ Visual Studio Code
158
69
  gnuplot 5.4(グラフ描画ソフト)

8

プログラムの修正

2021/12/12 01:20

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -57,98 +57,6 @@
57
57
 
58
58
  int main(void)
59
59
  {
60
- //double型の2次元配列 N行M列の行列
61
- double** a;
62
- a = (double**)malloc(sizeof(double*) * N);
63
- for (int i = 0; i < N; i++) {
64
- a[i] = (double*)malloc(sizeof(double) * M);
65
- //N個の各配列がM個の要素を持つイメージ
66
- }
67
- double** tmp_a;
68
- tmp_a = (double**)malloc(sizeof(double*) * N);
69
- for (int i = 0; i < N; i++) {
70
- tmp_a[i] = (double*)malloc(sizeof(double) * M);
71
- //N個の各配列がM個の要素を持つイメージ
72
- }
73
-
74
- //まず、すべての要素を0で初期化
75
- for (int i = 0; i < N; i++)
76
- {
77
- for (int j = 0; j < M; j++)
78
- {
79
- a[i][j] = 0.0;
80
- }
81
- }
82
-
83
- //0行目の要素はすべて1で初期化
84
- for (int j = 0; j < M; j++)
85
- {
86
- a[0][j] = 1.0;
87
- }
88
-
89
- //1行目からi-1行目までの0列目の要素は-1で初期化
90
- for (int i = 1; i < N - 1; i++)
91
- {
92
- a[i][0] = -1.0;
93
- }
94
-
95
- //1行目からi-1行目までのj列目の要素は-1で初期化
96
- for (int i = 1; i < N - 1; i++)
97
- {
98
- a[i][M - 1] = -1.0;
99
- }
100
-
101
- //i行目の要素はすべて-1で初期化
102
- for (int j = 0; j < M; j++)
103
- {
104
- a[N - 1][j] = -1.0;
105
- }
106
-
107
-
108
- /*G-S法*/
109
- int count = 0;
110
- while (count != cycle)
111
- {
112
- //aの配列の中身をtmp_a配列にコピー
113
- for (int i = 0; i < N; i++)
114
- {
115
- for (int j = 0; j < M; j++)
116
- {
117
- tmp_a[i][j] = a[i][j];
118
- }
119
- }
120
- //G-S法による計算
121
- for (int i = 1; i < N - 1; i++)
122
- {
123
- for (int j = 1; j < M - 1; j++)
124
- {
125
- a[i][j] = (a[i - 1][j] + a[i][j + 1] + a[i + 1][j] + a[i][j - 1]) / 4;
126
- }
127
- }
128
- //収束したか否かの判定
129
- double error = fabs(a[1][1] - tmp_a[1][1]);
130
- double tmp_error = 0.0;
131
- double sum_error = 0.0;
132
- for (int i = 1; i < N - 1; i++) {
133
- for (int j = 1; j < M - 1; j++) {
134
- tmp_error = fabs(a[i][j] - tmp_a[i][j]);
135
- if (tmp_error > error)
136
- error = tmp_error;
137
- sum_error += error;
138
- }
139
- }
140
- //errorの合計/N*M<eps
141
- error = sum_error / (N * M);
142
- if (error < eps)
143
- {
144
- printf("%dサイクル目で収束\n", count);
145
- break;
146
- }
147
- count++;
148
- }
149
-
150
-
151
-
152
60
  //datファイルに書き込む
153
61
  FILE* fp1;
154
62
  double* file1 = "g-s_result.dat";

7

誤字の修正

2021/12/12 01:20

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -15,12 +15,13 @@
15
15
  Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
16
16
  ```
17
17
  ###追記1
18
- 描画結果
18
+ 描画結果1
19
19
  ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
20
20
  描画できるようにはなりましたが、直線になってしまいます。
21
21
 
22
22
  ###追記2
23
23
  描画結果2
24
+ 配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
24
25
  ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
25
26
  軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
26
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と表示するにはどうすればよいのでしょうか。

6

datの追加

2021/12/07 11:49

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -211,6 +211,16 @@
211
211
  }
212
212
  ```
213
213
 
214
+ ```dat
215
+ //文字数overのため省略
216
+ 配列列数 0.01 0.02 ・・・
217
+ 0.01
218
+ 0.02
219
+
220
+
221
+
222
+ ```
223
+
214
224
  ```gnuplot
215
225
  cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
216
226
 

5

結果の追加

2021/12/07 11:12

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -230,8 +230,8 @@
230
230
  ```
231
231
 
232
232
  ###最終結果
233
+ ![イメージ説明](057b31044db6c57742507882b21761e2.jpeg)
233
234
 
234
-
235
235
  ### 補足情報(FW/ツールのバージョンなど)
236
236
  以下の環境で実施しております。
237
237
  Visual Studio 2019 (C言語の実行環境)

4

ソースコードの変更

2021/12/07 11:05

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,9 @@
1
1
  ### 前提・実現したいこと
2
2
  温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
3
3
 
4
- 下の画像のようにガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
4
+ ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
5
- ![イメージ説明](b61112670ebca1d7d4a515a029b3c30a.jpeg)
6
5
 
7
- その数値計算を行った後にその行列の内側部(グレー部)の行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで以下のような温度分布のグラフを描画します。(g-s_method.pltを参照)この画像の行列はあくまでも例であり、実際の行列サイズは大きいです。
6
+ その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
8
- ![イメージ説明](6e7aa0e7e5007b085589895038aa6d87.jpeg)
9
- このグラフは見本のグラフです。
10
7
 
11
8
  ### 発生している問題・エラーメッセージ
12
9
  現在つまづいていている点として、main_01.cの実行後に出力されるdat形式のファイルをgnuplotでpm3dを用いてsplotしても以下のようにグラフが全く表示されない点です。
@@ -161,8 +158,22 @@
161
158
  return -1;
162
159
  }
163
160
 
161
+ //列番号を挿入
162
+ double num = 2.0;
163
+ fprintf(fp1, "%d\t", M); //一番左上はデータの列数Mを書き込む
164
+ for (int i = 0; i < M; i++)
165
+ {
166
+ fprintf(fp1, "%6.6f\t", num);
167
+ num -= dt;
168
+ }
169
+ fprintf(fp1, "\n");
170
+ num = 0.0; //初期化
171
+
172
+ //配列を書き込む
164
173
  for (int i = 0; i < N; i++)
165
174
  {
175
+ num += dt;
176
+ fprintf(fp1, "%6.6f\t", num); //行頭に行番号を挿入
166
177
  for (int j = 0; j < M; j++)
167
178
  {
168
179
  fprintf(fp1, "%6.6f\t", a[i][j]);
@@ -201,21 +212,28 @@
201
212
  ```
202
213
 
203
214
  ```gnuplot
204
- #g-s_method.plt
205
215
  cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
206
216
 
207
217
  set pm3d
208
218
  set pm3d map
209
219
  set pm3d interpolate 5, 5
210
220
  set ticslevel 0
211
- set cbrange[0:1]
221
+ #set cbrange[0:1]
212
- set xrange [0:200]
222
+ #set xrange [0:200]
213
- set yrange [100:0]
223
+ #set yrange [100:0]
224
+ set autoscale xfix
225
+ set autoscale yfix
226
+ set yrange [] reverse
227
+ set autoscale cbfix
214
228
  set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
215
- splot 'g-s_result.dat' matrix
229
+ splot 'g-s_result.dat' matrix nonuniform
216
230
  ```
217
231
 
232
+ ###最終結果
233
+
234
+
218
235
  ### 補足情報(FW/ツールのバージョンなど)
219
236
  以下の環境で実施しております。
220
237
  Visual Studio 2019 (C言語の実行環境)
238
+ Visual Studio Code
221
239
  gnuplot 5.4(グラフ描画ソフト)

3

追記2

2021/12/07 11:02

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -26,6 +26,7 @@
26
26
  描画結果2
27
27
  ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
28
28
  軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
29
+ 軸の範囲が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と表示するにはどうすればよいのでしょうか。
29
30
 
30
31
  ### 試したこと
31
32
  pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。

2

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

2021/12/05 07:47

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -17,11 +17,16 @@
17
17
  Warning: Single isoline (scan) is not enough for a pm3d plot.
18
18
  Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
19
19
  ```
20
- 追記
20
+ ###追記1
21
21
  描画結果
22
22
  ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
23
23
  描画できるようにはなりましたが、直線になってしまいます。
24
24
 
25
+ ###追記2
26
+ 描画結果2
27
+ ![イメージ説明](998dc7155b217d47101061653dd60881.jpeg)
28
+ 軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
29
+
25
30
  ### 試したこと
26
31
  pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
27
32
 
@@ -43,10 +48,10 @@
43
48
  #include <stdlib.h>
44
49
  #include <math.h>
45
50
 
46
- //#define dt (0.005)
51
+ //#define dt (0.01) //格子間隔
47
52
 
48
- #define N (200) // 1/dt
53
+ #define N (100) // 1/dt
49
- #define M (400) // 2/dt
54
+ #define M (200) // 2/dt
50
55
 
51
56
  #define cycle (50000) //サイクル数
52
57
  #define eps (pow(10,-12)) //収束判定
@@ -155,146 +160,58 @@
155
160
  return -1;
156
161
  }
157
162
 
158
- int tmp_count = 0;
159
- for (int i = 1; i < N - 1; i++)
163
+ for (int i = 0; i < N; i++)
160
164
  {
161
- for (int j = 1; j < M - 1; j++)
165
+ for (int j = 0; j < M; j++)
162
166
  {
163
- fprintf(fp1,"%6.6f\t", a[i][j]);
167
+ fprintf(fp1, "%6.6f\t", a[i][j]);
164
- tmp_count++;
165
- if (tmp_count == 3)//3つ値を書き込んだら改行
166
- {
167
- tmp_count = 0;
168
- fprintf(fp1,"\n");
169
- }
170
168
  }
169
+ fprintf(fp1, "\n"); //1行終えたので改行
171
170
  }
172
171
  fclose(fp1);
172
+ //int tmp_count = 0;
173
+ //int prev = 0, cur = 0;
174
+ //double data[3];
175
+ //for (int i = 1; i < N - 1; i++)
176
+ //{
177
+ // for (int j = 1; j < M - 1; j++)
178
+ // {
179
+ // data[tmp_count] = a[i][j];
180
+ // tmp_count++;
181
+ // if (tmp_count == 3)
182
+ // {
183
+ // // 有効数字の桁数
184
+ // cur = (int)(data[0] * 10);
185
+ // // 前の行の値と異なる場合は改行を出力
186
+ // if (cur != prev) fprintf(fp1, "\n");
187
+ // fprintf(fp1, "%6.6f\t%6.6f\t%6.6f\t\n", data[0], data[1], data[2]);
188
+ // tmp_count = 0;
189
+ // prev = cur;
190
+ // }
191
+ // }
192
+ //}
193
+ //fclose(fp1);
173
194
 
174
-
175
195
  free(a);
176
196
  free(tmp_a);
177
197
 
178
198
  return 0;
179
199
  }
180
200
  ```
181
- ```dat
182
- //g-s_result.dat
183
- -0.000028 0.395250 0.581139
184
- 0.682899 0.745610 0.787775
185
- 0.817980 0.840656 0.858298
186
- 0.872410 0.883954 0.893570
187
- 0.901703 0.908670 0.914705
188
- 0.919982 0.924635 0.928769
189
- 0.932464 0.935787 0.938791
190
- 0.941519 0.944008 0.946287
191
- 0.948382 0.950313 0.952099
192
- 0.953756 0.955296 0.956732
193
- 0.958074 0.959330 0.960508
194
- 0.961616 0.962658 0.963642
195
- 0.964570 0.965448 0.966280
196
- 0.967069 0.967818 0.968530
197
- 0.969208 0.969854 0.970469
198
- 0.971057 0.971619 0.972156
199
- 0.972670 0.973163 0.973635
200
- 0.974088 0.974523 0.974940
201
- 0.975342 0.975728 0.976100
202
- 0.976458 0.976803 0.977136
203
- 0.977457 0.977766 0.978065
204
- 0.978354 0.978633 0.978903
205
- 0.979164 0.979417 0.979661
206
- 0.979898 0.980127 0.980349
207
- 0.980565 0.980774 0.980976
208
- 0.981173 0.981364 0.981549
209
- 0.981729 0.981904 0.982073
210
- 0.982238 0.982399 0.982555
211
- 0.982707 0.982854 0.982998
212
- 0.983137 0.983273 0.983406
213
- 0.983535 0.983660 0.983783
214
- 0.983902 0.984018 0.984131
215
- 0.984241 0.984349 0.984453
216
- 0.984556 0.984655 0.984752
217
- 0.984847 0.984940 0.985030
218
- 0.985118 0.985204 0.985288
219
- 0.985369 0.985449 0.985527
220
- 0.985603 0.985678 0.985750
221
- 0.985821 0.985890 0.985957
222
- 0.986023 0.986088 0.986150
223
- 0.986212 0.986272 0.986330
224
- 0.986387 0.986443 0.986498
225
- 0.986551 0.986603 0.986653
226
- 0.986703 0.986751 0.986798
227
- 0.986844 0.986889 0.986933
228
- 0.986976 0.987018 0.987059
229
- 0.987099 0.987137 0.987175
230
- 0.987212 0.987248 0.987283
231
- 0.987318 0.987351 0.987384
232
- 0.987415 0.987446 0.987476
233
- 0.987506 0.987534 0.987562
234
- 0.987589 0.987615 0.987640
235
- 0.987665 0.987689 0.987713
236
- 0.987735 0.987757 0.987779
237
- 0.987799 0.987819 0.987839
238
- 0.987857 0.987875 0.987893
239
- 0.987910 0.987926 0.987942
240
- 0.987957 0.987971 0.987985
241
- 0.987998 0.988011 0.988023
242
- 0.988035 0.988046 0.988056
243
- 0.988066 0.988075 0.988084
244
- 0.988093 0.988100 0.988108
245
- 0.988114 0.988120 0.988126
246
- 0.988131 0.988136 0.988140
247
- 0.988144 0.988147 0.988149
248
- 0.988151 0.988153 0.988154
249
- 0.988154 0.988154 0.988154
250
- 0.988153 0.988151 0.988149
251
- 0.988147 0.988144 0.988140
252
- 0.988136 0.988131 0.988126
253
- 0.988120 0.988114 0.988108
254
- 0.988100 0.988093 0.988084
255
- 0.988075 0.988066 0.988056
256
- 0.988046 0.988035 0.988023
257
- 0.988011 0.987998 0.987985
258
- 0.987971 0.987957 0.987941
259
- 0.987926 0.987910 0.987893
260
- 0.987875 0.987857 0.987839
261
- 0.987819 0.987799 0.987779
262
- 0.987757 0.987735 0.987713
263
- 0.987689 0.987665 0.987640
264
- 0.987615 0.987589 0.987562
265
- 0.987534 0.987506 0.987476
266
- 0.987446 0.987415 0.987384
267
- 0.987351 0.987318 0.987283
268
- 0.987248 0.987212 0.987175
269
- 0.987137 0.987099 0.987059
270
- 0.987018 0.986976 0.986933
271
- 0.986889 0.986844 0.986798
272
- 0.986751 0.986703 0.986653
273
- 0.986603 0.986551 0.986498
274
- 0.986443 0.986387 0.986330
275
- 0.986272 0.986212 0.986150
276
- 0.986088 0.986023 0.985957
277
- 0.985890 0.985821 0.985750
278
- 0.985678 0.985603 0.985527
279
- 0.985449 0.985369 0.985288
280
- 0.985204 0.985118 0.985030
281
- 0.984940 0.984847 0.984752
282
- 0.984655 0.984556 0.984453
283
- ・・・(つづく)
284
- ```
285
201
 
286
- ```plt
202
+ ```gnuplot
287
203
  #g-s_method.plt
288
204
  cd 'C:\Users\%USERNAME%\Desktop\gnuplot'
289
205
 
290
206
  set pm3d
291
207
  set pm3d map
208
+ set pm3d interpolate 5, 5
292
209
  set ticslevel 0
293
210
  set cbrange[0:1]
294
- set xrange [-2:2]
211
+ set xrange [0:200]
295
- set yrange [-1:1]
212
+ set yrange [100:0]
296
- set palette rgbformulae 15, 5, 7
213
+ set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
297
- splot 'g-s_result.dat' with pm3d
214
+ splot 'g-s_result.dat' matrix
298
215
  ```
299
216
 
300
217
  ### 補足情報(FW/ツールのバージョンなど)

1

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

2021/12/05 07:44

投稿

noukanokurashi
noukanokurashi

スコア4

title CHANGED
File without changes
body CHANGED
@@ -17,6 +17,10 @@
17
17
  Warning: Single isoline (scan) is not enough for a pm3d plot.
18
18
  Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
19
19
  ```
20
+ 追記
21
+ 描画結果
22
+ ![イメージ説明](d8bc8fe43f3cd4d5d85acdb27cf1dbd6.jpeg)
23
+ 描画できるようにはなりましたが、直線になってしまいます。
20
24
 
21
25
  ### 試したこと
22
26
  pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
@@ -286,12 +290,9 @@
286
290
  set pm3d
287
291
  set pm3d map
288
292
  set ticslevel 0
289
- set cbrange[-1:1]
293
+ set cbrange[0:1]
290
-
291
- #描画のx,y軸は以下の範囲で指定されております
292
- set xrange [0:2]
294
+ set xrange [-2:2]
293
- set yrange [1:0]
295
+ set yrange [-1:1]
294
-
295
296
  set palette rgbformulae 15, 5, 7
296
297
  splot 'g-s_result.dat' with pm3d
297
298
  ```