python - 如何将数据点拟合到 Python 中的函数 e**x?
问题描述
我目前正在尝试将一组数据点拟合到函数 e^x 中。似乎数据点绘制得很好,但无论出于何种原因,当我尝试拟合 e^x 时,结果都是一条水平线。数据点是指数的。谁能看到可能导致此问题的原因?
以下是一些示例数据:csv 数据
这是代码:
from matplotlib import pyplot as plt
from matplotlib import style
from scipy.optimize import curve_fit
from math import e
import numpy as np
x_data, y_data = np.loadtxt("analog-data.csv", unpack=True, delimiter=',')
def func1(x, a, b, c):
return a + (b * (e**(c * x)))
initialGuess = [1, -1, -1]
params, params_covariance = curve_fit(func1, x_data, y_data, p0=initialGuess, absolute_sigma=True)
print(params)
plt.plot(x_data, func1(x_data, params[0], params[1], params[2]), color='orange', label='Sin Fit')
plt.plot(x_data, (y_data - func1(x_data, params[0], params[1], params[2])), 'o', color='orange')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.title('Title')
plt.legend()
plt.show()
解决方案
您的第二个绘图功能似乎有问题。您的曲线拟合在原始 x 和 y 数据上,但您正在绘制 xdata 和 ydata-stuff。仅在 xdata 和 ydata 上将 plt.plot 替换为 plt.scatter。
from matplotlib import pyplot as plt
from matplotlib import style
from scipy.optimize import curve_fit
from math import e
import numpy as np
x_data = np.array([500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500])
y_data = np.array([31.64, 63.20, 75.1, 84.77 , 90.82, 94.24 ,96.39 ,97.95 ,98.63])
def func1(x, a, b, c):
return a + b*np.exp(c * x)
initialGuess = np.array([0, -1, 0])
params, params_covariance = curve_fit(func1, x_data, y_data, p0=initialGuess, absolute_sigma=True)
print(params)
# print(params_covariance)
plt.plot(x_data, func1(x_data, params[0], params[1], params[2]), color='orange', label='Sin Fit')
# plt.plot(x_data, (y_data - func1(x_data, params[0], params[1], params[2])), 'o', color='orange')
plt.scatter(x_data, y_data)
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.title('Title')
plt.show()
推荐阅读
- c++ - 面向对象编程中的问题解决
- r - 如何使用谷歌 API 翻译 R 中的所有数据
- php - Laravel 7 一对多关系?
- javascript - 如何使用对象中的键比较 JavaScript 中的两个对象数组
- php - 如何修复 Index.php 中的 Laravel 自动加载错误?
- c# - 正则表达式匹配 EU , EU 等首字母缩略词
- c - pthread in C : i can't figure why pthread_cond_signal is not waking up one thread
- azure - Azure Graph API - 添加自定义签名密钥 - 证书无效:密钥值是无效证书
- sql - 如何在现有数据库中创建表?
- amazon-web-services - 如何在 Appsync 中自定义 graphql 错误响应格式?