如何在Python中绘制sigma(a)反演后g关于sigma的函数图像
解决方案
核心思路
你不需要显式推导a(sigma)的表达式,利用现有采样的一一对应关系就能直接绘图:
- 先验证
sigma(a)在a∈[0,10]区间严格单调递增,每个sigma值唯一对应一个a值,天然满足反函数的映射要求 - 直接用你已有的10000个a采样点,批量计算每个a对应的sigma值和g值,把sigma作为横轴、g作为纵轴直接绘图即可
完整实现代码
import numpy as np import matplotlib.pyplot as plt # 可选:如果需要后续查询任意sigma对应的g值,导入插值工具 from scipy.interpolate import interp1d # 原函数定义 def sigma(a): sigma = 1 + 2*a*(np.sinh(a) - np.sin(a))/(np.cosh(a) + np.cos(a)) return sigma def g(a, sigma): g = 2*sigma*(np.cosh(a*(sigma - 1)/(sigma + 1)) + np.cos(a*(sigma - 1)/(sigma + 1)))/((sigma + 1)*(np.cosh(a) + np.cos(a))) return g # 生成a采样 a = np.linspace(0, 10, 10000) # 批量计算对应sigma和g sigma_arr = sigma(a) g_arr = g(a, sigma_arr) # 绘制g关于sigma的图像 plt.figure(figsize=(10,6)) plt.plot(sigma_arr, g_arr, label='g(σ)', linewidth=1.5) plt.xlabel('σ', fontsize=12) plt.ylabel('g(σ)', fontsize=12) plt.title('g关于σ的变化曲线', fontsize=14) plt.grid(alpha=0.3) plt.legend() plt.show() # 可选:构建a(sigma)的插值函数,支持任意sigma查询 a_of_sigma = interp1d(sigma_arr, a, kind='cubic') # 测试示例:查询sigma=5对应的a和g test_sigma = 5 test_a = a_of_sigma(test_sigma) test_g = g(test_a, test_sigma) print(f"sigma={test_sigma}时,对应a={test_a:.4f},g={test_g:.4f}")
补充说明
如果你的a采样区间更大、或者需要更高的反演精度,可以:
- 加密a的采样点数
- 替换插值方法为更高精度的方案,或者用
scipy.optimize.root_scalar做数值求根,对任意给定sigma求解sigma(a) - target_sigma = 0的根得到对应a
内容的提问来源于stack exchange,提问作者GregHawk
相关产品推荐
相关产品推荐

