Aditya Kodkani
Aditya Kodkani

Reputation: 1

Differentiation using sympy

I am trying to differentiate the function z. But it is giving me an error which says: raise TypeError("can't convert the expression to float")

TypeError: can't convert expression to float

I am not able to figure out my mistake.

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)

Upvotes: 0

Views: 1762

Answers (2)

xdze2
xdze2

Reputation: 4151

The mathematical functions from the math module are not the same as the mathematical function from the sympy module. The first ones work on numbers (floats) as the second ones work on sympy expressions and symbols, in order to perform analytical derivation. Therefore, sympy.log has to be used instead of math.log.

The pow function is different. It is a built-in python function (equivalent to the operator **). So it is similar the other operators (+, -, *, /), there is no need to call a special function. For instance type(T_wb**2) gives well 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)

gives:

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))

Upvotes: 2

Ankit Kumar Namdeo
Ankit Kumar Namdeo

Reputation: 1464

Its throwing error in math.log10(T_wb/273.16) T_wb is a variable and when it is trying to calculate log sympy is not able to convert it into float because its a variable.

Upvotes: 0

Related Questions