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

如何用Python同时对双函数应用最小均方拟合获取参数Rr、Lr、cm

双函数联合最小均方拟合的可行方案

1. 利用scipy.optimize.minimize自定义总损失

不用手动实现完整的最小均方计算逻辑,直接借助scipy.optimize.minimize最小化两个函数的均方误差之和:

  • 先定义两个描述垂直轴行为的目标函数func1和func2
  • 编写总损失函数,输入待求参数[Rr, Lr, cm],分别计算两个函数与仿真数据的均方误差并求和
  • 传入初始参数(建议用Excel手动拟合的结果)和仿真数据,调用minimize求解最优参数

示例代码:

import numpy as np
from scipy.optimize import minimize

# 替换为你的第一个垂直轴行为公式
def func1(x, Rr, Lr, cm):
    return ...

# 替换为你的第二个垂直轴行为公式
def func2(x, Rr, Lr, cm):
    return ...

def total_loss(params, x, y1_exp, y2_exp):
    Rr, Lr, cm = params
    y1_pred = func1(x, Rr, Lr, cm)
    y2_pred = func2(x, Rr, Lr, cm)
    mse1 = np.mean((y1_pred - y1_exp)**2)
    mse2 = np.mean((y2_pred - y2_exp)**2)
    return mse1 + mse2

# 初始参数(用Excel结果或合理值)
initial_guess = [1.0, 0.5, 0.01]
# 仿真数据:x为输入变量,y1_exp、y2_exp为对应输出的仿真值
x_data = np.array(...)
y1_exp_data = np.array(...)
y2_exp_data = np.array(...)

result = minimize(total_loss, initial_guess, args=(x_data, y1_exp_data, y2_exp_data))
optimal_Rr, optimal_Lr, optimal_cm = result.x

2. 合并双函数为单向量适配scipy.curve_fit

curve_fit其实支持输出向量的函数,只需将两个函数的输出拼接成一维数组,同时把仿真数据也做对应拼接:

示例代码:

from scipy.optimize import curve_fit

def combined_func(x, Rr, Lr, cm):
    y1 = func1(x, Rr, Lr, cm)
    y2 = func2(x, Rr, Lr, cm)
    return np.concatenate([y1, y2])

# 拼接仿真数据
combined_exp = np.concatenate([y1_exp_data, y2_exp_data])
popt, pcov = curve_fit(combined_func, x_data, combined_exp, p0=initial_guess)

optimal_Rr, optimal_Lr, optimal_cm = popt

3. 使用lmfit库简化多参数拟合

lmfit针对多参数、多输出拟合做了优化,无需手动拼接损失,直接定义参数和残差函数即可:

示例代码:

from lmfit import Parameters, minimize

params = Parameters()
params.add('Rr', value=initial_guess[0])
params.add('Lr', value=initial_guess[1])
params.add('cm', value=initial_guess[2])

def residual(params, x, y1_exp, y2_exp):
    Rr = params['Rr'].value
    Lr = params['Lr'].value
    cm = params['cm'].value
    y1_pred = func1(x, Rr, Lr, cm)
    y2_pred = func2(x, Rr, Lr, cm)
    return np.concatenate([y1_pred - y1_exp, y2_pred - y2_exp])

result = minimize(residual, params, args=(x_data, y1_exp_data, y2_exp_data))
optimal_Rr = result.params['Rr'].value
optimal_Lr = result.params['Lr'].value
optimal_cm = result.params['cm'].value

关键注意事项

  • 初始参数选择:务必用Excel手动拟合的结果作为初始值,避免算法陷入局部最优解
  • 误差加权:如果两个函数的输出量级差异较大,可在损失函数中对均方误差添加权重,确保两个拟合方向的平衡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:35:23