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

Python中小数据集正弦曲线拟合异常,求正确实现方法

正弦曲线拟合问题求助

我一直无法生成符合预期的正弦曲线(其参数后续将用于类似Angstrom法的分析),目前的结果已是最接近预期的版本。Mathematica可以轻松生成正确的曲线,但Python中拟合出的结果不符合要求——蓝线为Python拟合结果,红线为预期结果。我怀疑是振幅过高导致scipy无法正确识别,尝试了归一化处理但没有改善。

我有两个y_data列表,后续需要对比两条曲线的振幅和相位差,但当前首要需求是解决正弦曲线拟合问题。我是Python新手,尝试了多个示例都无法适配我的数据集,希望得到帮助:

import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt
from sklearn import preprocessing


def normalize(list):
    scaler = preprocessing.MinMaxScaler(feature_range = (-1,1))
    r_list = list.reshape(-1,1)
    nrlist = scaler.fit_transform(r_list)
    nlist = nrlist.reshape(-1,)
    print(nlist)
    return nlist


x_data = np.array([0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390])

#y_data = np.array([213.81356073047021, 218.49141430729355, 208.71044773757197, 204.4578535768235, 213.38830131439533, 218.06615489121873, 208.28518832149715, 204.4578535768235, 213.38830131439533, 218.91667372336838, 209.98622598579655, 207.43466948934744, 215.51459839476962, 219.34193313944326, 209.56096656972167, 205.73363182504804, 213.81356073047021, 219.34193313944326, 209.13570715364685, 205.73363182504804, 214.23882014654504, 219.76719255551808, 209.98622598579655, 206.58415065719774, 216.79037664299415, 220.61771138766778, 210.83674481794628])

y_data = np.array([215.66887756527237, 220.27067278975787, 210.6487373203791, 206.46528711630134, 215.25053254486457, 219.85232776935007, 210.2303922999713, 206.46528711630134, 215.25053254486457, 220.6890178101656, 211.9037723816024, 209.39370225915576, 217.34225764690348, 221.1073628305734, 211.4854273611946, 207.72032217752465, 215.66887756527237, 221.1073628305734, 211.06708234078684, 207.72032217752465, 216.0872225856801, 221.52570785098118, 211.9037723816024, 208.5570122183402, 218.59729270812676, 222.36239789179672, 212.74046242241795])

print(y_data)
nylist = normalize(y_data)

def test_func(x, a, b):
    return a * np.sin(b * x)

params, params_covariance = optimize.curve_fit(test_func, x_data, nylist,
                                               p0=[2, 2])

print(params)


plt.figure(figsize=(6, 4))
plt.scatter(x_data, nylist, label='Data')
plt.plot(x_data, test_func(x_data, params[0], params[1]),
         label='Fitted function')

plt.legend(loc='best')

plt.show()

感谢您的帮助!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:54:15