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

質問編集履歴

3

誤字の訂正

2021/11/02 06:08

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- パラメーターが不明です
1
+ ファイルの書き出しについて教えて頂きたいです。 C++言語
body CHANGED
@@ -1,87 +1,9 @@
1
+ ファイルの書き出しは、計算結果を一つずつファイルに書き出すことは出来ると思いますが、
1
- ### gnuplotで3次元表示させたい
2
+ 計算を100毎や計算途中ものファイルに書き出すことはできますでしょうか。
2
3
 
3
- フィッツヒュー南雲方程式の3次元で図を表示させたいです。
4
- C++言語を使用しています。
4
+
5
- エラーはていませんが、うまく表示されません
5
+ 0番目の計算結果を1つ目のファイルに書き
6
+ (この次は普通だと1番目の計算結果が2つ目のファイルに書き出されるはずです)
7
+ 100番目の計算結果を2つ目のファイルに書き出す。
6
8
 
7
- 結果は1つずつファイルに入れるようにしています
8
-
9
- 以下が作成したプログラムです。
10
-
11
- パラメーターの数値をいくつにすればうまく表示されますでしょうか。
12
-
13
- ```C++
14
- #include <iostream>
15
- #include <stdio.h>
16
- #include <math.h>
17
- #include <fstream>
18
-
19
- int main(void){
20
-
21
- int i = 0;
22
- int j = 0;
23
- double u[ 11 ][ 11 ];
24
- double u_next[ 11 ][ 11 ];
25
- double v[ 11 ][ 11 ];
26
- double v_next[ 11 ][ 11 ];
27
- int i_max = 10;
28
- int j_max = 10;
29
- double t = 0;
30
- double t_max = 0.1;
31
- double h = 0.1;
32
- double d_u = 0.1;
33
- double d_v = 0.1;
34
- double a = 0.5; //alpha
35
- double b = 0.8; //beta
36
- double g = -0.7; //gamma
37
- double e = 0.08; //epsilon
38
- double d_t =0.005;
39
-
40
- int sampling = 10;
41
- int filenumber;
42
- filenumber = 0;
43
- char filename[256];
44
- int tcount;
45
- tcount = 0;
46
-
47
- for( i = 0; i < i_max; i++ ){
48
- for( j = 0; j < j_max; j++ ){
49
- u[ 5 ][ 5 ] = 0.7;
50
- u[ i ][ j ] = u_next[ i ][ j ] = 0.0;
51
- v[ i ][ j ] = v_next[ i ][ j ] = 0.0; } }
52
-
53
- for(i = 0; i < i_max; i++){
54
- u[ i ][ 0 ] = u_next[ i ][ 0 ] = 0.0;
55
- u[ 0 ][ i ] = u_next[ 0 ][ i ] = 0.0;
56
- u[ i ][ 9 ] = u_next[ i ][ 9 ] = 0.0;
57
- u[ 9 ][ i ] = u_next[ 9 ][ i ] = 0.0; }
58
-
59
- for( t = 0; t < t_max; t = t + d_t ){
60
- tcount++;
61
- if(tcount % sampling == sampling - 1){
62
- sprintf(filename, "output%04d.dat", filenumber );
63
- std::ofstream fos(filename);
64
-
65
- for( i = 1; i < i_max-1; i++ ){
66
- for( j = 1; j < j_max-1; j++ ){
67
-
68
- 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 ]) );
69
-
70
- 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)); } }
71
-
72
- for( i = 0; i < i_max; i++ ){
73
- for( j = 0; j < j_max; j++ ){
74
- u[ i ][ j ] = u_next[ i ][ j ];
75
- v[ i ][ j ] = v_next[ i ][ j ]; } }
76
-
77
- for( i = 0; i < i_max; i++ ){
78
- for( j = 0; j < j_max; j++ ){
79
- fos << i << " " << j << " " << u[ i ][ j ] <<"\n";
80
- fos << i << " " << j << " " << v[ i ][ j ] <<"\n"; } }
81
-
82
- filenumber++;
83
- }
84
- }
85
- std::cout <<"\n";
86
- }
87
- ```
9
+ 上記の例のようにC++でプログラムを書くことは可能でょうか

2

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

2021/11/02 06:08

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -27,13 +27,13 @@
27
27
  int i_max = 10;
28
28
  int j_max = 10;
29
29
  double t = 0;
30
- double t_max = 200;
30
+ double t_max = 0.1;
31
31
  double h = 0.1;
32
32
  double d_u = 0.1;
33
33
  double d_v = 0.1;
34
34
  double a = 0.5; //alpha
35
35
  double b = 0.8; //beta
36
- double g = 0.-0.7; //gamma
36
+ double g = -0.7; //gamma
37
37
  double e = 0.08; //epsilon
38
38
  double d_t =0.005;
39
39
 

1

コードを入れ直しました

2021/10/01 06:51

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,9 @@
8
8
 
9
9
  以下が作成したプログラムです。
10
10
 
11
+ パラメーターの数値をいくつにすればうまく表示されますでしょうか。
12
+
13
+ ```C++
11
14
  #include <iostream>
12
15
  #include <stdio.h>
13
16
  #include <math.h>
@@ -80,4 +83,5 @@
80
83
  }
81
84
  }
82
85
  std::cout <<"\n";
83
- }
86
+ }
87
+ ```