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

回答編集履歴

6

書式修正

2020/05/25 02:12

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -19,7 +19,8 @@
19
19
 
20
20
  ---
21
21
 
22
- `epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?
22
+ ~~`epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?~~
23
+ fanaさんのご指摘通り`fabs(f(X_n))`でも問題ありませんね。
23
24
  ```diff
24
25
  int main(void) {
25
26
  const int M = 50;//最大反復回数

5

コード修正

2020/05/25 02:11

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -26,11 +26,10 @@
26
26
  int N = 0;//反復回数
27
27
  double x0 = 1.0;//初期値
28
28
  double X_n;//近似解を保存する数列(配列)
29
- + double X_n1;
30
29
  X_n = x0;
31
30
  double epilon = 1e-12;//許容誤差
32
31
  for (int i = 0; i <= M; i++) {
33
- + X_n1 = X_n;
32
+ + double X_n1 = X_n;
34
33
  + X_n = X_n - f(X_n) / df(X_n);
35
34
  + N++;
36
35
  - if (abs(f)<epilon){

4

コード追記

2020/05/24 19:52

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -15,4 +15,36 @@
15
15
  + return 10*sin(X_n)+exp(X_n);//f(x)
16
16
  }
17
17
  ```
18
- うまく作動しないという以前にそもそもコンパイルエラーになると思うのですが…
18
+ うまく作動しないという以前にそもそもコンパイルエラーになると思うのですが…
19
+
20
+ ---
21
+
22
+ `epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?
23
+ ```diff
24
+ int main(void) {
25
+ const int M = 50;//最大反復回数
26
+ int N = 0;//反復回数
27
+ double x0 = 1.0;//初期値
28
+ double X_n;//近似解を保存する数列(配列)
29
+ + double X_n1;
30
+ X_n = x0;
31
+ double epilon = 1e-12;//許容誤差
32
+ for (int i = 0; i <= M; i++) {
33
+ + X_n1 = X_n;
34
+ + X_n = X_n - f(X_n) / df(X_n);
35
+ + N++;
36
+ - if (abs(f)<epilon){
37
+ + if (fabs(X_n - X_n1) < epilon) {
38
+ - printf("%.12eで%d",X_n,N);
39
+ break;
40
+ + }
41
+ - }else{
42
+ - X_n=X_n-f/df;
43
+ - N++;
44
+ - }
45
+ }
46
+ }
47
+ + printf("%.12eで%d", X_n, N);
48
+ return 0;
49
+ }
50
+ ```

3

コード追記

2020/05/24 19:42

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -4,4 +4,15 @@
4
4
 
5
5
  やりたいことは以下でしょうか?
6
6
  `fabs(f(X_n))`
7
- `X_n = X_n - f(X_n) / df(X_n);`
7
+ `X_n = X_n - f(X_n) / df(X_n);`
8
+
9
+ ---
10
+
11
+ `;`が抜けています。
12
+ ```diff
13
+ double f(double X_n){
14
+ - return 10*sin(X_n)+exp(X_n)//f(x)
15
+ + return 10*sin(X_n)+exp(X_n);//f(x)
16
+ }
17
+ ```
18
+ うまく作動しないという以前にそもそもコンパイルエラーになると思うのですが…

2

コード修正

2020/05/24 19:02

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -3,5 +3,5 @@
3
3
  `f`や`df`で得られるのは関数のアドレスです。
4
4
 
5
5
  やりたいことは以下でしょうか?
6
- `abs(f(X_n))`
6
+ `fabs(f(X_n))`
7
7
  `X_n = X_n - f(X_n) / df(X_n);`

1

文言修正

2020/05/24 18:58

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  `abs(f)`
2
2
  `X_n = X_n - f / df;`
3
- `f`や`df`は関数のポインタです。
3
+ `f`や`df`で得られるのは関数のアドレスです。
4
4
 
5
5
  やりたいことは以下でしょうか?
6
6
  `abs(f(X_n))`