我正在尝试区分函数z。但这给了我一个错误,上面写着:提高TypeError(“无法将表达式转换为float”)
TypeError:无法将表达式转换为浮点数
我无法弄清楚我的错误。
from sympy import *
import numpy as np
import math
T_wb =Symbol ('T_wb')
z =math.pow(10, 10.79574 * (1 - 273.16/T_wb) \
- 5.028 * math.log10(T_wb/273.16) \
+ 1.50475 * math.pow(10, -4) \
* (1 - math.pow(10, -8.2969 * (T_wb / 273.16 - 1))) \
+ 0.42873 * math.pow(10, -3) \
* (math.pow(10, 4.76955 * (1 - 273.16 / T_wb)) - 1) \
+ 2.78614)
zprime = z.diff(T_wb)
print (zprime)
答案 0 :(得分:1)
math
模块中的数学函数与sympy
模块中的数学函数不同。第一个处理数字(浮点数),第二个处理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))
答案 1 :(得分:0)
它在math.log10(T_wb/273.16)
T_wb
中的抛出错误是一个变量,当它试图计算对数时,因为它是一个变量,所以sympy无法将其转换为float。