Как стать автором
Обновить

Комментарии 2

Код не самый оптимальный, потому читается тяжеловато. Вы напрасно отказались от Numpy. Всё равно вы его используете неявно через scipy. Многое можно сильно упростить.


GtoR не нужен, вместо него гораздо удобнее использовать np.degrees/np.radians.


Весь блок загрузки данных можно заменить на:


data = np.loadtxt("pyexp.dat")
angle = np.radians(data[:, 0])  # Первый столбик, переводим в радианы
experiment = data[:, 1]  # Второй столбик

С Numpy очень сильно упрощаются функции (и становятся намного быстрее, но для малого числа точек это неважно):


def U(X, Uo, To, B):  # Теоретическая функция
    return Uo * np.cos(X - To) ** 2 + B

def V(X, Uo, To, D):  # Её производная
    return np.abs(D * (Uo * np.sin(2 * (To - X))))

У вас переиспользуется переменная popt, это плохо и может привесит к ошибкам. Я бы вообще явно извлекал параметры и сделал бы суффиксы _rough (грубая оценка) и _opt (оптимум). Или лучше сделать именованный кортеж для параметров, чтоб параметры были сгруппированы. А то popt[1] читается намного хуже, чем popt.To или просто To.


Вычисление хи-квадрат тоже упрощается и записывается без цикла:


chi2 = np.sum(((theory - experiment) / errors) ** 2)

f-строки намного удобнее .format (кроме того, если записать две строки рядом, то они конкатенируются, плюсик не нужен).


rf"Поворот оси поляроида: $\theta_0={To:.2f}^\circ\pm{dTo:.2f}^\circ"

Чтобы получить нужно количество точек (скажем, 1000) из диапазона, можно использовать np.linspace:


theta = np.linspace(0, 2 * np.pi, 1000)

Это навскидку. Я думаю, можно сделать этот скрипт намного короче и читаемее.


А в целом я согласен, gnuplot очень хорош в своей нише, и для не очень сложной визуализации прекрасно работает. Спасибо за статьи, было интересно!

Большое спасибо за комментарий. Я добавил код, основанный на Ваших предложениях, в конец статьи. Надеюсь, Вы не против.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.