python拟合非线性模型_python-绘制分段拟合到非线性数据

我有一个与this previous StackOverflow question类似的问题.我有一个数据集,我想将几??个分段函数拟合到该数据集中,然后绘制结果.

数据在下面以红色绘制.

为了提供一些背景信息,y值表示电动机旋转x度所花费的毫秒数.我已将原始值上传到this Pastebin.

我现在想分段地拟合三个函数:

>多项式适合数据的开始,在该数据处电动机正在加速到最大速度.

>达到最大速度时的线性拟合.

>多项式拟合后,电动机将关闭并减速.

到目前为止,我已经尝试使用下面的代码对两个线性函数进行分段拟合.给定数据的样子,我期望看到一个沿数据从原点到大约ms = 550的斜率,然后从那里平行于x轴的第二条线.

但是,这不是我得到的:

?

在尝试使用三个函数进行逐段拟合之前,我首先要了解为什么得到此图而不是我期望的图.

所以我的问题是:

>谁能解释如何更正我的代码以使其适合两个线性函数?

>如何使用三个函数扩展代码以绘制分段拟合?

用于创建以上绘图的代码如下:

from pandas import *

import matplotlib.pyplot as plt

import numpy as np

from scipy import optimize

#Getting data using Pandas

df = read_csv("test_data.csv")

ms = df["ms"].values

degrees = df["Degrees"].values

#A piece wise function taken from the other stackoverflow

def piecewise_linear(x, x0, y0, k1, k2):

return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])

#Setting linspace and making the fit

x_new = np.linspace(ms[0], ms[-1])

p , e = optimize.curve_fit(piecewise_linear, ms, degrees)

#Plotting data and fit

fig = plt.figure()

ax = fig.add_subplot(111)

ax.plot(x_new, piecewise_linear(x_new, *p), '.', df)

ax.set_ylim([0, 450])

ax.set_xlim([0, 800])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值