You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Regressi替代软件:支持自动不确定度传播的免费GUI工具

光学折射实验与数据分析

我近期完成了一项光学实验,测量了入射角i₁和折射角i₂,将数据录入表格并绘制$\sin i₂ = f(\sin i₁)$曲线,角度测量不确定度为1°。实验要求使用Regressi这款软件——它功能强大,但界面老旧、操作不直观,可自动生成正弦值的不确定度列,仅需点击即可完成如$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, σ)))

# Extract nominal values and uncertainties
sin_i1_vals = unp.nominal_values(sin_i1)
sin_i2_vals = unp.nominal_values(sin_i2)
sin_i1_err = unp.std_devs(sin_i1)
sin_i2_err = unp.std_devs(sin_i2)

# 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)
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()

Python脚本改进建议

  • 加入加权回归:当前curve_fit未使用测量不确定度做加权,可通过sigma=sin_i2_err参数传入y方向不确定度,实现加权最小二乘回归,更符合实验数据的统计特性:
    popt, pcov = curve_fit(linear_model, sin_i1_vals, sin_i2_vals, sigma=sin_i2_err, absolute_sigma=True)
    
  • 输出回归参数的不确定度:利用pcov计算参数a的标准误差,补充结果输出:
    a_err = np.sqrt(np.diag(pcov))[0]
    print(f"回归系数a = {a_opt:.4f} ± {a_err:.4f}")
    
  • 精简冗余注释:保留关键说明,移除重复的注释内容,提升代码可读性;
  • 自动保存图像:添加plt.savefig('sin_i2_vs_sin_i1.png', dpi=300)语句,生成高清实验图像文件。

工具相关疑问与需求

我希望找到具备自动不确定度传播功能的免费GUI替代软件,先后测试了SciDaVis/Alphaplot、labplot2、Gnuplot、LibreOffice Calc、GeoGebra、Dataplot、JASP、Jamovi等工具,均未找到该功能。

Regressi主要在法国使用,想了解:

  1. 其他国家学生/研究者常用的同类工具;
  2. Regressi未广泛普及的原因;
  3. 符合需求的替代软件推荐。

Regressi未广泛普及的原因

  • 语言与本地化限制:Regressi主要面向法语用户,缺乏多语言支持,非法语区用户学习门槛高;
  • 交互体验落后:界面老旧、操作逻辑不直观,不符合现代科研工具的设计趋势;
  • 社区与生态薄弱:没有活跃的用户社区、文档资源稀缺,问题难以及时得到解决;
  • 功能针对性过强:仅聚焦特定实验数据分析场景,通用性不足,无法覆盖多样化的科研需求。

免费GUI替代工具推荐

  • OriginPro(教育免费版):商业软件但提供免费教育授权,支持不确定度自动传播、多种曲线拟合与专业可视化,是全球科研人员常用工具;
  • QtiPlot:开源数据处理软件,支持不确定度计算与传播,内置多种拟合模型,界面风格接近Origin,适合实验数据分析;
  • LabVIEW(学生版):NI旗下工具,适配自动化实验场景,可通过内置函数实现不确定度传播与回归分析;
  • DataGraph:macOS平台免费科研绘图工具,支持不确定度传播与线性/非线性拟合,界面简洁易用;
  • 自定义Python GUI:若能接受轻度代码操作,可将现有Python脚本用PyQt或Tkinter封装成简易GUI,实现一键式不确定度计算与拟合,功能完全自定义。

内容的提问来源于stack exchange,提问作者yeKcim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:20:12