Advertisement
jukaukor

Expfunc_sovitus.py

Jan 30th, 2023 (edited)
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. """
  2. Eksponenttimallin oikeaan dataan lisätty 10% kohinaa,
  3. lasketaan kohinaisen datan alta parametrit
  4. ja verrataan niitä oikeisiin arvoihin
  5. käyttää Pythonin lmfit pakettia ja
  6. sen oletusarvoista epälineaarista least squares menetelmää
  7. Juhani Kaukoranta 29.1.2023
  8. """
  9. import matplotlib.pyplot as plt
  10. import numpy as np
  11.  
  12. from lmfit import Minimizer, Parameters
  13.  
  14. def func(pars, x, data=None):
  15. a, b, c = pars['a'], pars['b'], pars['c']
  16. model = a * np.exp(-b*x) + c
  17. if data is None:
  18. return model
  19. return model - data
  20.  
  21. def f(var, x):
  22. return var[0] * np.exp(-var[1]*x) + var[2]
  23.  
  24.  
  25. params = Parameters()
  26. params.add('a', value=1)
  27. params.add('b', value=1)
  28. params.add('c', value=1)
  29.  
  30. a, b, c = 2.5, 1.5, 1.0 # alkuperäiset "oikeat" parametrit
  31. x = np.linspace(0, 4, 100) # sata arvo välillä 0-4
  32. y = f([a, b, c], x)
  33. np.random.seed()
  34. data = y + 0.10*np.random.normal(size=x.size) # kohinaa funktion arvoihin
  35.  
  36.  
  37. min = Minimizer(func, params, fcn_args=(x,), fcn_kws={'data': data})
  38. out = min.leastsq()
  39. fit = func(out.params, x)
  40.  
  41.  
  42. print("oikeat parametrien arvot: a = ",a," b = ",b," c = ",c)
  43. print("lasketut parametrit: a = ",out.params['a'].value)
  44. print("lasketut parametrit: b = ",out.params['b'].value)
  45. print("lasketut parametrit: c = ",out.params['c'].value)
  46.  
  47. plt.plot(x, data, 'o', label='kohinainen data')
  48. plt.plot(x, fit, '--', label='sovitettu käyrä')
  49. plt.legend()
  50. plt.show()
  51.  
  52.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement