将Mathematica转换为Python - arccos和sqrt

时间:2017-11-10 01:12:13

标签: python numpy wolfram-mathematica sqrt

我试图将以下Mathematica表达式转换为Python。不知何故,Mathematica可以轻松处理平方根中的负数,并且arcsec的参数位于域之外。

有人可以帮我制作一个有效的Python表达式吗?或者至少告诉我Mathematica(我不太熟悉)如何处理这些问题?

Mathematica表达式(绘制超过0.1-100)

LogLogPlot[(p0 rs^2 (Sqrt[(R - rs) (R + rs)] (-2 R rs + \[Pi] (R - rs) (R + rs))
- 2 (R^3 - 2 R rs^2) ArcSec[R/rs]))/(R ((R - rs) (R + rs))^(3/2)) /. {rs -> 1, p0 -> 10},
{R, 0.1, 100}]

Python表达式

rho0 * rs ** 2 * (np.pi * (R-rs)*(R+rs) - 2 *R *rs) /(R *(R-rs) *(R+rs)) - rho0 * rs **2
 * (2 *np.arccos(rs/R))*(R **3 - 2 *R *rs) / (R *((R-rs) *(R+rs)) **(3/2))

当R < rs(当然是我感兴趣的区域),我得到了arccos的未定义值,以及平方根的无意义值。

任何和所有提示都会有所帮助!

1 个答案:

答案 0 :(得分:0)

这是mathematica公式,不使用复数。

f[R_, rs_, p0_] := 
   Which[R >= rs,
           (p0 rs^2 (Sqrt[(R - rs) (R +rs)]
           (-2 R rs + Pi (R - rs) (R + rs)) - 
           2 (R^3 - 2 R rs^2) ArcSec[R/rs]))/
           R ((R - rs) (R + rs))^(3/2)),
         R < rs,
           (p0 rs^2 ( Sqrt[(rs - R ) (R + rs)]
           (-2 R rs + Pi (R - rs) (R + rs)) - 
           2 (R^3 - 2 R rs^2) Log[rs/R + Sqrt[(rs/R)^2 - 1]]))/
           (-R ((rs - R) (R + rs))^(3/2) )]

  LogLogPlot[f[R, 1, 10], {R, 0.1, 100}]

enter image description here

除此之外,两个表达式都准确地突然出现R==rs,但存在限制:

Limit[(p0 rs^2 (Sqrt[(R - rs) (R +  rs)] (-2 R rs + \[Pi] (R - rs) (R + rs)) 
  2 (R^3 - 2 R rs^2)   ArcSec[R/rs]))/  (R ((R - rs) (R + rs))^(3/2)) , 
   R -> rs,  Assumptions -> {p0 > 0, R > 0, rs > 0}]
  

p0(-8 + 3 Pi)rs / 3

%/. {rs->1,p0->10}
  

4.74926

如果需要,您可以将该案例添加到条件中。