所以,我试图使用以下类型的幂律拟合一组数据:
def f(x,N,a): # Power law fit
if a >0:
return N*x**(-a)
else:
return 10.**300
par,cov = scipy.optimize.curve_fit(f,data,time,array([10**(-7),1.2]))
Run Code Online (Sandbox Code Playgroud)
其他条件只是强制a为正.使用scipy.optimize.curve_fit产生一个非常合适的(绿线),分别为N和a返回1.2e + 04和1.9e0-7的值,绝对没有与数据的交集.从我手动放入的拟合中,值分别应该在1e-07和1.2左右分别为N和a,尽管将它们放入curve_fit作为初始参数不会改变结果.去除a为正的条件会导致更差的拟合,因为它选择负数,这会导致符合错误的符号斜率.
我无法弄清楚如何获得一个可信的,更不用说可靠的,适合这个例程,但我找不到任何其他好的Python曲线拟合例程.我是否需要编写自己的最小二乘算法,或者我在这里做错了什么?
首先,我说过我已经尝试了在散布散点图中的颜色编码错误栏中概述的方法,但是我无法使它们起作用。据我所知,在图版4中处理色轴的方式有所变化,这可能就是为什么它不再解决问题的原因。
我想用两个变量做一个简单的散点图,每个变量都有误差线。我希望点的颜色及其误差线遵循由第三个变量确定的比例。我无法使错误栏颜色与标记匹配。以下是我尝试过的几种简单方法及其结果。
set.seed(1)
x.data <- rnorm(20, 0, 1)
y.data <- rnorm(20, 2, 1)
x.err <- runif(20, 0.2, 0.8)
y.err <- runif(20, 0.2, 0.8)
z.data <- runif(20, 1.7, 2.8)
p <- plot_ly() %>%
add_markers(x=x.data, y=y.data,
error_x=list(array=x.err, color=z.data),
error_y=list(array=y.err, color=z.data),
marker=list(color=z.data, colorscale='Viridis',
colorbar=list(title='Z', limits=range(z.data)))) %>%
layout(xaxis=list(title='X'), yaxis=list(title='Y'))
Run Code Online (Sandbox Code Playgroud)
z.norm <- (z.data - min(z.data))/(max(z.data)-min(z.data))
mycramp<-colorRamp(c("darkblue","yellow"))
mycolors<-rgb(mycramp(z.norm), maxColorValue = 255)
p <- plot_ly() %>%
add_markers(x=x.data, y=y.data,
error_x=list(array=x.err, color=mycolors),
error_y=list(array=y.err, color=mycolors),
marker=list(color=mycolors,
colorbar=list(title='Z', limits=range(z.data)))) %>%
layout(xaxis=list(title='X'), yaxis=list(title='Y'))
Run Code Online (Sandbox Code Playgroud)
I'm trying to write an R wrapper for the FINUFFT routines for calculating the FFT of an unevenly sampled series. I have virtually no experience with C/C++, so I'm working from an example that compares the traditional Fourier transform to the NUFFT. The example code follows.
// this is all you must include for the finufft lib...
#include "finufft.h"
#include <complex>
// also needed for this example...
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char* argv[])
/* …Run Code Online (Sandbox Code Playgroud)