回答編集履歴

6

書式修正

2020/05/25 02:12

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -40,7 +40,9 @@
40
40
 
41
41
 
42
42
 
43
- `epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?
43
+ ~~`epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?~~
44
+
45
+ fanaさんのご指摘通り`fabs(f(X_n))`でも問題ありませんね。
44
46
 
45
47
  ```diff
46
48
 

5

コード修正

2020/05/25 02:11

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -54,15 +54,13 @@
54
54
 
55
55
  double X_n;//近似解を保存する数列(配列)
56
56
 
57
- + double X_n1;
58
-
59
57
  X_n = x0;
60
58
 
61
59
  double epilon = 1e-12;//許容誤差
62
60
 
63
61
  for (int i = 0; i <= M; i++) {
64
62
 
65
- + X_n1 = X_n;
63
+ + double X_n1 = X_n;
66
64
 
67
65
  + X_n = X_n - f(X_n) / df(X_n);
68
66
 

4

コード追記

2020/05/24 19:52

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -33,3 +33,67 @@
33
33
  ```
34
34
 
35
35
  うまく作動しないという以前にそもそもコンパイルエラーになると思うのですが…
36
+
37
+
38
+
39
+ ---
40
+
41
+
42
+
43
+ `epilon`との比較は`fabs(f(X_n))`ではなく、前回の計算結果との差分を取らないといけないのでは?
44
+
45
+ ```diff
46
+
47
+ int main(void) {
48
+
49
+ const int M = 50;//最大反復回数
50
+
51
+ int N = 0;//反復回数
52
+
53
+ double x0 = 1.0;//初期値
54
+
55
+ double X_n;//近似解を保存する数列(配列)
56
+
57
+ + double X_n1;
58
+
59
+ X_n = x0;
60
+
61
+ double epilon = 1e-12;//許容誤差
62
+
63
+ for (int i = 0; i <= M; i++) {
64
+
65
+ + X_n1 = X_n;
66
+
67
+ + X_n = X_n - f(X_n) / df(X_n);
68
+
69
+ + N++;
70
+
71
+ - if (abs(f)<epilon){
72
+
73
+ + if (fabs(X_n - X_n1) < epilon) {
74
+
75
+ - printf("%.12eで%d",X_n,N);
76
+
77
+ break;
78
+
79
+ + }
80
+
81
+ - }else{
82
+
83
+ - X_n=X_n-f/df;
84
+
85
+ - N++;
86
+
87
+ - }
88
+
89
+ }
90
+
91
+ }
92
+
93
+ + printf("%.12eで%d", X_n, N);
94
+
95
+ return 0;
96
+
97
+ }
98
+
99
+ ```

3

コード追記

2020/05/24 19:42

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -11,3 +11,25 @@
11
11
  `fabs(f(X_n))`
12
12
 
13
13
  `X_n = X_n - f(X_n) / df(X_n);`
14
+
15
+
16
+
17
+ ---
18
+
19
+
20
+
21
+ `;`が抜けています。
22
+
23
+ ```diff
24
+
25
+ double f(double X_n){
26
+
27
+ - return 10*sin(X_n)+exp(X_n)//f(x)
28
+
29
+ + return 10*sin(X_n)+exp(X_n);//f(x)
30
+
31
+ }
32
+
33
+ ```
34
+
35
+ うまく作動しないという以前にそもそもコンパイルエラーになると思うのですが…

2

コード修正

2020/05/24 19:02

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -8,6 +8,6 @@
8
8
 
9
9
  やりたいことは以下でしょうか?
10
10
 
11
- `abs(f(X_n))`
11
+ `fabs(f(X_n))`
12
12
 
13
13
  `X_n = X_n - f(X_n) / df(X_n);`

1

文言修正

2020/05/24 18:58

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `X_n = X_n - f / df;`
4
4
 
5
- `f`や`df`は関数のポインタです。
5
+ `f`や`df`で得られるのは関数のアドレスです。
6
6
 
7
7
 
8
8