【问题标题】:Power Law fit giving a straight line幂律拟合给出一条直线
【发布时间】:2019-04-03 09:08:50
【问题描述】:

我基本上是在尝试做一个适合以下距离和加速度数组的幂律。但是,幂律拟合基本上是给我一条直线。对于如何获得真正的幂律关系,我们将不胜感激。

Dis= [0.2065 0.2661 0.2026 0.22   0.2065 0.2661 0.264  0.2173 0.2615 0.2682
 0.407  0.4085 0.409  0.4045 0.405  0.3985 0.5235 0.5846 0.5171 0.5385
 0.6415 0.7661 0.699  0.6523 0.7745 0.7332 0.842  0.9085 0.909  0.8445
 0.84   0.8635]

Acc= [-43.3  -3.  -86.8 -10.5 -56.2  -2.5  -7.2 -12.2  -4.6  -9.  -21.3  -2.
  -3.2  -2.7  -5.8  -6.8 -15.5  -1.8 -22.1  -0.5  -8.7  -0.8   0.   -3.3
  -0.8  -0.8 -12.5  -0.5  -0.7   0.3  -1.   -1.2] 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def f(r, c0, m, c):
    return c0 + r**m * c
data= pd.read_table('/Users/Hrihaan/Desktop/File.txt', dtype=float, header=None, sep='\s+').values
dis=r=data[:,0]
acc=data[:,1]
dis_min=np.min(dis)
dis_max=np.max(dis)
popt, pcov= curve_fit(f, dis, acc, p0 = np.asarray([-1, 10**5, 0]))
rr = np.linspace(dis_min, dis_max, len(dis))
aa = f(rr, *popt)
plt.xlabel('Distance (km)', fontsize=30)
plt.ylabel(' Acceleration (m/s-2)', fontsize=30)
plt.scatter(r, a, c='burlywood', s=10**2)
plt.plot(rr, aa, linewidth=3, label='Power law fit')
plt.show()

【问题讨论】:

    标签: python numpy scipy curve-fitting


    【解决方案1】:

    这种数据和方程的组合似乎对curve_fit() 中使用的非线性求解器的初始参数值非常敏感。我似乎很适合以下拟合值:

    c = -2.2896848166160833E-21
    c0 = -5.0760537033961146E+00
    m = -3.2529524073781118E+01
    

    给出 R 平方 = 0.899 和 RMSE = 5.83。

    【讨论】:

    • 谢谢,您能告诉我如何获得 RMSE 吗?另外,你是怎么得到这个参数选择的?
    • 对于 RMSE,我使用了以下步骤:A) 错误 = 预测 - 实际 B) sq_error = numpy.square(error) C) mse = numpy.mean(sq_error) D) rmse = numpy.sqrt (mse)和拟合我在zunzun.com/Equation/2/Power/Standard%20Power%20With%20Offset使用我的开源Python在线曲线拟合这个方程,它使用一个名为差分进化的遗传算法来给出curve_fit()的初始参数值,这样我就不必猜测他们。实际上,我只是复制并粘贴了您的数据,然后点击提交按钮。
    猜你喜欢
    • 2016-06-24
    • 2020-05-15
    • 2015-11-23
    • 2021-06-04
    • 1970-01-01
    • 2020-08-19
    • 2017-04-07
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多