質問編集履歴

3

誤字の訂正

2021/11/02 06:08

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- パラメーターが不明です
1
+ ファイルの書き出しについて教えて頂きたいです。 C++言語
test CHANGED
@@ -1,173 +1,17 @@
1
+ ファイルの書き出しは、計算結果を一つずつファイルに書き出すことは出来ると思いますが、
2
+
1
- ### gnuplotで3次元表示させたい
3
+ 計算を100毎や計算途中ものファイルに書き出すことはできますでしょうか。
2
4
 
3
5
 
4
6
 
5
- フィッツヒュー南雲方程式の3次元で図を表示させたいです。
7
+
6
8
 
7
- C++言語使用しています。
9
+ 0番目の計算結果1つ目のファイルに書き出す。
8
10
 
11
+ (この次は普通だと1番目の計算結果が2つ目のファイルに書き出されるはずです)
12
+
9
- エラーはていませんが、うまく表示されません
13
+ 100番目の計算結果を2つ目のファイルに書き
10
14
 
11
15
 
12
16
 
13
- 結果は1つずつファイルに入れるようにしています
14
-
15
-
16
-
17
- 以下が作成したプログラムです。
18
-
19
-
20
-
21
- パラメーターの数値をいくつにすればうまく表示されますでしょうか。
22
-
23
-
24
-
25
- ```C++
26
-
27
- #include <iostream>
28
-
29
- #include <stdio.h>
30
-
31
- #include <math.h>
32
-
33
- #include <fstream>
34
-
35
-
36
-
37
- int main(void){
38
-
39
-
40
-
41
- int i = 0;
42
-
43
- int j = 0;
44
-
45
- double u[ 11 ][ 11 ];
46
-
47
- double u_next[ 11 ][ 11 ];
48
-
49
- double v[ 11 ][ 11 ];
50
-
51
- double v_next[ 11 ][ 11 ];
52
-
53
- int i_max = 10;
54
-
55
- int j_max = 10;
56
-
57
- double t = 0;
58
-
59
- double t_max = 0.1;
60
-
61
- double h = 0.1;
62
-
63
- double d_u = 0.1;
64
-
65
- double d_v = 0.1;
66
-
67
- double a = 0.5; //alpha
68
-
69
- double b = 0.8; //beta
70
-
71
- double g = -0.7; //gamma
72
-
73
- double e = 0.08; //epsilon
74
-
75
- double d_t =0.005;
76
-
77
-
78
-
79
- int sampling = 10;
80
-
81
- int filenumber;
82
-
83
- filenumber = 0;
84
-
85
- char filename[256];
86
-
87
- int tcount;
88
-
89
- tcount = 0;
90
-
91
-
92
-
93
- for( i = 0; i < i_max; i++ ){
94
-
95
- for( j = 0; j < j_max; j++ ){
96
-
97
- u[ 5 ][ 5 ] = 0.7;
98
-
99
- u[ i ][ j ] = u_next[ i ][ j ] = 0.0;
100
-
101
- v[ i ][ j ] = v_next[ i ][ j ] = 0.0; } }
102
-
103
-
104
-
105
- for(i = 0; i < i_max; i++){
106
-
107
- u[ i ][ 0 ] = u_next[ i ][ 0 ] = 0.0;
108
-
109
- u[ 0 ][ i ] = u_next[ 0 ][ i ] = 0.0;
110
-
111
- u[ i ][ 9 ] = u_next[ i ][ 9 ] = 0.0;
112
-
113
- u[ 9 ][ i ] = u_next[ 9 ][ i ] = 0.0; }
114
-
115
-
116
-
117
- for( t = 0; t < t_max; t = t + d_t ){
118
-
119
- tcount++;
120
-
121
- if(tcount % sampling == sampling - 1){
122
-
123
- sprintf(filename, "output%04d.dat", filenumber );
124
-
125
- std::ofstream fos(filename);
126
-
127
-
128
-
129
- for( i = 1; i < i_max-1; i++ ){
130
-
131
- for( j = 1; j < j_max-1; j++ ){
132
-
133
-
134
-
135
- u_next[ i ][ j ] = u[ i ][ j ] + ((d_t * d_u) / ( h * h )) * (u[ i + 1 ][ j ] + u[ i - 1 ][ j ] + u[ i ][ j + 1 ] + u[ i ][ j - 1 ] - 4*u[ i ][ j ]) + d_t*(u[ i ][ j ]*(u[ i ][ j ] - a)*(1 - u[ i ][ j ] - v[ i ][ j ]) );
136
-
137
-
138
-
139
- v_next[ i ][ j ] = v[ i ][ j ] + ((d_t * d_v) / ( h * h )) * (v[ i + 1 ][ j ] + v[ i - 1 ][ j ] + v[ i ][ j + 1 ] + v[ i ][ j - 1 ] - 4*v[ i ][ j ]) + d_t*(e*(u[ i ][ j ]*b*v[ i ][ j ] + g)); } }
140
-
141
-
142
-
143
- for( i = 0; i < i_max; i++ ){
144
-
145
- for( j = 0; j < j_max; j++ ){
146
-
147
- u[ i ][ j ] = u_next[ i ][ j ];
148
-
149
- v[ i ][ j ] = v_next[ i ][ j ]; } }
150
-
151
-
152
-
153
- for( i = 0; i < i_max; i++ ){
154
-
155
- for( j = 0; j < j_max; j++ ){
156
-
157
- fos << i << " " << j << " " << u[ i ][ j ] <<"\n";
158
-
159
- fos << i << " " << j << " " << v[ i ][ j ] <<"\n"; } }
160
-
161
-
162
-
163
- filenumber++;
164
-
165
- }
166
-
167
- }
168
-
169
- std::cout <<"\n";
170
-
171
- }
172
-
173
- ```
17
+ 上記の例のようにC++でプログラムを書くことは可能でょうか

2

t_maxとgの値を修正しました。

2021/11/02 06:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
  double t = 0;
58
58
 
59
- double t_max = 200;
59
+ double t_max = 0.1;
60
60
 
61
61
  double h = 0.1;
62
62
 
@@ -68,7 +68,7 @@
68
68
 
69
69
  double b = 0.8; //beta
70
70
 
71
- double g = 0.-0.7; //gamma
71
+ double g = -0.7; //gamma
72
72
 
73
73
  double e = 0.08; //epsilon
74
74
 

1

コードを入れ直しました

2021/10/01 06:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,12 @@
17
17
  以下が作成したプログラムです。
18
18
 
19
19
 
20
+
21
+ パラメーターの数値をいくつにすればうまく表示されますでしょうか。
22
+
23
+
24
+
25
+ ```C++
20
26
 
21
27
  #include <iostream>
22
28
 
@@ -163,3 +169,5 @@
163
169
  std::cout <<"\n";
164
170
 
165
171
  }
172
+
173
+ ```