В лабораторных инструкциях нам требовалось использовать Regressi, несколько устаревшее программное обеспечение с неинтуитивным интерфейсом (но очень мощное программное обеспечение)

[img]https://i. sstatic.net/DbKVcc4E.png[/img]
Два столбца для углов, два для неопределенностей, два для рассчитанных значений синуса и… подождите: два автоматически созданных столбца для неопределенностей в значениях синуса! Это здорово, и насколько мне известно, не существует другого бесплатного программного обеспечения с графическим интерфейсом, которое предлагало бы эту функцию. Всего за несколько кликов я могу определить выражение регрессии (здесь это простое y=a⋅x, но оно может быть и более сложным), и все!
В Python эквивалентная настройка будет выглядеть так:
Код: Выделить всё
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# python -m venv venv
# source venv/bin/activate
# pip install uncertainties numpy matplotlib scipy
import numpy as np
import matplotlib.pyplot as plt
import uncertainties.unumpy as unp
from scipy.optimize import curve_fit
# Initial data (angles of incidence and refraction)
i1 = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80])
i2 = np.array([0, 6.5, 13, 19.5, 25.5, 31, 35.5, 39, 41.5])
σ = 1
# Convert to objects with uncertainties
sin_i1 = unp.sin(unp.radians(unp.uarray(i1, σ)))
sin_i2 = unp.sin(unp.radians(unp.uarray(i2, σ)))
# i₁ in degrees
# i₂ in degrees
# Uncertainty in degrees
# Calculate sin(i₁) with uncertainties
# Calculate sin(i₂) with uncertainties
# Extract nominal values and uncertainties
sin_i1_vals = unp.nominal_values(sin_i1)
# Central values of sin(i₁)
sin_i2_vals = unp.nominal_values(sin_i2)
# Central values of sin(i₂)
sin_i1_err = unp.std_devs(sin_i1)
# Uncertainties of sin(i₁)
sin_i2_err = unp.std_devs(sin_i2)
# Uncertainties of sin(i₂)
# Plot data with error bars
plt.errorbar(sin_i1_vals, sin_i2_vals, xerr=sin_i1_err, yerr=sin_i2_err, fmt=' g', label='Measurements')
# Linear regression model: f(x) = a*x (intercept b = 0)
def linear_model(x, a):
return a * x
# Regression with curve_fit
popt, pcov = curve_fit(linear_model, sin_i1_vals, sin_i2_vals) # pcov: parameter covariance, not used but noted...
a_opt = popt[0] # Regression coefficient
# Plot the regression
plt.plot(sin_i1_vals, linear_model(sin_i1_vals, a_opt), 'tab:blue', label=f"Regression: sin i₂ = {a_opt:.4f} * sin i₁")
# Formatting and display
plt.title('sin i₂ = f(sin i₁)')
plt.xlabel('sin i₁')
plt.ylabel('sin i₂')
plt.xlim([0, 1])
plt.ylim([0, 0.7])
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 0.8, 0.1))
plt.grid(True)
plt.legend()
plt.show()

Вероятно, это также возможно и в R (о котором я знаю еще меньше чем Python) или Octave.
Но кое-что было у меня на уме уже несколько дней. Похоже, что Regressi в основном используется во Франции, так какое же программное обеспечение используют студенты в других странах для автоматического расчета распространения неопределенности в своих лабораторных работах? Что используют исследователи? (Я предполагаю, что они используют Origin Pro, поскольку их не волнует, если она не бесплатна.)
Итак, я искал альтернативу.
Сначала я попробовал SciDaVis/Alphaplot, который мне очень нравится… но я не смог найти, как автоматически распространять неопределенности. Я могу, конечно, создать столбец для σsinθ=∣cos(θ)∣×σθ вручную, но чтобы найти эту формулу, нужно поработать, и теперь, когда я знаю, что программа делает это автоматически, я не хочу больше делаю это сам!
Затем я попробовал labplot2, Gnuplot, LibreOffice Calc, GeoGebra, Dataplot, JASP, Jamovi. Ни в одном из этих вариантов программного обеспечения я не смог найти эту функцию
Я не могу поверить, что Regressi — единственное бесплатное программное обеспечение в мире, которое предлагает автоматическое распространение неопределенности. И если это так, то почему??? Чем пользуются студенты, не являющиеся французами? Почему Регресси не стал более широко известен и не считается важным?
Я, должно быть, что-то упускаю, не могли бы вы мне помочь?
Подробнее здесь: https://stackoverflow.com/questions/791 ... lternative
Мобильная версия