回答編集履歴

6

append description about equation

2022/10/05 22:03

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -38,3 +38,5 @@
38
38
  の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`について10000回の試行を行なって解析したところ,次のようなグラフが得られました.
39
39
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/f78b1663-acb2-4b20-8f9e-a22135c1ce68.png)
40
40
  言うなれば,赤の領域は今回使った反復法で振動/発散する値域を示します.逆に何もない白の領域は安定して解析できる値域ですね.何かの参考になれば幸いです.
41
+
42
+ ちなみにニュートン法の反復式を正しいものとして解析しています.ここに問題がある可能性を捨てきれない場合は,扱いたい数式の掲示もお願いします.

5

fix miss words

2022/10/05 21:44

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -1,12 +1,12 @@
1
1
  `random.uniform()`で`X_2`を定義した直後に`print(X_2)`を移動させることで,原因を突き止めるようにすると良いでしょう.
2
2
 
3
- 先の解答にある分母がほぼ0になるような`math.cos(x-X_2) - 1`の計算では,`ValueError: math domain error`の原因となる`inf`や`-inf`が出る前に`ZeroDivisionError: float division by zero`が発生します.ので,これは本質的な答えではありません.
3
+ 先の解答にある分母がほぼ0になるような`math.cos(x-X_2) - 1`の計算では,`ValueError: math domain error`の原因となる`inf`や`-inf`が出る前に0除算のエラー`ZeroDivisionError: float division by zero`が発生します.ので,これは本質的な答えではありません.
4
4
 
5
5
  したがって,別の原因があると考え,弊環境で複数回試行したところ,`X_2 = 2.791313034807418`で`ValueError: math domain error`になりました.
6
6
 
7
- `while`ループの中を観測すると,`x`や`x_2`が振動/発散し,`inf`に到達後`math.sin()`の引数に使われ,`ValueError: math domain error`になったようです.
7
+ `while`ループの中を観測すると,`x`や`x_2`が指数関数的に振動/発散し,`inf`に到達後`math.sin()`の引数に使われ,`ValueError: math domain error`になったようです.
8
8
 
9
- エラーの対策として,あまりにも反復回数が多いものを扱わないようにするため,次のようにコードを改変すると良いでしょう.
9
+ エラーの対策として,反復回数が多いものを扱わないようにするため,次のようにコードを改変すると良いでしょう.
10
10
 
11
11
  ```Python
12
12
  for i in range(N):
@@ -35,7 +35,6 @@
35
35
  cnt += 1
36
36
  ```
37
37
 
38
- の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`及び`rand[i]`を10000回の試行を行なって解析したところ,次のようなグラフが得られました.
38
+ の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`について10000回の試行を行なって解析したところ,次のようなグラフが得られました.
39
39
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/f78b1663-acb2-4b20-8f9e-a22135c1ce68.png)
40
- 言うなれば,赤の領域は今回使った反復法で振動/発散する値域を示します.逆に白の領域は安定して解析できる値域ですね.何かの参考になれば幸いです.
40
+ 言うなれば,赤の領域は今回使った反復法で振動/発散する値域を示します.逆に何もない白の領域は安定して解析できる値域ですね.何かの参考になれば幸いです.
41
-

4

append graph description

2022/10/05 20:55

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -37,5 +37,5 @@
37
37
 
38
38
  の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`及び`rand[i]`を10000回の試行を行なって解析したところ,次のようなグラフが得られました.
39
39
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/f78b1663-acb2-4b20-8f9e-a22135c1ce68.png)
40
- 何かの参考になれば幸いです.
40
+ 言うなれば,赤の領域は今回使った反復法で振動/発散する値域を示します.逆に白の領域は安定して解析できる値域ですね.何かの参考になれば幸いです.
41
41
 

3

fixed graph

2022/10/05 20:46

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -35,5 +35,7 @@
35
35
  cnt += 1
36
36
  ```
37
37
 
38
- の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`及び`rand[i]`を10000回の試行を行なって解析したところ,次のようなグラフが得られました.何かの参考になれば幸いです.
38
+ の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`及び`rand[i]`を10000回の試行を行なって解析したところ,次のようなグラフが得られました.
39
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/c4a5f068-74fb-4e7d-bcd1-f582f8d6c748.png)
39
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/f78b1663-acb2-4b20-8f9e-a22135c1ce68.png)
40
+ 何かの参考になれば幸いです.
41
+

2

append graph

2022/10/05 19:35

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -35,4 +35,5 @@
35
35
  cnt += 1
36
36
  ```
37
37
 
38
- の方が正しいように感じます.
38
+ の方が正しいように感じます.このコードで`ValueError: math domain error`となる`X_2`及び`rand[i]`を10000回の試行を行なって解析したところ,次のようなグラフが得られました.何かの参考になれば幸いです.
39
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/c4a5f068-74fb-4e7d-bcd1-f582f8d6c748.png)

1

append fix

2022/10/05 18:37

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -19,3 +19,20 @@
19
19
  x = x2
20
20
  cnt += 1
21
21
  ```
22
+
23
+ また反復の初期位置`x`も本来であれば反復の開始位置にあるべきなはずなので
24
+
25
+ ```Python
26
+ for i in range(N):
27
+ x = math.pi # ここが正しそう
28
+ cnt = 0
29
+ while cnt < 100: # under 100 iterative
30
+ x2 = x-(2*math.pi*ran[i]+math.sin(X_2)+math.sin(x-X_2)-x)/(math.cos(x-X_2)-1)
31
+ if abs(x2 - x) < 0.0001:
32
+ X.append(x)
33
+ break
34
+ x = x2
35
+ cnt += 1
36
+ ```
37
+
38
+ の方が正しいように感じます.