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

如何通过数据集求解函数y=Ax^(4/3)的参数A?

解决y=Ax^(4/3)的参数拟合问题

1. 修正curve_fit的核心错误

你当前的拟合函数参数顺序完全颠倒了,curve_fit要求拟合函数的第一个参数是自变量x,后续才是待拟合的参数。你的写法会让程序把A当成自变量、x当成拟合参数,直接导致结果完全错误。

修正后的代码:

from scipy.optimize import curve_fit

def func(x, A):
    return A * x**(4/3)

# 代入你的x、y数据
popt, pcov = curve_fit(func, x[:18], y[:18])
print(popt)  # 此时应该能得到接近0.055的合理结果

2. 优化线性化拟合的稳定性

你之前用对数线性化+polyfit时,移除点后斜率波动大,本质是对数变换会放大小数值点的误差。可以通过以下方式优化:

  • 不要随意删除数据点,仅移除明确的异常值(比如用3σ准则判定)
  • 使用加权最小二乘法,给y值较大的点更高权重(这类点的对数变换误差更小):
    import numpy as np
    
    # 线性化转换:ln(y) = ln(A) + (4/3)ln(x)
    ln_x = np.log(x[:18])
    ln_y = np.log(y[:18])
    # 用原始y值作为权重,放大可靠数据的影响力
    weights = y[:18]
    # 加权拟合一次直线
    coeffs = np.polyfit(ln_x, ln_y, 1, w=weights)
    # 还原A值
    A = np.exp(coeffs[1])
    print(A)
    

3. 验证拟合效果的实用方法

无论用哪种方法,拟合后都建议画图验证效果:

import matplotlib.pyplot as plt

# 生成拟合曲线的x序列
x_fit = np.linspace(min(x[:18]), max(x[:18]), 100)
y_fit = func(x_fit, popt[0])

plt.scatter(x[:18], y[:18], label='原始数据')
plt.plot(x_fit, y_fit, 'r-', label=f'拟合曲线 A={popt[0]:.4f}')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:34