我试图将以下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的未定义值,以及平方根的无意义值。
任何和所有提示都会有所帮助!
答案 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}]
除此之外,两个表达式都准确地突然出现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
如果需要,您可以将该案例添加到条件中。