Hướng dẫn fit 2d function python - phù hợp với Python chức năng 2d

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Chức năng scipy.optimize.curve_fit có thể dễ dàng phù hợp với một hàm của biểu mẫu: z = f((x,y), PARAMETERS) như trong câu trả lời của StackFlow này https://stackoverflow.com/a/28373422/4752250

Có cách nào để làm điều này cho một chức năng ánh xạ các điểm trong không gian 2D đến các điểm 2D khác nhau, ví dụ: (u,v) = g((x,y), PARAMETERS)?

  • Python
  • scipy
  • curve-fitting
  • scipy-optimize

Cải thiện câu hỏi này

Đã hỏi ngày 21 tháng 3 lúc 3:11Mar 21 at 3:11

Hướng dẫn fit 2d function python - phù hợp với Python chức năng 2d

Xabraxabraxabra

1192 Huy hiệu bạc9 Huy hiệu đồng2 silver badges9 bronze badges

1

  • 1

    Không có vấn đề với least_squares(). Bạn chỉ phải xác định một số liệu thích hợp cho chức năng còn lại của bạn.

    - & nbsp; Mikuszefski

    21 tháng 3 lúc 7:46

Thêm một bình luận & nbsp; | & nbsp; | 

Được sắp xếp bởi: Đặt lại về mặc định

câu trả lời của bạn

Đăng ký hoặc đăng nhập

Đăng ký bằng Google

Đăng ký bằng Facebook

Đăng ký bằng email và mật khẩu

Đăng như một khách

Tên

E-mail

Yêu cầu, nhưng không bao giờ hiển thị

Bằng cách nhấp vào bài đăng của bạn, bạn đồng ý với Điều khoản dịch vụ, chính sách quyền riêng tư và chính sách cookie của chúng tôi

Duyệt những câu hỏi khác được gắn thẻPythonscipycurve-fittingscipy-optimizeCải thiện câu hỏi này

Ví dụcurve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(- inf, inf), method=None, jac=None, *, full_output=False, **kwargs)[source]#

Xác định dữ liệu phù hợp với một số tiếng ồn:

Phù hợp với các tham số A, B, C của hàm chức năng:

Hạn chế tối ưu hóa vùng
>>> popt, pcov = curve_fit(func, xdata, ydata)
>>> popt
array([2.56274217, 1.37268521, 0.47427475])
>>> plt.plot(xdata, func(xdata, *popt), 'r-',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
4,
>>> popt, pcov = curve_fit(func, xdata, ydata)
>>> popt
array([2.56274217, 1.37268521, 0.47427475])
>>> plt.plot(xdata, func(xdata, *popt), 'r-',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
5 và
>>> popt, pcov = curve_fit(func, xdata, ydata)
>>> popt
array([2.56274217, 1.37268521, 0.47427475])
>>> plt.plot(xdata, func(xdata, *popt), 'r-',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
6:fcallable

scipy.optimize.curve_fit (f, xdata, ydata, p0 = none, sigma = none , ** kwargs) [nguồn]#

Sử dụng bình phương tối thiểu phi tuyến tính để phù hợp với một hàm, f, vào dữ liệu.array_like or object

Giả sử ydata = f(xdata, *params) + eps.

ydataarray_likearray_like

Tham sốfcallable

Hàm mô hình, F (x, xông). Nó phải lấy biến độc lập làm đối số đầu tiên và các tham số để phù hợp như các đối số còn lại riêng biệt.array_like, optional

xdataarray_like hoặc đối tượng

Biến độc lập nơi dữ liệu được đo. Thường nên là một chuỗi độ dài m hoặc một mảng (k, m) cho các hàm với các dự đoán k, nhưng thực sự có thể là bất kỳ đối tượng nào.None or M-length sequence or MxM array, optional

Dữ liệu phụ thuộc, một mảng m chiều dài - trên danh nghĩa

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
0.

  • p0array_like, tùy chọn

  • Dự đoán ban đầu cho các tham số (độ dài n). Nếu không có, thì tất cả các giá trị ban đầu sẽ là 1 (nếu số lượng tham số cho hàm có thể được xác định bằng cách sử dụng hướng nội, nếu không một giá trị được nâng lên).

    Sigmanone hoặc chuỗi độ dài hoặc mảng MXM, tùy chọn

Xác định sự không chắc chắn trong ydata. Nếu chúng ta xác định phần dư là

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
1, thì việc giải thích Sigma phụ thuộc vào số lượng kích thước của nó:

Một sigma 1-D nên chứa các giá trị độ lệch chuẩn của các lỗi trong ydata. Trong trường hợp này, hàm được tối ưu hóa là
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
2.
bool, optional

Một sigma 2 chiều phải chứa ma trận sai số hiệp phương sai trong ydata. Trong trường hợp này, hàm tối ưu hóa là

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
3.

Mới trong phiên bản 0.19.

Không có (mặc định) tương đương với Sigma 1-D chứa đầy những cái.bool, optional

Tuyệt đối_sigmabool, tùy chọn

Nếu đúng, Sigma được sử dụng theo nghĩa tuyệt đối và PCOV hiệp phương sai tham số ước tính phản ánh các giá trị tuyệt đối này.2-tuple of array_like, optional

Giới hạn dưới và trên trên các tham số. Mặc định không có giới hạn. Mỗi phần tử của tuple phải là một mảng có độ dài bằng số lượng tham số hoặc vô hướng (trong trường hợp giới hạn được coi là giống nhau cho tất cả các tham số). Sử dụng

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
5 với một dấu hiệu thích hợp để vô hiệu hóa giới hạn trên tất cả hoặc một số tham số.

Mới trong phiên bản 0.17.

Phương pháp {‘LM,‘ TRF, ‘Dogbox,}, tùy chọn{‘lm’, ‘trf’, ‘dogbox’}, optional

Phương pháp sử dụng để tối ưu hóa. Xem

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
6 để biết thêm chi tiết. Mặc định là ‘LM, đối với các vấn đề không bị ràng buộc và‘ TRF, nếu giới hạn được cung cấp. Phương pháp ‘LM, đã giành được công việc khi số lượng quan sát nhỏ hơn số lượng biến, sử dụng‘ TRF, hoặc ‘Dogbox, trong trường hợp này.

Mới trong phiên bản 0.17.

Phương pháp {‘LM,‘ TRF, ‘Dogbox,}, tùy chọncallable, string or None, optional

Phương pháp sử dụng để tối ưu hóa. Xem

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
6 để biết thêm chi tiết. Mặc định là ‘LM, đối với các vấn đề không bị ràng buộc và‘ TRF, nếu giới hạn được cung cấp. Phương pháp ‘LM, đã giành được công việc khi số lượng quan sát nhỏ hơn số lượng biến, sử dụng‘ TRF, hoặc ‘Dogbox, trong trường hợp này.

jacballable, chuỗi hoặc không, tùy chọn

Chức năng với chữ ký
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
7 tính toán ma trận Jacobian của hàm mô hình liên quan đến các tham số như một cấu trúc mảng dense_like. Nó sẽ được thu nhỏ theo Sigma được cung cấp. Nếu không có (mặc định), Jacobian sẽ được ước tính bằng số. Các từ khóa chuỗi cho các phương thức ‘TRF và‘ Dogbox, có thể được sử dụng để chọn sơ đồ khác biệt hữu hạn, xem
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
6.
boolean, optional

Mới trong phiên bản 0.18.

full_outputboolean, tùy chọn

**kwargs

Nếu đúng, chức năng này trả về thông tin additioal: Infodict, Mesg và IER.

Mới trong phiên bản 1.9.poptarray

Các đối số từ khóa được truyền đến

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
9 cho
>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
0 hoặc
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
6 nếu không.

ReturnSpopTarray2-D array

Các giá trị tối ưu cho các tham số sao cho tổng số dư bình phương của

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
2 được giảm thiểu.

Mảng PCOV2-D

Hiệp phương sai ước tính của popt. Các đường chéo cung cấp phương sai của ước tính tham số. Để tính toán một lỗi độ lệch chuẩn trên các tham số sử dụng

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
3.

Làm thế nào tham số Sigma ảnh hưởng đến hiệp phương sai ước tính phụ thuộc vào đối số tuyệt đối_sigma, như được mô tả ở trên.dict (returned only if full_output is True)

Nếu ma trận Jacobian tại giải pháp không có thứ hạng đầy đủ, thì phương thức LM LM trả về một ma trận chứa đầy

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
5, mặt khác, các phương pháp Trf, và ‘Dogbox, sử dụng moore-Penrose pseudoinverse để tính toán ma trận hiệp phương sai.

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
5

InfodictDict (chỉ trả về nếu full_output là đúng)

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
6

Một từ điển của các đầu ra tùy chọn với các khóa:

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
7

Số lượng các cuộc gọi chức năng. Các phương pháp ‘TRF, và‘ Dogbox, không đếm các chức năng gọi cho xấp xỉ bằng số Jacobian, trái ngược với phương thức ‘LM.

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
8

Các giá trị hàm được đánh giá tại giải pháp.

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
9

Một hoán vị của ma trận R của hệ số QR của ma trận Jacobian gần đúng cuối cùng, cột được lưu trữ khôn ngoan. Cùng với IPVT, hiệp phương sai của ước tính có thể được xấp xỉ. Phương pháp ‘LM chỉ cung cấp thông tin này.

full_outputboolean, tùy chọn

Nếu đúng, chức năng này trả về thông tin additioal: Infodict, Mesg và IER.str (returned only if full_output is True)

Mới trong phiên bản 1.9.

full_outputboolean, tùy chọn

Nếu đúng, chức năng này trả về thông tin additioal: Infodict, Mesg và IER.int (returnned only if full_output is True)

Mới trong phiên bản 1.9.

full_outputboolean, tùy chọn

Nếu đúng, chức năng này trả về thông tin additioal: Infodict, Mesg và IER.

Mới trong phiên bản 1.9.

Các đối số từ khóa được truyền đến
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
9 cho
>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
0 hoặc
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
6 nếu không.

ReturnSpopTarray

Các giá trị tối ưu cho các tham số sao cho tổng số dư bình phương của
>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
2 được giảm thiểu.

Mảng PCOV2-D

Hiệp phương sai ước tính của popt. Các đường chéo cung cấp phương sai của ước tính tham số. Để tính toán một lỗi độ lệch chuẩn trên các tham số sử dụng

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')
3.

Làm thế nào tham số Sigma ảnh hưởng đến hiệp phương sai ước tính phụ thuộc vào đối số tuyệt đối_sigma, như được mô tả ở trên.

Nếu ma trận Jacobian tại giải pháp không có thứ hạng đầy đủ, thì phương thức LM LM trả về một ma trận chứa đầy

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
5, mặt khác, các phương pháp Trf, và ‘Dogbox, sử dụng moore-Penrose pseudoinverse để tính toán ma trận hiệp phương sai.

InfodictDict (chỉ trả về nếu full_output là đúng)

Một từ điển của các đầu ra tùy chọn với các khóa:

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c

Số lượng các cuộc gọi chức năng. Các phương pháp ‘TRF, và‘ Dogbox, không đếm các chức năng gọi cho xấp xỉ bằng số Jacobian, trái ngược với phương thức ‘LM.

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')

Các giá trị hàm được đánh giá tại giải pháp.

>>> popt, pcov = curve_fit(func, xdata, ydata)
>>> popt
array([2.56274217, 1.37268521, 0.47427475])
>>> plt.plot(xdata, func(xdata, *popt), 'r-',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

Một hoán vị của ma trận R của hệ số QR của ma trận Jacobian gần đúng cuối cùng, cột được lưu trữ khôn ngoan. Cùng với IPVT, hiệp phương sai của ước tính có thể được xấp xỉ. Phương pháp ‘LM chỉ cung cấp thông tin này.

>>> popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5]))
>>> popt
array([2.43736712, 1.        , 0.34463856])
>>> plt.plot(xdata, func(xdata, *popt), 'g--',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

>>> plt.xlabel('x')
>>> plt.ylabel('y')
>>> plt.legend()
>>> plt.show()

Hướng dẫn fit 2d function python - phù hợp với Python chức năng 2d