我一直试图使用scipy.optimize.curve_fit在一段时间内对某些数据进行指数拟合,但我遇到了真正的困难.我真的看不出任何理由为什么这不起作用,但它只会产生一条直线,不明白为什么!
任何帮助将非常感激
from __future__ import division
import numpy
from scipy.optimize import curve_fit
import matplotlib.pyplot as pyplot
def func(x,a,b,c):
return a*numpy.exp(-b*x)-c
yData = numpy.load('yData.npy')
xData = numpy.load('xData.npy')
trialX = numpy.linspace(xData[0],xData[-1],1000)
# Fit a polynomial
fitted = numpy.polyfit(xData, yData, 10)[::-1]
y = numpy.zeros(len(trailX))
for i in range(len(fitted)):
y += fitted[i]*trialX**i
# Fit an exponential
popt, pcov = curve_fit(func, xData, yData)
yEXP = func(trialX, *popt)
pyplot.figure()
pyplot.plot(xData, yData, label='Data', marker='o')
pyplot.plot(trialX, yEXP, 'r-',ls='--', label="Exp Fit")
pyplot.plot(trialX, y, label = '10 Deg Poly')
pyplot.legend() …Run Code Online (Sandbox Code Playgroud) 我希望找到一个简单的库,它可以采用一系列2维点,并给我一些更大的点来模拟曲线.基本上,我想从JFreeChart获得像这个样本的曲线拟合的效果:
alt text http://www.jfree.org/jfreechart/images/XYSplineRendererDemo1a.png
JFreeChart的问题是代码不提供这种类型的api.我甚至看过源,算法与实际绘图紧密耦合.
是否有任何算法可以从一组3D数据点返回直线方程?我可以找到很多来源,这些来源将给出2D数据集中的线的等式,但没有3D.
谢谢.
我想做一个logharitmic适合.但我不断收到运行时错误:
未找到最佳参数:函数调用次数已达到maxfev = 1000
我使用以下脚本.谁能告诉我哪里出错了?我使用Spyder仍然是一个初学者.
import math
import matplotlib as mpl
from scipy.optimize import curve_fit
import numpy as np
#data
F1=[735.0,696.0,690.0,683.0,680.0,678.0,679.0,675.0,671.0,669.0,668.0,664.0,664.0]
t1=[1,90000.0,178200.0,421200.0,505800.0,592200.0,768600.0,1036800.0,1371600.0,1630800.0,1715400.0,2345400.0,2409012.0]
F1n=np.array(F1)
t1n=np.array(t1)
plt.plot(t1,F1,'ro',label="original data")
# curvefit
def func(t,a,b):
return a+b*np.log(t)
t=np.linspace(0,3600*24*28,13)
popt, pcov = curve_fit(func, t, F1n, maxfev=1000)
plt.plot(t, func(t, *popt), label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我试图在python中将一个简单的函数拟合到两个独立数据数组中.我知道我需要将我的自变量的数据聚集到一个数组中,但是当我尝试进行拟合时,我传递变量的方式似乎仍然存在问题.(之前有几篇与此相关的文章,但它们没有太多帮助.)
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def fitFunc(x_3d, a, b, c, d):
return a + b*x_3d[0,:] + c*x_3d[1,:] + d*x_3d[0,:]*x_3d[1,:]
x_3d = np.array([[1,2,3],[4,5,6]])
p0 = [5.11, 3.9, 5.3, 2]
fitParams, fitCovariances = curve_fit(fitFunc, x_3d[:2,:], x_3d[2,:], p0)
print ' fit coefficients:\n', fitParams
Run Code Online (Sandbox Code Playgroud)
我得到的错误,
raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m))
TypeError: Improper input: N=4 must not exceed M=3
Run Code Online (Sandbox Code Playgroud)
什么是M长度?是N长度p0?我在这做错了什么?
我有三个X/Y点形成抛物线.我只需要计算抛物线的顶点是通过这三个点的.最好快速一点,因为我必须做很多这些计算!
"Ask A Scientist"网站提供了这样的答案:
抛物线的一般形式由下式给出:A*x ^ 2 + B*x + C = y其中A,B和C是任意实常数.你有三对点是(x,y)有序对.将每个点的x和y值替换为抛物线的等式.您将得到三个未知数的三个LINEAR方程,即三个常数.然后,您可以轻松地为A,B和C的值三个方程式求解这个系统,并且您将得到与您的3个点相交的抛物线方程.顶点是一阶导数为0的位置,一个小代数给出了顶点的(-B/2A,C - B ^ 2/4A).
很高兴看到在C#或C++中进行此计算的实际代码.任何人?
给出n分:
p0,p1,p2,...,pn;
如何得到点c1,c2以便定义的三次贝塞尔曲线
p0,c1,c2,pn
最接近给定点?
我试过最小二乘法.我在http://www.mathworks.com/matlabcentral/fileexchange/15542-cubic-bezier-least-square-fitting上阅读pdf文档后写了这篇文章.但我找不到一个好的t(i)功能.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
namespace BezierFitting
{
class CubicBezierFittingCalculator
{
private List<Point> data;
public CubicBezierFittingCalculator(List<Point> data)
{
this.data = data;
}
private double t(int i)
{
return (double)(i - 1) / (data.Count - 1);
// double s = 0.0, d = 0.0;
//
// for (int j = 1; j < data.Count; j++)
// {
// if (j < i)
// {
// s += (data[j] - data[j …Run Code Online (Sandbox Code Playgroud) 我正在尝试了解OpenCV fitLine()算法.
这是来自OpenCV的代码片段:
icvFitLine2Dfunction - icvFitLine2D
我看到有一些随机函数选择点进行近似,然后计算从点到拟合线的距离(选择点),然后选择其他点并尝试最小化距离并选择distType.
有人可以澄清从没有硬数学并假设没有伟大的统计知识的这一刻发生的事情吗?OpenCV代码注释和变量名称无助于我理解这段代码.
但我有一个稍微不同的问题.我知道我的数据是一条正弦曲线,具有未知周期和未知幅度,具有加性非高斯分布噪声.
我试图在C中使用GSL非线性算法来拟合它,但是拟合绝对可怕.我想知道我是否(错误地)使用非线性拟合算法,我应该使用线性算法?
如何判断特定数据集是否需要线性算法或非线性算法?
编辑:我的曲线非常嘈杂,因此使用FFT来计算频率可能会导致误报和错误拟合.我正在寻找一种更健壮的贴合方式.

如您所见,上图大约有170个点,下图大约有790个点.

噪声明显是非高斯的,并且与数据的幅度相比较大.我已经尝试过高斯分布式噪声的FFT,而且我很适合.在这里,它的失败非常严重.
增加:链接到第一次系列数据.文件中的每一列都是不同的时间序列.
curve-fitting ×10
python ×4
algorithm ×3
scipy ×3
statistics ×2
bezier ×1
c ×1
c# ×1
data-fitting ×1
java ×1
math ×1
matplotlib ×1
numpy ×1
opencv ×1
r ×1