如何使用numpy.linalg.lstsq拟合余弦波

时间:2018-09-21 04:27:27

标签: python numpy data-science least-squares cosine

要求我使用numpy.linalg中的lstsq来拟合我绘制并显示如下的一组数据: strain vs time stress vs time

应变与时间之间的关系如下: 应变=应变_0 * cos(wt) 或\epsilon(t) = \epsilon_0 \cos(\omega t)

压力和时间之间的关系如下: 应力= E * strain_0 * cos(wt)-strain_rate w strain_0 * sin(wt) 或\sigma(t) = E\epsilon_0 \cos(\omega t) - \eta\omega\epsilon_0 \sin(\omega t)

问题是如何使用lstsq获得E和应变率(eta)?

我尝试过以下方法:

  def getModuli(t, strain, stress):
    """
    Fit stress and strain with respect to time.
    Should return E (elastic modulus)
    and eta (strain rate)
    """

    A = np.vstack([t,np.ones(len(t))]).T
    e_0,w = np.linalg.lstsq(A,strain)[0] 
    E_raw,eta_raw = np.linalg.lstsq(A,stress)[0]
    E = E_raw/e_0
    eta = eta_raw/(e_0*w)

    return E,eta

data = pd.read_csv('stressStrain.csv')
t = np.array(data['t'])
strain = np.array(data['strain'])
stress = np.array(data['stress'])
getModuli(t, strain, stress)

返回的数字没有意义。我应该如何正确做呢?

0 个答案:

没有答案