Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Eksponenttimallin oikeaan dataan lisätty 10% kohinaa,
- lasketaan kohinaisen datan alta parametrit
- ja verrataan niitä oikeisiin arvoihin
- käyttää Pythonin lmfit pakettia ja
- sen oletusarvoista epälineaarista least squares menetelmää
- Juhani Kaukoranta 29.1.2023
- """
- import matplotlib.pyplot as plt
- import numpy as np
- from lmfit import Minimizer, Parameters
- def func(pars, x, data=None):
- a, b, c = pars['a'], pars['b'], pars['c']
- model = a * np.exp(-b*x) + c
- if data is None:
- return model
- return model - data
- def f(var, x):
- return var[0] * np.exp(-var[1]*x) + var[2]
- params = Parameters()
- params.add('a', value=1)
- params.add('b', value=1)
- params.add('c', value=1)
- a, b, c = 2.5, 1.5, 1.0 # alkuperäiset "oikeat" parametrit
- x = np.linspace(0, 4, 100) # sata arvo välillä 0-4
- y = f([a, b, c], x)
- np.random.seed()
- data = y + 0.10*np.random.normal(size=x.size) # kohinaa funktion arvoihin
- min = Minimizer(func, params, fcn_args=(x,), fcn_kws={'data': data})
- out = min.leastsq()
- fit = func(out.params, x)
- print("oikeat parametrien arvot: a = ",a," b = ",b," c = ",c)
- print("lasketut parametrit: a = ",out.params['a'].value)
- print("lasketut parametrit: b = ",out.params['b'].value)
- print("lasketut parametrit: c = ",out.params['c'].value)
- plt.plot(x, data, 'o', label='kohinainen data')
- plt.plot(x, fit, '--', label='sovitettu käyrä')
- plt.legend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement