Find slope of function given empirical data.
Thomas
thom1948 at gmail.com
Wed Jun 30 09:12:23 EDT 2010
On Jun 30, 3:28 am, Peter Otten <__pete... at web.de> wrote:
> Thomas wrote:
> > Trying to find slope of function using numpy.
> > Getting close, but results are a bit off. Hope someone out here can
> > help.
>
> You don't make it easy to understand your post. In the future please try to
> rely more on plain english than on lots of numbers and code that doesn't
> run.
>
>
>
>
>
> > import numpy as np
>
> > def deriv(y):
> > x = list(range(len(y)))
> > x.reverse() # Change from [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> > x = np.array(x) # to [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
> > y = np.array(y) # x.reverse() is used to put point 0 at end of
> > list.
> > z = np.polyfit(x, y, 2)
> > print np.poly1d(z)
> > # Returns:
> > # 2
> > # 3.142 x - 18.85 x + 35.13
> > # 2
> > # Should be closer to 3.142 x - 6.283 +
> > 10 ????????????????????
>
> To add one more question mark: how did you find that alternative?
>
> Anyway, we can put both polynomials to a test:
>
> >>> import numpy as np
> >>> y = np.array([160.796416, 119.95572, 85.398208, 57.12388,
>
> 35.132736,19.424776, 10.0, 6.858408, 10.0, 19.424776, 35.132736])>>> x = np.arange(len(y), dtype=float)[::-1]
> >>> p1 = np.poly1d(np.polyfit(x, y, 2))
> >>> print p1
>
> 2
> 3.142 x - 18.85 x + 35.13>>> p2 = np.poly1d([3.142, -6.283, 10.0])
> >>> print p2
>
> 2
> 3.142 x - 6.283 x + 10
>
> Now calculate the sum of the squares:
>
> >>> np.sum((p1(x)-y)**2)
>
> 5.0683524299544787e-26>>> np.sum((p2(x)-y)**2)
>
> 33028.342907811333
>
> Conclusion: numpy's result is much better than what you suggest.
>
> Peter
As usual, thanks to all for putting me on the right track.
Kind regards.
More information about the Python-list
mailing list