【问题标题】:How do I solve the error in plot variable dimension mismatch?如何解决绘图变量尺寸不匹配的错误?
【发布时间】:2020-01-29 20:45:35
【问题描述】:

我正在尝试通过公式 2 拟合使用公式 1 生成的数据。前者有 3 个参数,而后者有 5 个拟合参数。但现在由于形状不匹配,绘制拟合曲线时出现错误。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c, d, e):
    return (((a/e) * (2*x)**b) + (d * (2*x)**c))

y = []
x = []
A = 6.7
B = 2.0
C = 0.115
for N in np.logspace(1, 9., 100, base = 10.):
    x.append(int(N))
    y.append(np.exp((A-np.log(int(N)))/B)+C)
plt.loglog(x, y, 'b:*', label='data')

popt, pcov = curve_fit(func, x, y)
print(popt)
plt.loglog(x, func(x, *popt))

我想看拟合曲线,但是最后一行'''plt.loglog(x, func(x, *popt))'''有尺寸错误

【问题讨论】:

    标签: python curve-fitting scipy-optimize


    【解决方案1】:

    一种方法是创建一个列表 y_model,在其中添加与每个 x 对应的元素 y。

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    
    def func(x, a, b, c, d, e):
        return (((a/e) * (2*x)**b) + (d * (2*x)**c))
    
    y = []
    x = []
    A = 6.7
    B = 2.0
    C = 0.115
    for N in np.logspace(1, 9., 100, base = 10.):
        x.append(int(N))
        y.append(np.exp((A-np.log(int(N)))/B)+C)
    
    popt, pcov = curve_fit(func, x, y)
    
    y_model = []
    for e in x:
        y_model.append(func(e, *popt))
    
    plt.loglog(x, y, 'b:*', label='data')
    plt.loglog(x, y_model)
    

    结果:

    【讨论】:

    • 因答案的卓越性和清晰性而受到支持。
    • @Neuling 另外,第二种方法是创建第二个函数,例如func2func 类似,但它采用类似数组的 x 作为输入并返回一个数组,其中每个元素是 y,对应于 x 输入的每个元素。
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2017-09-12
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多