#🔒 Fitting a dataset to a model using SciPy

11 messages · Page 1 of 1 (latest)

errant sequoiaBOT
#

@misty furnace

Python help channel opened

Remember to:

  • Ask your Python question, not if you can ask or if there's an expert who can help.
  • Show a code sample as text (rather than a screenshot) and the error message, if you've got one.
  • Explain what you expect to happen and what actually happens.

:warning: Do not pip install anything that isn't related to your question, especially if asked to over DMs.

misty furnace
#

It's my first time coding anything and I have to fit a dataset to a model. The first parameter im getting back is of the correct size, however its negative rather than the expected positive. I've tried many many things, and some of them give a fit where the first parameter is off by a couple of orders of magnitude, but where its positive and still traces the data somewhat nicely. You can ignore the text that's scattered about. On request you can have the data used if you want/need it.

#

code is coming in a second I posted the wrong thing

#

#importerer relevante pakker/funktioner import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit #de udleverede data importeres som et numpy array og gemmes i et variabel dataRaw = np.genfromtxt("solens_intensitets_spektrum.csv", delimiter = ',', skip_header = 1) #her er bøglelængden [m] i første kolonne, strålingsintesitet [W/m^2] i anden kolonne og usikkerheden på strålingsintensitet [W/m^2] i tredje kolonne. #Plotter intesiteten som funktion af bølgelængde med usikkerhed på intensiteten: plt.plot(dataRaw[:,0],dataRaw[:,1],'.') plt.errorbar(dataRaw[:,0],dataRaw[:,1],yerr=dataRaw[:,2], fmt = '.', label='usikkerhed insensitet') plt.xlabel('Bølgelængde [m^-6]', fontsize = 12) plt.ylabel('Intensitet [W/m^2]', fontsize=12) plt.legend(fontsize=10) plt.savefig('uden fit') plt.close() #nu definerer jeg modelen som dataen skal fittes til. jeg definerer nogle konstanter så det er mere overskueligt. k = 1.44e-2 #[K m] b = 2.9e-3 #[K m] def bbr(x, A, T ): y= (1/(x**5))*(A/(np.exp(k/(T*x))-1)) return y #vi ønsker nogle startgæt til fittet. vi anvender wiens lov og dataene til at finde et godt gæt til T: #finder index til max værdi af intensitet og bruger den til at hente tilhørende bølgelængde som jeg så gemmer i et variabel lambdaMax=dataRaw[np.argmax(dataRaw[:,1]),0] #nu finder jeg T ved at dele Wiens konstant med lamdaMax, og indsætter resultat i et variabel tempGuess = b/lambdaMax #nu forsøger jeg et fit parametre, covarianser =curve_fit(bbr, dataRaw[:,0],dataRaw[:,1],[1,tempGuess], sigma=dataRaw[:,2],absolute_sigma= True) plt.plot(dataRaw[:,0],dataRaw[:,1],'.', label = 'data') plt.plot(dataRaw[:,0], bbr(dataRaw[:,0], *parametre),'r-', label = 'model') plt.errorbar(dataRaw[:,0],dataRaw[:,1],yerr=dataRaw[:,2], fmt = 'None', label='usikkerhed insensitet') plt.xlabel('Bølgelængde [m]', fontsize = 12) plt.ylabel('Intensitet [W/m^2]', fontsize=12) plt.legend() plt.savefig("med fit") plt.close() print(parametre)

#

these are the output parameters

#

right one is fine, the left one I expect to be that size but positive

#

these are the graphs if interested

errant sequoiaBOT
#

:warning: The owner of this post is no longer in the server.

errant sequoiaBOT
#
Python help channel closed

This help channel has been closed and it's no longer possible to send messages here. If your question wasn't answered, feel free to create a new post in #1035199133436354600. To maximize your chances of getting a response, check out this guide on asking good questions.