已知参数的二维高斯函数,求f(x,y)=g₀/e时的(xₑ,yₑ)
求解二维高斯函数的特定等值点
已知二维高斯函数 f(x,y),其峰值g₀对应坐标(x₀,y₀),所有参数(g₀、x₀、y₀、sigma_x、sigma_y、offset)均由曲线拟合得到。需要找到一组满足f(xₑ,yₑ)=g₀/e的(xₑ,yₑ)值,无需手动推导,借助Python工具库实现。
已定义的高斯函数:
import numpy as np def f(x, y, g0, x0, y0, sigma_x, sigma_y, offset): return offset + g0 * np.exp(-(((x - x0)**2/(2*sigma_x**2)) + ((y - y0)**2/(2*sigma_y**2))))
解决方案:用scipy.optimize.root求解非线性方程
无需手动推导公式,直接借助SciPy的数值求解器找到满足条件的点。核心思路是构造目标函数,让f(x,y) - g₀/e = 0,再用数值方法求解该方程。
完整代码示例
from scipy.optimize import root import numpy as np # 替换为你实际拟合得到的参数 g0 = 10 x0 = 5 y0 = 3 sigma_x = 2 sigma_y = 1.5 offset = 1 # 构造目标方程:让f(x,y)等于g0/e,即差值为0 def target_func(vars): x, y = vars return f(x, y, g0, x0, y0, sigma_x, sigma_y, offset) - g0 / np.e # 初始猜测值:选在峰值附近,比如x方向偏移sigma_x,y保持峰值坐标 initial_guess = [x0 + sigma_x, y0] # 执行求解 result = root(target_func, initial_guess) # 输出结果 if result.success: xe, ye = result.x print(f"找到一组解:(xₑ, yₑ) = ({xe:.4f}, {ye:.4f})") # 验证结果 calculated_value = f(xe, ye, g0, x0, y0, sigma_x, sigma_y, offset) target_value = g0 / np.e print(f"验证:f(xₑ,yₑ) = {calculated_value:.4f},目标值g₀/e = {target_value:.4f}") else: print("求解失败,原因:", result.message)
说明
- 初始猜测值的选择很关键:选在峰值
(x₀,y₀)附近(比如示例中x0+sigma_x,y0),能让求解器更快收敛到正确解。 - 求解成功后建议验证结果,避免因初始值或参数问题得到错误解。
内容的提问来源于stack exchange,提问作者hexaquark
相关产品推荐
相关产品推荐

