我有各种泵性能数据,我试图将曲线作为它们的组合。

问题描述 投票:0回答:0
Flow速率与RPM成正比。 压力与RPM的正方形成正比。

实际上 - 它们没有,并且实验数据和理论数据之间会有差异。因此,这就是为什么我希望符合看起来像这样的函数:(向其他建议开放) - 例如3级多项式。

Y = a*x1**2 + b*x1+ c*x2**2 + d*x2 + e*x1*x2 + f

,但是,我在Scipy -Curve_Fit中得到了错误的结果。 我不支持采用Sklearn回归,因为我们无法弄清楚系数。

有一种方法可以在Python中使用它? 到目前为止,请在下面看到我的代码:
from numpy import genfromtxt
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pandas as pd
df = pd.read_excel('./nominal_data/pump_curve.xlsx', sheet_name =0)
flow_lpm = df['Flow(lpm)'].to_numpy()
rpm = df['Speed Feedback (RPM)'].to_numpy()
dP = df['dP (PSI)'].to_numpy()
X = (flow_lpm, rpm)
y = dP

def f(X, a, b, c, d, e, f):
    x_1, x_2 = X
    return a*x_1**2 + b*x_1 + c*x_2**2 + d*x_2 + e*x_1*x_2 + f
param, param_cov = curve_fit(f, X, y)

# Test a random data point. 
flow_test = 54
rpm_test = 5195

dp_test = param[0]*flow_test**2 + param[1]*flow_test + param[2]*rpm_test**2 + param[3]**rpm_test + param[4]*flow_test*rpm_test + param[5]
print (dp_test)

像图所示,在多个rpm处有多个压力=函数(流速)的多个曲线。例如,有5100 rpm曲线的3度曲线。但是,它仅适用于给定的RPM。在2070 rpm的情况下,曲线不同。 关于适当曲线拟合方法的寻求建议。开放到删除终点,以确保曲线拟合在中间范围内工作。

    datafile_imageFile
import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit df = pd.read_excel('pump_curve.xlsx', sheet_name =0) columns = ['Flow(lpm)', 'Speed Feedback (RPM)', 'dP (PSI)'] df = df[columns].dropna() columns2 = ['lpm', 'rpm', 'psi'] df = df.rename(columns=dict(zip(columns, columns2))) def f(X, a, b, c, d, e, f): x_1, x_2 = X return a*x_1**2 + b*x_1 + c*x_2**2 + d*x_2 + e*x_1*x_2 + f fig, ax = plt.subplots(1, 3, figsize=(15, 5)) for idx, name in enumerate(columns2): y = df[name].to_numpy() name1, name2 = columns2[:idx]+columns2[idx+1:] X = (df[name1].to_numpy(), df[name2].to_numpy()) param, param_cov = curve_fit(f, X, y) ax[idx].plot(f(X, *param)); ax[idx].plot(y); fun_repr = repr([p for p in param]) ax[idx].set_title(f'{name} = f({name1}, {name2})'); plt.show();

python scipy regression curve-fitting
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.