質問編集履歴
9
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
|
-

|
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
|
-

|
20
|
-
描画できるようにはなりましたが、直線になってしまいます。
|
21
|
-
|
22
|
-
###追記2
|
23
|
-
描画結果2
|
24
|
-
配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
|
25
|
-

|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
#
|
53
|
-
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-

|
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
|
+

|
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
|
+

|
20
|
+
描画できるようにはなりましたが、直線になってしまいます。
|
21
|
+
|
22
|
+
###追記2
|
23
|
+
描画結果2
|
24
|
+
配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
|
25
|
+

|
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
|
+

|
64
|
+
|
65
|
+
### 補足情報(FW/ツールのバージョンなど)
|
66
|
+
以下の環境で実施しております。
|
67
|
+
Visual Studio 2019 (C言語の実行環境)
|
68
|
+
Visual Studio Code
|
158
69
|
gnuplot 5.4(グラフ描画ソフト)
|
8
プログラムの修正
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
誤字の修正
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
|

|
20
20
|
描画できるようにはなりましたが、直線になってしまいます。
|
21
21
|
|
22
22
|
###追記2
|
23
23
|
描画結果2
|
24
|
+
配列の描画なので`splot 'XXX.dat' matrix`とすれば描画できる。
|
24
25
|

|
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の追加
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
結果の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -230,8 +230,8 @@
|
|
230
230
|
```
|
231
231
|
|
232
232
|
###最終結果
|
233
|
+

|
233
234
|
|
234
|
-
|
235
235
|
### 補足情報(FW/ツールのバージョンなど)
|
236
236
|
以下の環境で実施しております。
|
237
237
|
Visual Studio 2019 (C言語の実行環境)
|
4
ソースコードの変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
|
3
3
|
|
4
|
-
|
4
|
+
ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
|
5
|
-

|
6
5
|
|
7
|
-
その数値計算を行った後にその行列
|
6
|
+
その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
|
8
|
-

|
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
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,6 +26,7 @@
|
|
26
26
|
描画結果2
|
27
27
|

|
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
描画結果の追加、プログラムの更新
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
|

|
23
23
|
描画できるようにはなりましたが、直線になってしまいます。
|
24
24
|
|
25
|
+
###追記2
|
26
|
+
描画結果2
|
27
|
+

|
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.
|
51
|
+
//#define dt (0.01) //格子間隔
|
47
52
|
|
48
|
-
#define N (
|
53
|
+
#define N (100) // 1/dt
|
49
|
-
#define M (
|
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 =
|
163
|
+
for (int i = 0; i < N; i++)
|
160
164
|
{
|
161
|
-
for (int 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
|
-
```
|
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 [
|
211
|
+
set xrange [0:200]
|
295
|
-
set yrange [
|
212
|
+
set yrange [100:0]
|
296
|
-
set palette
|
213
|
+
set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
|
297
|
-
splot 'g-s_result.dat'
|
214
|
+
splot 'g-s_result.dat' matrix
|
298
215
|
```
|
299
216
|
|
300
217
|
### 補足情報(FW/ツールのバージョンなど)
|
1
g-s_metod.pltの更新、描画結果の表示
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
|
+

|
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[
|
293
|
+
set cbrange[0:1]
|
290
|
-
|
291
|
-
#描画のx,y軸は以下の範囲で指定されております
|
292
|
-
set xrange [
|
294
|
+
set xrange [-2:2]
|
293
|
-
set yrange [1:
|
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
|
```
|