回答編集履歴

3

追記

2021/07/15 23:22

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -127,3 +127,21 @@
127
127
  # 1.6141283310668653e-12
128
128
 
129
129
  ```
130
+
131
+
132
+
133
+ # 追記
134
+
135
+ ```python3
136
+
137
+ import sympy as sym
138
+
139
+ sym.var("phi delta_out delta_in r_out r_in r Do")
140
+
141
+ f = sym.sin(phi)/(phi*( ((delta_out-delta_in)/(r_out-r_in))*(r-r_in + delta_in + Do*(1-sym.cos(phi)))))
142
+
143
+ display(f)
144
+
145
+ ```
146
+
147
+ ![f](fa4ecb1a915037ee7d6e0b541d4a7de5.png)

2

追記

2021/07/15 23:22

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -1,4 +1,4 @@
1
- pythonの計算精度の問題で、途中で計算しきれなくなっているようです。(参考:[15. 浮動小数点演算、その問題と制限](https://docs.python.org/ja/3/tutorial/floatingpoint.html))sin(φ)/φをsinc(φ/π)と置き換えて計算を省力化したところ、最後まで回るようになりました。(最初のコードでは、integ_inなどが計算できずにNaNになっていました)
1
+ pythonの計算精度の問題で、途中で計算しきれなくなっているようです。(参考:[15. 浮動小数点演算、その問題と制限](https://docs.python.org/ja/3/tutorial/floatingpoint.html))sin(φ)/φをsinc(φ/π)と置き換え(参考:[numpy.sinc](https://numpy.org/doc/stable/reference/generated/numpy.sinc.html))て計算を省力化したところ、最後まで回るようになりました。(最初のコードでは、integ_inなどが計算できずにNaNになっていました)
2
2
 
3
3
  しかし結果は、1.6141283310668653e-12ということで、まだ目標とは50%くらいずれていますね。途中の誤差の積み重ねでしょうか。精度を上げるには、途中の式を手でほぐして簡単な計算に置き換えていくのが王道かと思います。
4
4
 

1

追記

2021/07/15 07:54

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -1,6 +1,6 @@
1
- pythonの計算精度の問題で、途中で計算しきれなくなっているようです。sin(φ)/φをsinc(φ/π)と置き換えて計算を省力化したところ、最後まで回るようになりました。(最初のコードでは、integ_inなどが計算できずにNaNになっていました)
1
+ pythonの計算精度の問題で、途中で計算しきれなくなっているようです。(参考:[15. 浮動小数点演算、その問題と制限](https://docs.python.org/ja/3/tutorial/floatingpoint.html))sin(φ)/φをsinc(φ/π)と置き換えて計算を省力化したところ、最後まで回るようになりました。(最初のコードでは、integ_inなどが計算できずにNaNになっていました)
2
2
 
3
- しかし結果は、1.6141283310668653e-12ということで、あmだ目標とは50%くらいずれていますね。途中の誤差の積み重ねでしょうか。精度を上げるには、途中の式を手でほぐして簡単な計算に置き換えていくのが王道かと思います。
3
+ しかし結果は、1.6141283310668653e-12ということで、だ目標とは50%くらいずれていますね。途中の誤差の積み重ねでしょうか。精度を上げるには、途中の式を手でほぐして簡単な計算に置き換えていくのが王道かと思います。
4
4
 
5
5
 
6
6