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

复杂数据集曲线拟合问询:共享参数的双函数拟合实现

嘿,我看你现在是想给复数数据集做拟合,让实部和虚部的函数共享同一组参数,但目前是分开调用curve_fit分别拟合实部和虚部对吧?这样做的问题在于,两次拟合得到的参数a,b,c,d会是独立优化的,没法实现你想要的参数共享效果。我来给你调整下代码,实现同时拟合实部和虚部并共享参数的需求:

核心思路

把实部和虚部的计算合并成一个函数,让它返回拼接后的实部+虚部数组,同时把观测数据的实部和虚部也拼接成一个一维数组,这样curve_fit就能在一次拟合中同时最小化实部和虚部的残差,保证参数是两组数据共同优化出来的。

修改后的代码

import numpy as np
from scipy.optimize import curve_fit

# 假设k、kappa1、kappa2是你已经定义好的已知参数
# k = ...
# kappa1 = ...
# kappa2 = ...

def combined_func(x, a, b, c, d):
    # 先计算完整的复数表达式
    complex_term = (a + 1j*b) * (np.exp(1j*k*x - kappa1*x) - np.exp(kappa2*x)) + \
                   (c + 1j*d) * (np.exp(-1j*k*x - kappa1*x) - np.exp(-kappa2*x))
    # 把实部和虚部拼接成一个一维数组返回
    return np.concatenate([np.real(complex_term), np.imag(complex_term)])

# 准备拼接后的观测数据:实部在前,虚部在后
y_combined = np.concatenate([yReal, yImag])

# 执行拟合,可选传入初始参数p0帮助收敛
popt, pcov = curve_fit(combined_func, x, y_combined, p0=[1, 0, 1, 0])

# 输出共享的最优参数
print(f"最优参数:a={popt[0]:.4f}, b={popt[1]:.4f}, c={popt[2]:.4f}, d={popt[3]:.4f}")

补充说明

  • 这样拟合出来的popt就是实部和虚部共享的参数组,相比分开拟合,结果更符合你“共享参数”的需求
  • 如果拟合收敛有问题,一定要给curve_fit传入合理的初始参数p0,初始值越接近真实值,拟合成功率越高
  • 确保k、kappa1、kappa2是提前定义好的已知量,不能是未赋值的变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:52