makis6060 Δημοσ. 15 Απριλίου 2021 Δημοσ. 15 Απριλίου 2021 Καλησπέρα. Έχω φτιάξει έναν κώδικα ο οποίος διαβάζει ένα αρχείο κειμένου με δεδομένα, αποθηκεύει σε λίστες αυτά που χρειάζονται και φτιάχνει ένα διάγραμμα με τις κατανομές των σημείων. Αυτό που πρέπει να κάνω είναι να βρω μια συνάρτηση που να είναι η βέλτιστη για fitting. Όπως είναι το πρόγραμμα τώρα, μοντελοποιεί την μέση κατάσταση. Εγώ όμως χρειάζεται να βρω την περιβάλλουσα συνάρτηση, δηλαδή μια συνάρτηση που θα αφήνει τα περισσότερα σημεία από κάτω. Θα εκτιμούσα οποιαδήποτε βοήθεια. Σας ευχαριστώ για το χρόνο σας. "Δημιουργία διαγραμμάτων" import math import statistics from matplotlib import pyplot as plt import scipy import numpy from scipy import optimize from math import e #Συνάρτηση για το 2ο βήμα def data_to_numeric(dlist): list1 = [] list2 = [] list3 = [] list4 = [] list5 = [] list6 = [] list7 = [] for i in dlist: pair = i.split(" ") list1.append(float(pair[3])) list2.append(float(pair[4])) list3.append(float(pair[5])) list4.append(float(pair[6])) list5.append(float(pair[7])) list6.append(float(pair[8])) list7.append(float(pair[9])) return list1, list2, list3, list4, list5, list6, list7 #Συνάρτηση για το fitting def test_func(x, a, b): return a*(x**b) with open ("datafile2.txt", "r") as f: datalist = f.read().splitlines() Zen_Gwn_List, CIE_Dose_List, DNA_Dose_List, Vitamin_D_Dose_List, Plant_Caldwell_Dose_List, Plant_Flint_Dose_List, Ozon_List = data_to_numeric(datalist) SZA = [] Ozon = [] CIE = [] DNA = [] Vitamin_D = [] Plant_Caldwell = [] Plant_Flint = [] for i in range(len(Ozon_List)): if Ozon_List[i]!=999: Ozon.append(Ozon_List[i]) SZA.append(Zen_Gwn_List[i]) CIE.append(CIE_Dose_List[i]) DNA.append(DNA_Dose_List[i]) Vitamin_D.append(Vitamin_D_Dose_List[i]) Plant_Caldwell.append(Plant_Caldwell_Dose_List[i]) Plant_Flint.append(Plant_Flint_Dose_List[i]) SZA1 = [] Ozon1 = [] CIE1 = [] DNA1 = [] Vitamin_D1 = [] Plant_Caldwell1 = [] Plant_Flint1 = [] for i in range(len(SZA)): if SZA[i]<85: Ozon1.append(Ozon[i]) SZA1.append(SZA[i]) CIE1.append(CIE[i]) DNA1.append(DNA[i]) Vitamin_D1.append(Vitamin_D[i]) Plant_Caldwell1.append(Plant_Caldwell[i]) Plant_Flint1.append(Plant_Flint[i]) SEC_SZA = [] for i in range(len(SZA1)): SEC_SZA.append(1/math.cos(math.radians(SZA1[i]))) SCDlist = [] for num1, num2 in zip(SEC_SZA, Ozon1): SCDlist.append(num1*num2) popt1, _ = scipy.optimize.curve_fit(test_func, SCDlist, CIE1) a, b = popt1 print(popt1) x1_line = numpy.arange(min(SCDlist), max(SCDlist), 1) y1_line = test_func(x1_line, a, b) popt2, _ = scipy.optimize.curve_fit(test_func, SCDlist, DNA1) a, b = popt2 print(popt2) x2_line = numpy.arange(min(SCDlist), max(SCDlist), 1) y2_line = test_func(x2_line, a, b) popt3, _ = scipy.optimize.curve_fit(test_func, SCDlist, Vitamin_D1) a, b = popt3 print(popt3) x3_line = numpy.arange(min(SCDlist), max(SCDlist), 1) y3_line = test_func(x3_line, a, b) popt4, _ = scipy.optimize.curve_fit(test_func, SCDlist, Plant_Caldwell1) a, b = popt4 print(popt4) x4_line = numpy.arange(min(SCDlist), max(SCDlist), 1) y4_line = test_func(x4_line, a, b) popt5, _ = scipy.optimize.curve_fit(test_func, SCDlist, Plant_Flint1) a, b = popt5 print(popt5) x5_line = numpy.arange(min(SCDlist), max(SCDlist), 1) y5_line = test_func(x5_line, a, b) plt.scatter(SCDlist, CIE1, s=2, color="red", label="CIE") plt.scatter(SCDlist, DNA1, s=2, color="black", label="DNA") plt.scatter(SCDlist, Vitamin_D1, s=2, color="blue", label="Vitamin_D") plt.scatter(SCDlist, Plant_Caldwell1, s=2, color="green", label="Plant_Caldwell") plt.scatter(SCDlist, Plant_Flint1, s=2, color="purple", label="Plant_Flint") plt.title("Εξάρτηση των δόσεων από τη ζενίθεια γωνία και το ολικό όζον") plt.xlabel("TOC*sec(SZA)") plt.ylabel("Δόσεις ακτινοβολίας") fit1 = "8144/x^2.24".format(a, b) fit2 = "203.74/x^3.05".format(a, b) fit3 = "2074.49/x^2.61".format(a, b) fit4 = "1058.63/x^2.83".format(a, b) fit5 = "430/x^1.57".format(a, b) plt.plot(x1_line, y1_line, "--", color="red", label=fit1) plt.plot(x2_line, y2_line, "--", color="black", label=fit2) plt.plot(x3_line, y3_line, "--", color="brown", label=fit3) plt.plot(x4_line, y4_line, "--", color="magenta", label=fit4) plt.plot(x5_line, y5_line, "--", color="yellow", label=fit5) legend1 = plt.legend(loc="upper right") plt.show()
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα