Я работаю над проектом, в котором мне нужно интерполировать значения энтальпии с помощью scipy.interpolate.RectBivariateSpline, а затем выполнить автоматическое дифференцирование с помощью mygrad. Однако я столкнулся с проблемой, когда градиент вообще не отслеживается при интерполяции. Вот упрощенная версия моего кода:
import numpy as np
from scipy.interpolate import RectBivariateSpline
import CoolProp.CoolProp as CP
import mygrad as mg
from mygrad import tensor
# Define the refrigerant
refrigerant = 'R134a'
# Constant temperature (e.g., 20°C)
T = 20 + 273.15 # Convert to Kelvin
# Get saturation pressures
P_sat = CP.PropsSI('P', 'T', T, 'Q', 0, refrigerant)
# Define a pressure range around the saturation pressure
P_min = P_sat * 0.5
P_max = P_sat * 1.5
P_values = np.linspace(P_min, P_max, 100)
# Define a temperature range around the constant temperature
T_min = T - 10
T_max = T + 10
T_values = np.linspace(T_min, T_max, 100)
# Generate enthalpy data
h_values = []
for P in P_values:
h_row = []
for T in T_values:
try:
h = CP.PropsSI('H', 'P', P, 'T', T, refrigerant)
h_row.append(h)
except:
h_row.append(np.nan)
h_values.append(h_row)
# Convert lists to arrays
h_values = np.array(h_values)
# Fit spline for enthalpy
h_spline = RectBivariateSpline(P_values, T_values, h_values)
# Function to interpolate enthalpy
def h_interp(P, T):
return tensor(h_spline.ev(P, T))
# Example function using the interpolated enthalpy with AD
def example_function(P):
h = h_interp(P, T)
result = h**2 # Example calculation
return result
# Define a pressure value for testing
P_test = tensor(P_sat, )
# Compute the example function and its gradient
result = example_function(P_test)
result.backward()
# Print the result and the gradient
print(f"Result: {result.item()}")
print(f"Gradient: {P_test.grad}")
Это просто проблемы RectBivariateSpline или mygrad? Будет ли это работать с другими библиотеками алгебраического дифференцирования? Стоит ли использовать что-то еще, кроме сплайнов?
Я работаю над проектом, в котором мне нужно интерполировать значения энтальпии с помощью scipy.interpolate.RectBivariateSpline, а затем выполнить автоматическое дифференцирование с помощью mygrad. Однако я столкнулся с проблемой, когда градиент вообще не отслеживается при интерполяции. Вот упрощенная версия моего кода: [code]import numpy as np from scipy.interpolate import RectBivariateSpline import CoolProp.CoolProp as CP import mygrad as mg from mygrad import tensor
# Define the refrigerant refrigerant = 'R134a'
# Constant temperature (e.g., 20°C) T = 20 + 273.15 # Convert to Kelvin
# Define a pressure range around the saturation pressure P_min = P_sat * 0.5 P_max = P_sat * 1.5 P_values = np.linspace(P_min, P_max, 100)
# Define a temperature range around the constant temperature T_min = T - 10 T_max = T + 10 T_values = np.linspace(T_min, T_max, 100)
# Generate enthalpy data h_values = []
for P in P_values: h_row = [] for T in T_values: try: h = CP.PropsSI('H', 'P', P, 'T', T, refrigerant) h_row.append(h) except: h_row.append(np.nan) h_values.append(h_row)
# Convert lists to arrays h_values = np.array(h_values)
# Fit spline for enthalpy h_spline = RectBivariateSpline(P_values, T_values, h_values)
# Function to interpolate enthalpy def h_interp(P, T): return tensor(h_spline.ev(P, T))
# Example function using the interpolated enthalpy with AD def example_function(P): h = h_interp(P, T) result = h**2 # Example calculation return result
# Define a pressure value for testing P_test = tensor(P_sat, )
# Compute the example function and its gradient result = example_function(P_test) result.backward()
# Print the result and the gradient print(f"Result: {result.item()}") print(f"Gradient: {P_test.grad}") [/code] Это просто проблемы RectBivariateSpline или mygrad? Будет ли это работать с другими библиотеками алгебраического дифференцирования? Стоит ли использовать что-то еще, кроме сплайнов?
Я пытаюсь интерполировать 2D-данные, чтобы найти значение Z в точке (X,Y), как если бы это была 2D-таблица поиска.
import numpy as np
import pandas as pd
from scipy.interpolate import RegularGridInterpolator
import io
Я пытаюсь интерполировать 2D-данные, чтобы найти значение Z в точке (X,Y), как если бы это была 2D-таблица поиска.
import numpy as np
import pandas as pd
from scipy.interpolate import RegularGridInterpolator
import io
Я пытаюсь интерполировать 2D-данные, чтобы найти значение Z в точке (X,Y), как если бы это была справочная таблица 2D.
import numpy as np
import pandas as pd
from scipy.interpolate import RegularGridInterpolator
import io
Я хочу интерполировать набор данных с координатной сеткой, используя Python. Например, если у меня есть массив размером 10x10, он должен стать 20x20 с интерполяцией (линейной, кубической) добавленных значений. Проблема в том, что данные НЕ полностью...
При использовании строковой интерполяции, sprintf или любой другой формы динамического создания строки SQL-запроса PhpStorm обычно дает сбой. Например: