Математические функции из модуля math
не совпадают с математическими функциями из модуля sympy
. Первые работают над числами (числами с плавающей запятой), а вторые - над выражениями и символами, чтобы выполнить аналитический вывод. Следовательно, sympy.log
должен использоваться вместо math.log
.
Функция pow
отличается. Это встроенная функция python (эквивалентная оператору **
). Так что аналогично другим операторам (+, -, *, /), нет необходимости вызывать специальную функцию. Например, type(T_wb**2)
дает хорошо sympy.core.power.Pow
import sympy as sp
T_wb = sp.Symbol('T_wb')
z = pow(10, 10.79574 * (1 - 273.16/T_wb)) \
- 5.028 * sp.log(T_wb/273.16, 10) \
+ 1.50475e-4 * (1 - pow(10, -8.2969 * (T_wb / 273.16 - 1))) \
+ 0.42873e-3 * (pow(10, 4.76955 * (1 - 273.16 / T_wb)) - 1) \
+ 2.78614
zprime = z.diff(T_wb)
print(zprime)
дает:
0.55857099968694*10**(4.76955 - 1302.850278/T_wb)*log(10)/T_wb**2 + 2948.9643384*10**(10.79574 - 2948.9643384/T_wb)*log(10)/T_wb**2 + 4.57049358434617e-6*10**(-0.0303737736125348*T_wb + 8.2969)*log(10) - 5.028/(T_wb*log(10))