Skip to content
Snippets Groups Projects
Commit bef11b26 authored by Steinmann's avatar Steinmann
Browse files

tried fixing R^2 value for P fit

parent 25972389
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` python
%pip install pandas
%pip install numpy
%pip install matplotlib
%pip install scikit-learn
```
%% Cell type:markdown id: tags:
Zusammenhänge der Pumpe:
$\Delta p=\alpha_1\cdot Q^2+\alpha_2\cdot Q\cdot n_{est}+\alpha_3\cdot n_{est}^2$
$l_{est}=\frac{\Delta p}{Q^2}$
Leistungsgleichung:
$P_{est}=\beta_1\cdot Q^3+\beta_2 Q^2\cdot n_{est}+\beta_3\cdot Qn_{est}^2+\beta_4n^3+\beta_5$
%% Cell type:code id: tags:
``` python
#Implementierung des .csv zu DataFrame converters
import pandas as pd
def csv_einlesen(y_Achse,drehzahl):
with open('{0}-Q_kennlinie_n_{1}.csv'.format(y_Achse,drehzahl)) as kennlinie:
dataframe = pd.read_csv(kennlinie, delimiter=';')
dataframe.loc[-1] = dataframe.columns
dataframe.index = dataframe.index +1
dataframe= dataframe.sort_index()
if y_Achse=='h':
sorted_set = dataframe.set_axis(['Q','H'],axis='columns')
elif y_Achse=='P':
sorted_set =dataframe.set_axis(['Q','P'],axis='columns')
#im Datensatz alle ',' durch '.' ersetzen und die String werte als Float Werte casten
for x in sorted_set.index:
for y in sorted_set.columns:
sorted_set.loc[x,[y]] = sorted_set.loc[x,[y]].str.replace(',','.')
sorted_set.loc[x,[y]] = sorted_set.loc[x,[y]].astype(float)
#berechnen der Spalte Q^2, Q^3 n_relativ, n^2, n^3, Q*n, Q^2*n,Q*n^2
sorted_set['Q^2'] = sorted_set['Q'] **2
sorted_set['Q^3'] = sorted_set['Q'] **3
sorted_set['n_rel'] = drehzahl/3600
sorted_set['n^2'] = sorted_set['n_rel']**2
sorted_set['n^3'] = sorted_set['n_rel']**3
sorted_set['Qn'] = sorted_set['n_rel']*sorted_set['Q']
sorted_set['Q^2n'] = sorted_set['Q^2']*sorted_set['n_rel']
sorted_set['Qn^2'] = sorted_set['Q']*sorted_set['n^2']
return sorted_set
```
%% Cell type:code id: tags:
``` python
def combine_csvs():
import numpy as np
dz= [750,1150,1500,1850,2200,2550,2900,3250,3600]
array = np.array(float)
for z in dz:
df =csv_einlesen('h',z)
df_P=csv_einlesen('P',z)
if dz.index(z)==0:
array = df.loc[:,['Q','n_rel','H']].to_numpy(float)
array = np.append(array,df_P.loc[:,['P']].to_numpy(float),axis=1)
continue
#abschneiden der datanpaare, die keine korrespondierenden werte für H oder P haben
#vielleicht dumm
if len(df.index)<len(df_P.index):
for i in range(len(df_P.index)-len(df.index)):
df_P.drop(len(df.index)+i,inplace=True)
elif len(df.index)>len(df_P.index):
for i in range(len(df.index)-len(df_P.index)):
df.drop(len(df_P.index)+i,inplace=True)
array = np.append(array, np.append(df.loc[:,['Q','n_rel','H']].to_numpy(),df_P.loc[:,['P']].to_numpy(),axis=1), axis=0)
return array
```
%% Cell type:markdown id: tags:
Fitting aus den Kurven mit sklearn
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
results = pd.DataFrame()
results['n'] = [750,1150,1500,1850,2200,2550,2900,3250,3600]
fig, (ax1,ax2) = plt.subplots(2,1,sharex=True,gridspec_kw={'hspace':0})
ax1.set_xticks(np.linspace(0,10,11))
ax1.set_xticks(np.linspace(0,10,21),minor=True)
for x,x2 in zip(ax1.get_xgridlines() , ax2.get_xgridlines()):
x.set_visible(True)
x2.set_visible(True)
for y,y2 in zip(ax1.get_ygridlines(),ax2.get_ygridlines()):
y.set_visible(True)
y2.set_visible(True)
ax1.set_title('Förderhöhe Kennlinie',loc='center')
ax1.set_ylabel('$H$ in m')
ax2.set_title('Leistungskennlinien',loc='center',y=-0.25)
ax2.set_ylabel('$P$ in kW')
for n in results.index:
df = csv_einlesen('h',results['n'].get(n))
X = df.loc[:,['Q^2','Qn','n^2']].to_numpy(float)
y = df['H'].to_numpy(float)
results['Q-h_fit'] = LinearRegression(fit_intercept=False).fit(X,y)
#plotten der Punkte und des Graphen
ax1.plot(df['Q'].to_numpy(),results['Q-h_fit'].get(n).predict(X))
ax1.errorbar(df['Q'].to_numpy(),results['Q-h_fit'].get(n).predict(X),fmt='b+')
#regression aus den Werten für Q und P
df2 = csv_einlesen('P',results['n'].get(n))
X2 = df2.loc[:,['Q^3','Q^2n','Qn^2','n^3']].to_numpy(float)
y2= df2['P'].to_numpy(float)
results['Q-P_fit'] = LinearRegression().fit(X2,y2)
#plotten der Punkte und der gefundnen Funktion mit
ax2.errorbar(df2['Q'].to_numpy(),results['Q-P_fit'].get(n).predict(X2),fmt='b+')
ax2.plot(df2['Q'].to_numpy(),results['Q-P_fit'].get(n).predict(X2))
print(results['Q-h_fit'].get(n).coef_)
print(f'R^2: {results['Q-h_fit'].get(n).score(X,y)}')
#print(results['Q-P_fit'].get(n).coef_)
```
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from IPython.display import display,Latex
df = pd.DataFrame(combine_csvs(),columns=['Q','n','H','P'])
#erstellen eines np arrays für die werte von Q^3 Q^2 Q^2n Qn^2 n^3
X = np.empty((0,3),float)
X2 = np.empty((0,4),float)
for i in df.index:
Q_temp= df['Q'].get(i)
n_temp= df['n'].get(i)
X = np.append(X,[[(Q_temp**2), (Q_temp*n_temp), (n_temp**2)]],axis=0)
X2 = np.append(X2,[[(Q_temp**3),(Q_temp**2) *n_temp, Q_temp*(n_temp**2), (n_temp**3)]],axis=0)
LR_H = LinearRegression(fit_intercept=False).fit(X , df['H'].to_numpy(float))
LR_P = LinearRegression().fit(X2,(df['P'].to_numpy(float)*1000))
plt.style.use('FST.mplstyle')
fig1, (ax1,ax2) = plt.subplots(2,1,sharex=True,gridspec_kw={'hspace':0})
ax1.set_xticks(np.linspace(0,10,11))
ax1.set_xticks(np.linspace(0,10,21),minor=True)
ax1.set_ylabel('Förderhöhe $\\it{H}$ in m',labelpad=13)
ax2.set_xlabel('Durchfluss $\\it{Q}$ in $m^3$')
ax2.set_ylabel('Leistung $\\it{P}$ in W')
ax1.plot(df['Q'],df['H'],'k.',ms=3)
ax2.plot(df['Q'],df['P']*1000,'k.',ms=3)
#muss für jeden bereich fon n einzeln geplottet werden
#muss für jeden bereich von n einzeln geplottet werden
n=set()
for x in df.index:
n.add(df['n'].get(x))
for i in range(9):
n_plt=n.pop()
z_pts=df[df['n']==n_plt].shape[0]
Q=np.linspace(0,(z_pts-1)*0.5,z_pts).reshape(-1,1)
X_plt=np.append(np.append(Q*Q, Q*n_plt,axis=1),np.ones((z_pts,1))*n_plt**2,axis=1)
X2_plt=np.append(np.append(np.append(Q*Q*Q, Q*Q*n_plt,axis=1),Q*(n_plt**2),axis=1),np.ones((z_pts,1))*(n_plt**3),axis=1)
ax1.plot(Q,LR_H.predict(X_plt),'k-')
ax2.plot(Q,LR_P.predict(X2_plt),'k-')
ax1.set_xlim([0,10])
ax2.set_ylim([0,200])
ax1.set_ylim([0,10])
plt.tight_layout()
print(f'R^2{LR_H.score(X,df['H'])}')
print(f'R^2{LR_P.score(X2,df['P'])}')
```
%% Output
R^20.9998289611292903
R^2-3124385.577938745
%% Cell type:markdown id: tags:
df =
Q | n | P | H
-------- | -------- | -------- | --
0 | 0.35 | 10 | 2
0.5 | 0.35 | 15 | 1.8
1 | 0.35 |20| 1.5
0 | 0.5 | 15 | 2
0.5 | 0.5 | 20 | 1.8
1 | 0.5 | 25 | 1.5
```python
X = numpy.array([df.loc[:,'Q']**3, df.loc[:,'Q']**2 * df.loc[:,'n']...)
```
anmelden Thesis
Ziel einen Fit mit n als zweite Variable
multiple linear REgression
Ziel2 den FST custom stil zum plotten des Kennfelds einbinden -done
Ziel3 eine Präsi erstellen anhand des Leitfadens im studierende Starterpaket
schritt4 mit dem pymo packet Optimierungsgleichung formulieren Anlagen kennlinie definieren
für verschiedene durchflüsse optimale drehzahl berechnen.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment