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

已知多项式拟合曲线与部分参数,如何求解系数d?

问题:从拟合曲线中获取系数d的具体值

我有一组数据集,已通过以下代码绘制并拟合曲线:

import numpy as np
import matplotlib.pyplot as plt

R= -1.6, -1.4, -1.2, -1.0, -0.8, -0.6, -0.4, -0.2,  0.0,  0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6
power = 486.040152, 343.466487, 233.706048, 151.069770, 90.792498, 48.455720, 20.748440, 5.267210, 0.080000, 5.267210, 20.748440, 48.455720, 90.792498, 151.069770, 233.706048, 343.466487, 486.040152
p = np.polyfit(R, power, 4) #定义多项式
f = np.poly1d(p) #定义函数
plt.plot(R, power, '<', color="brown", fillstyle='none', label="R(T=1.23)", markersize=12) 
plt.plot(R, f(R), color="brown", linewidth=2.0)
plt.ylabel('Power', fontsize='20')
plt.xlabel('Distance', fontsize='20') 
plt.legend(framealpha=1, frameon=False, fontsize='16', loc=(0.4, 0.75), ncol=1, handletextpad=-0.4)

绘制的图像如下:
拟合曲线

该曲线还可表示为以下函数形式:

f(T, R) = (a1 * T²) + (b1 * T⁴) + (a2 * R²) + (b2 * R⁴) + (d * T² * R²)

已知参数:a1 = -73.08、b1 = 29.16、a2 = 74.37、b2 = 25.46、T = 1.23,请问如何从拟合曲线中获取系数d的具体值?


解决方案

有两种方法可以获取系数d:

方法一:对比多项式系数求解

  1. 代入T并整理目标函数
    先计算T的幂次:

    • T² = 1.23² = 1.5129
    • T⁴ = (1.23²)² ≈ 2.28886641

    把已知参数代入目标函数,整理为关于R的多项式:

    f(R) = (-43.8194) + (74.37 + 1.5129*d)R² + 25.46R⁴
    

    注:常数项由a1*T² + b1*T⁴计算得出。

  2. 对比拟合多项式的系数
    np.polyfit(R, power, 4)返回的系数数组p是从高次到低次排列:[R⁴系数, R³系数, R²系数, R系数, 常数项]。

    由于数据关于R对称,R的奇次项系数会接近0。取R²项的系数p[2],代入等式:

    p[2] = 74.37 + 1.5129*d
    

    求解d:

    d = (p[2] - 74.37) / 1.5129
    

方法二:直接拟合目标函数求解(更准确)

直接以目标函数为模型,仅将d作为未知参数拟合,避免多项式拟合的误差累积:

import numpy as np
from scipy.optimize import curve_fit

# 已知参数
a1 = -73.08
b1 = 29.16
a2 = 74.37
b2 = 25.46
T = 1.23
T2 = T**2
T4 = T**4

# 定义目标函数
def power_model(R, d):
    return a1*T2 + b1*T4 + (a2 + d*T2)*np.square(R) + b2*np.power(R, 4)

# 转换数据为numpy数组
R = np.array([-1.6, -1.4, -1.2, -1.0, -0.8, -0.6, -0.4, -0.2,  0.0,  0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6])
power = np.array([486.040152, 343.466487, 233.706048, 151.069770, 90.792498, 48.455720, 20.748440, 5.267210, 0.080000, 5.267210, 20.748440, 48.455720, 90.792498, 151.069770, 233.706048, 343.466487, 486.040152])

# 拟合求解d
popt, _ = curve_fit(power_model, R, power)
d_value = popt[0]
print(f"系数d的值为:{d_value:.4f}")

运行这段代码后,即可得到准确的d值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:28:12