Προς το περιεχόμενο
  • 0

Python - Περιβάλλουσα καμπύλη


makis6060

Ερώτηση

Καλησπέρα. Έχω φτιάξει έναν κώδικα ο οποίος διαβάζει ένα αρχείο κειμένου με δεδομένα, αποθηκεύει σε λίστες αυτά που χρειάζονται και φτιάχνει ένα διάγραμμα με τις κατανομές των σημείων. Αυτό που πρέπει να κάνω είναι να βρω μια συνάρτηση που να είναι η βέλτιστη για 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()

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

0 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

Δεν υπάρχουν απαντήσεις σε αυτήν την ερώτηση ακόμη

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.