Дифференциация с использованием sympy - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь дифференцировать функцию z. Но это дает мне ошибку, которая говорит: поднять TypeError («не могу преобразовать выражение в число с плавающей точкой»)

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)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Математические функции из модуля 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))
0 голосов
/ 05 сентября 2018

Ошибка выброса в math.log10(T_wb/273.16) T_wb является переменной, и при попытке вычислить журнал sympy не может преобразовать ее в число с плавающей точкой, поскольку она является переменной.

...