Распределение Рэлея Curve_fit на Python

Souliki

В настоящее время я работаю над лабораторным отчетом для Броуновского движения, используя это уравнение PDF с целью оценки D: уравнение Броуновского PDF

И я пытаюсь подогнать его под гистограмму. Однако всякий раз, когда я рисую свой curve_fits, это линия, которая неправильно отображается на гистограмме. Пример гистограммы с плохой кривой curve_fit

А вот мой код:

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

# Variables
eta = 1e-3 
ra = 0.95e-6
T = 296.5
t = 0.5

# Random data
r = np.array(np.random.rayleigh(0.5e-6, 500))

# Histogram
plt.hist(r, bins=10, density=True, label='Counts')

# Curve fit
x,y = np.histogram(r, bins=10, density=True)
x = x[2:]
y = y[2:]
bin_width = y[1] - y[2]
print(bin_width)
bin_centers = (y[1:] + y[:-1])/2
err = x*0 + 0.03

def f(r, a):
    return (((1e-6)3*np.pi*r*eta*ra)/(a*T*t))*np.exp(((-3*(1e-6 * r)**2)*eta*ra*np.pi)/(a*T*t))

print(x) # these are flipped for some reason
print(y)

plt.plot(bin_centers, x, label='Fitting this', color='red')


popt, pcov = optimize.curve_fit(f, bin_centers, x, p0 = (1.38e-23), sigma=err, maxfev=1000)

plt.plot(y, f(y, popt), label='PDF', color='orange')
print(popt)

plt.title('Distance vs Counts')
plt.ylabel('Counts')
plt.xlabel('Distance in micrometers')
plt.legend()

Проблема с моей кривой_fit? Или я упустил какую-то основную проблему?

РЕДАКТИРОВАТЬ: Я разбил D, чтобы получить константу Больцмана, как aв функции, поэтому в ней больше чисел, fчем в уравнении выше. D и Гамма.

Я попытался возиться с начальными условиями и построить функцию 1.38e-23вместо popt, но это делает это (фиолетовая линия). Это говорит мне, что что-то не так с уравнением для f, но я не вижу никаких проблем, когда смотрю на него. Я что-то упускаю?

РЕДАКТИРОВАТЬ 2: Я изменил функцию на это, чтобы упростить ее и соответствовать numpy.random.rayleigh()распределению:

def f(r, a):
    return ((r)/(a))*np.exp((-1*(r)**2)/(2*a))

Но это не решает проблему, заключающуюся в том, что curve_fitэто линия с положительным наклоном, а не что-то отдаленно то, что меня интересует. Теперь я больше не понимаю, в чем проблема.

tom10

Здесь есть несколько вещей. Я не думаю, что x и y когда-либо менялись местами, или, по крайней мере, когда я предполагал, что это не так, все, казалось, работало нормально. Я также очистил несколько частей кода, например, я не уверен, почему вы вызываете две разные гистограммы; и я думаю, что могли быть проблемы с обработкой одноэлементного кортежа параметров. Кроме того, для подбора кривой первоначальное предположение параметра часто должно быть приблизительным, поэтому я тоже изменил его.

Вот версия, которая мне подходит:

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

# Random data
r = np.array(np.random.rayleigh(0.5e-6, 500))

# Histogram
hist_values, bin_edges, patches = plt.hist(r, bins=10, density=True, label='Counts')

bin_centers = (bin_edges[1:] + bin_edges[:-1])/2

x = bin_centers[2:]  # not necessary, and I'm not sure why the OP did this, but I'm doing this here because OP does
y = hist_values[2:]

def f(r, a):
    return (r/(a*a))*np.exp((-1*(r**2))/(2*a*a))

plt.plot(x, y, label='Fitting this', color='red')

err = x*0 + 0.03
popt, pcov = optimize.curve_fit(f, x, y, p0 = (1.38e-6,), sigma=err, maxfev=1000)

plt.plot(x, f(x, *popt), label='PDF', color='orange')

plt.title('Distance vs Counts')
plt.ylabel('Counts')
plt.xlabel('Distance in Meters') # Motion seems to be in micron range, but calculation and plot has been done in meters
plt.legend()

образ

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Использование SciPy curve_fit для прогнозирования окончательного результата

Почему `curve_fit` не может оценить ковариацию параметра, если параметр подходит точно?

Подгонка сигнала с фоном с помощью scipy curve_fit ()

Python curve_fit с несколькими независимыми переменными

Подгонка экспоненциальной функции через две точки данных с помощью scipy curve_fit

Использование scipy curve_fit для переменного количества параметров

Использование Scipy curve_fit с кусочной функцией

Подгонка логнормального распределения в Python с использованием CURVE_FIT

Ограничьте гауссовское соответствие с помощью curve_fit

Улучшение подгонки по Гауссу с использованием *** curve_fit *** из scipy и python 3.x

scipy curve_fit не любит математический модуль

scipy curve_fit и локальные минимумы: как можно быстрее добраться до глобальных минимумов

curve_fit с многочленами переменной длины

Подгонка трапеции с помощью curve_fit

Подходит для Python с помощью curve_fit

Python: curve_fit не работает для функции с тремя параметрами подгонки и неправильным интегралом

Scipy curve_fit не работает при подгонке по многим параметрам. Есть ли способ улучшить результаты?

Как использовать curve_fit в Python?

Python использует curve_fit для соответствия логарифмической функции

Прогнозирование / экстраполяция с помощью Scipy Curve_Fit

Проблема регрессии степенного закона между curve_fit, python и excel

подгонка кривой с помощью curve_fit из scipy в Python

Using curve_fit to a function defined by indefinite integral in Python

Нормализация значений в curve_fit закона Планка из набора данных * Редактировать *

Python, scipy, curve_fit, bounds: как я могу ограничить параметр двумя интервалами?

Принудительное соответствие данных точкам с помощью curve_fit

Python curve_fit с измеренными точками данных

Границы в scipy curve_fit

Python curve_fit "объект слишком глубокий для желаемого массива"

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    How to click an array of links in puppeteer?

  3. 3

    (fields.E300) Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной.

  4. 4

    Modbus Python Schneider PM5300

  5. 5

    Elasticsearch - Нечеткий поиск не дает предложения

  6. 6

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  7. 7

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  8. 8

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  9. 9

    Проблемы со сборкой Python Image Registration Toolkit

  10. 10

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  11. 11

    Vue js CLI 2 импортирует и использует плагин javascript

  12. 12

    Автозаполнение с Java, Redis, Elastic Search, Монго

  13. 13

    Текущая ветка не настроена для извлечения В конфигурации не найдено значение для ключа branch.master.merge

  14. 14

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  15. 15

    How to normalize different curves drawn with geom = "step" when using stat_summary

  16. 16

    Merging legends in plotly subplot

  17. 17

    ViewPager2 мигает / перезагружается при смахивании

  18. 18

    Vue 2 / Vue CLI 3: создание асинхронных однофайловых компонентов

  19. 19

    как я могу удалить vue cli 2?

  20. 20

    Ошибка «LINK: фатальная ошибка LNK1123: сбой при преобразовании в COFF: файл недействителен или поврежден» после установки Visual Studio 2012 Release Preview

  21. 21

    Single legend for Plotly subplot for line plots created from two data frames in R

популярныйтег

файл