使用Python Sympy和Latex的10的强大功能

时间:2018-03-19 16:28:57

标签: python latex sympy

这可能是微不足道的,但我无法找到答案。请考虑以下代码:

from sympy import *
X = Symbol('X')
a=10
b=100
c=1000
d=10000
s = latex ( a*b*c*d / X  )
print (s)

显示:

\frac{10000000000}{X}

我更喜欢

\frac{10^{10}}{X}

有可能吗?请注意,从文件中读取a,b,c和d。所以每次运行时价值都会发生变化。然后,以下事情不能解决我的问题:

n20 = Symbol('10')

既不是

latex(S('10**10/X', evaluate=False))

2 个答案:

答案 0 :(得分:2)

>>> from sympy import *
>>> var('X')
X
>>> latex(S('10**20/X', evaluate=False))
'\\frac{10^{20}}{X}'

请参阅https://github.com/sympy/sympy/wiki/Quick-examples

编辑:您编辑的问题与原版有很大不同。这是对它的回答。

因为您的输入值可能不是10 r的幂,可能不是。因此,当它表示为10的幂时,其指数可能不是整数;因此,使用十个对数基数。

from sympy import latex, sympify, Symbol
from math import log10

a=10
b=100
c=1000
d=10000

r = a * b * c * d
exponent = log10(r)

X = Symbol('X')

s = latex(sympify('10**{}/X'.format(exponent), evaluate=False))
print (s)

a, b, cd的这些值的结果是\frac{10^{10.0}}{X}

答案 1 :(得分:1)

你所需要的只是一点帮助,它将以10的力量返回你的号码。然后将它包裹在未经评估的Mul中并将其传递给乳胶:

>>> def u10(n):
...  if abs(n) < 10 or int(n) != n: return n
...  s = str(n)
...  m = s.rstrip('0')
...  if len(m) == len(s): return n
...  return Mul(int(m), Pow(10, len(s) - len(m), evaluate=0), evaluate=0)
...
>>> u10(12300)
123*10**2
>>> latex(Mul(_,1/x,evaluate=False))
'\\frac{123 \\cdot 10^{2}}{x}'�