Bonjour,

Je veux faire une fit de mes courbes avec une échelle log. Mes données brutes sont dans un fichier xlsx. Nous savons que Nu est proportionnel Ra**a et 0.25<a<0.33
fichier excel : https://github.com/Suntoryy/Help

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import pandas as pd
import matplotlib.pyplot as plt
from math import log10
import numpy as np
import scipy
from scipy import stats
from scipy.optimize import curve_fit
import numpy.polynomial.polynomial as poly
 
data1=pd.read_excel('data.xlsx',sheet_name='Pr1-9', index=False)
data2=pd.read_excel('data.xlsx',sheet_name='Pr10-9', index=False)
data3=pd.read_excel('data.xlsx',sheet_name='Pr100-9', index=False)
data4=pd.read_excel('data.xlsx',sheet_name='Pr1000-9', index=False)
 
x=data1['Ra'].values
y1=data1['Nu_top'].values
y2=data2['Nu_top'].values
y3=data3['Nu_top'].values
y4=data4['Nu_top'].values
 
 
plt.scatter(x, y1, label='Nu_top Pr=1')
plt.scatter(x, y2, label='Nu_top Pr=10')
plt.scatter(x, y3, label='Nu_top Pr=100')
plt.scatter(x, y4, label='Nu_top Pr=1000')
 
 
plt.errorbar(x, y1 , yerr=data1['Ecart type top'].values, linestyle="None") 
plt.errorbar(x, y2 , yerr=data2['Ecart type top'].values, linestyle="None") 
plt.errorbar(x, y3 , yerr=data3['Ecart type top'].values, linestyle="None") 
plt.errorbar(x, y4 , yerr=data4['Ecart type top'].values, linestyle="None") 
 
def func(x,a):
	return x**a
 
 
popt, pcov = curve_fit(func, x, y1, sigma=data1['Ecart type top'].values)
plt.plot(x, func(x, *popt), 'r-', label='fit: a=%5.3f' % tuple(popt))
 
print(pcov)
 
coefs = poly.polyfit(x, y1, 1)
ffit = poly.polyval(x, coefs)
plt.plot(x, ffit,'b-', label='fit: b=%5.3f, a=%5.3f' % tuple(coefs))
 
 
lr = scipy.stats.linregress(x, y1)
plt.plot(x,lr[0]*x+lr[1],'g-', label='fit: a=%5.3f, b=%5.3f, R=%5.3f' % lr[0:3])
 
"""
lr = scipy.stats.linregress(x, y2)
plt.plot(x,lr[0]*x+lr[1], label='fit: a=%5.3f, b=%5.3f, R=%5.3f' % lr[0:3])
lr = scipy.stats.linregress(x, y3)
plt.plot(x,lr[0]*x+lr[1], label='fit: a=%5.3f, b=%5.3f, R=%5.3f' % lr[0:3])
lr = scipy.stats.linregress(x, y4)
plt.plot(x,lr[0]*x+lr[1], label='fit: a=%5.3f, b=%5.3f, R=%5.3f' % lr[0:3])"""
 
 
plt.xscale('log')
plt.yscale('log')
plt.grid
plt.title("Nusselt en fonction de Ra LVL 9")
plt.xlabel('Ra')
plt.ylabel('Nu')
plt.legend()
plt.show()

Voici ce que j'obtiens:
Nom : Test.png
Affichages : 2002
Taille : 37,3 Ko

Et je ne vois pas la solution pour faire un fit des mes données en echelle log. Si quelqu'un a une idée svp ?
Je vous en remercie !