我正在尝试在 python 中数值求解方程x=a*sin(x),其中a是一些常数。我已经尝试先象征性地求解方程,但似乎这种特殊的表达形式并没有在 sympy 中实现。我也尝试使用 sympy.nsolve(),但它只给了我它遇到的第一个解决方案。
我的计划是这样的:
x=0
a=1
rje=[]
while(x<a):
if (x-numpy.sin(x))<=error_sin:
rje.append(x)
x+=increment
print(rje)
Run Code Online (Sandbox Code Playgroud)
我不想浪费时间或冒丢失解决方案的风险,所以我想知道如何找出我的设备上 numpy 的窦性有多精确(这将成为 error_sin)。
编辑:我尝试使 error_sin 和 increment 都等于我设备的机器 epsilon,但它 a) 需要很长时间,并且 b) sin(x) 不如 x 精确,所以我得到了很多非解决方案(或相当重复的解,因为 sin(x) 的增长比 x 慢得多)。因此这个问题。
编辑2:你能帮我回答一下关于numpy.sin(x)精度的问题吗?我提供有关目的的信息纯粹是为了上下文。
我必须进行一些迭代计算,并且每次都需要找到浮点数的数量级(科学记数法中 e 之后的那个位)。目前我正在用一个循环来做这件事,但它占用了很多时间,我的计算需要永远。
while n<1.0:
order=order-1
n=n*10
Run Code Online (Sandbox Code Playgroud)
是否有一些函数可以用来从 python 存储浮点数的方式中快速提取这些信息?我被教导浮点数分别存储值和指数。
编辑:它不是重复的,因为我要求最有效的方法。提出的对数实际上比循环慢三倍。
python floating-point performance loops processing-efficiency
我正在尝试在 jupyter 上的降价中编写一个分段函数,而 jupyter 令人毛骨悚然。在三个函数中,它只正确显示了一个($n_o$ 一个),即使它们都以相同的方式编写。
有没有更优雅的方式来写这个?
$$ N(a)= \left\{
\begin{array}{ll}
n_o & A>A_{krit} \\
n_o+2 & A=A_{krit} \\
n_o+4 & A<A_{krit} \\
\end{array}
\right, $$
gdje je: $$A=\frac{1}{|a|},$$
$$ A_{krit}(a)= \left\{
\begin{array}{ll}
\frac{\sin(2\pi*floor(\frac{|a|}{2*\pi})+\frac{\pi}{2})}{2\pi*floor(\frac{|a|}{2*\pi})+\frac{\pi}{2}} & a>0 \\
\frac{\sin(2\pi*floor(\frac{|a|}{2*\pi})+\frac{3\pi}{2})}{2\pi*floor(\frac{|a|}{2*\pi})+\frac{3\pi}{2}} & a<0\\
\end{array}
\right, $$ i
$$ n_o(a)= \left\{
\begin{array}{ll}
|floor(\frac{|a|}{2*\pi})-1| & a>2\pi \\
|floor(\frac{|a|}{2*\pi})-1|-2 & 0<a<2\pi \land A\leq A_{krit} \\
floor(\frac{|a|}{2*\pi})+1 & a<0 \\
\end{array}
\right. $$
Run Code Online (Sandbox Code Playgroud) python ×2
jupyter ×1
latex ×1
loops ×1
numpy ×1
performance ×1
precision ×1
python-3.x ×1
tex ×1
trigonometry ×1