質問編集履歴

1

他の方からいろいろとご指摘いただいたため、問題の改定、プログラムの方は削除しました。

2018/12/15 13:36

投稿

bell_bell
bell_bell

スコア10

test CHANGED
@@ -1 +1 @@
1
- クッタ法(3次)ルンゲクッタ法(4次)の分割数の方がわりません。
1
+ 数値計算・分割数のもとめか
test CHANGED
@@ -1,218 +1,18 @@
1
- ### クッタ法(3次)・ルンゲクッタ法(4次)
1
+ ### クッタ・ルンゲクッタ法
2
2
 
3
3
 
4
4
 
5
- 初めまして。学校の数値計算法の課題でわからないところがあり、質問しました。
5
+ 初めまして。数値計算法でわからないところがあり、質問しました。
6
-
7
- 1階の情微分方程式dy/dx=3y/x+1が与えられたとき、y(0)=1である未知関数の値を数値的に求めることを考える。(特殊解はy=(x+1)^3)
8
6
 
9
7
 
10
8
 
11
- 区間[0.1]をn等分し、クッタ法(3次)、ルンゲクッタ法(4次)により、それぞれ数値解を求めるプログラムを作成し、x=1.0の時の解析解fと数値解fkの誤差がε=10^-3以下となるような分割数nを求めよ。
9
+ 区間[0.1]をn等分し、クッタ法、ルンゲクッタ法により、それぞれ数値解を求めるプログラムを作成し、x=0.4の時の解析解と数値解の誤差がε=10^-2以下となるような分割数nを求めよ。
12
-
13
-
14
10
 
15
11
  という問題です。
16
12
 
17
- それぞれの数値解を求める10等分して行うプログラムなら授業で習っていため下記ようにきたのですが、分割数を求めるやり方は直接習っていなく、調べてみてもわかりませんでした。
13
+ それぞれの数値解を求める10等分して行うプログラムならわかるのですが、分割数を求めるやり方は直接習っていなく、調べてみてもわかりませんでした。
18
14
 
19
15
  分かる方、ご回答よろしくお願い致します。
20
-
21
-
22
-
23
- ### クッタ法
24
-
25
-
26
-
27
- ```
28
-
29
- #include<stdio.h>
30
-
31
- #include<math.h>
32
-
33
-
34
-
35
- double k_func(double ,double ,double);
36
-
37
- double func(double ,double);
38
-
39
- double func_y(double);
40
-
41
-
42
-
43
- int main(void)
44
-
45
- {
46
-
47
- double a=0.0, b=1.0;
48
-
49
- double x,y,h,k;
50
-
51
- int n=10,i;
52
-
53
-
54
-
55
- h=(b-a)/n;
56
-
57
- x=0.0;y=1.0;i=0;
58
-
59
- printf(" i x y\n");
60
-
61
- while(i<n){
62
-
63
- k=k_func(x,y,h);
64
-
65
- x+=h;y+=h*k;i++;
66
-
67
- printf("%2.d, %f, %f\n",i,x,y);
68
-
69
- }
70
-
71
- return 0;
72
-
73
- }
74
-
75
- double k_func(double x,double y,double h)
76
-
77
- {
78
-
79
- double k1,k2,k3,k;
80
-
81
- k1=func(x,y);
82
-
83
- k2=func(x + h/2.0,y + k1*h/2.0);
84
-
85
- k3=func(x + h,y + (2.0*k2-k1)*h);
86
-
87
- k=(k1 + 4.0*k2 + k3)/6.0;
88
-
89
- return k;
90
-
91
-
92
-
93
- }
94
-
95
- double func(double x ,double y)
96
-
97
- {
98
-
99
- return (3*y)/(x+1);
100
-
101
-
102
-
103
- }
104
-
105
- double func_y(double x)
106
-
107
- {
108
-
109
- return pow(x+1, 3.0);
110
-
111
- }
112
-
113
-
114
-
115
- ```
116
-
117
-
118
-
119
- ###ルンゲクッタ法
120
-
121
- ```
122
-
123
-
124
-
125
- #include<stdio.h>
126
-
127
- #include<math.h>
128
-
129
-
130
-
131
- double k_func(double ,double ,double);
132
-
133
- double func(double ,double);
134
-
135
- double func_y(double);
136
-
137
-
138
-
139
- int main(void)
140
-
141
- {
142
-
143
- double a=0.0, b=1.0;
144
-
145
- double x,y,h,k;
146
-
147
- int n=10,i;
148
-
149
-
150
-
151
- h=(b-a)/n;
152
-
153
- x=0.0;y=1.0;i=0;
154
-
155
- printf(" i x y\n");
156
-
157
- while(i<n){
158
-
159
- k=k_func(x,y,h);
160
-
161
- x+=h;y+=h*k;i++;
162
-
163
- printf("%2.d, %f, %f\n",i,x,y);
164
-
165
- }
166
-
167
- return 0;
168
-
169
- }
170
-
171
- double k_func(double x,double y,double h)
172
-
173
- {
174
-
175
- double k1,k2,k3,k4,k;
176
-
177
- k1=func(x,y);
178
-
179
- k2=func(x + h/2.0,y + k1*h/2.0);
180
-
181
- k3=func(x + h,y + (2.0*k2-k1)*h);
182
-
183
- k4=func(x + h, y + h*k3);
184
-
185
- k=(k1 + 4.0*k2 + k3)/6.0;
186
-
187
- return k;
188
-
189
-
190
-
191
- }
192
-
193
- double func(double x ,double y)
194
-
195
- {
196
-
197
- return (3*y)/(x+1);
198
-
199
-
200
-
201
- }
202
-
203
- double func_y(double x)
204
-
205
- {
206
-
207
- return pow(x+1, 3.0);
208
-
209
- }
210
-
211
-
212
-
213
- ```
214
-
215
-
216
16
 
217
17
 
218
18