2014-02-25 234 views
1

我需要拟合图像中可以看到的曲线,该曲线来自大量蒙特卡洛模拟。我还上传了数据以适合txt filegraph使用matlab的非线性拟合函数

我tryied与该类型的一个函数来拟合曲线:

EXP(B(X^k))的

k<1。 结果与实验点类似,但仍远离我需要的拟合函数。

我以为在不同的方程中分裂了整个范围,但我还没有达成解决方案。即第一部分是直线,第三部分是指数。但是高峰呢?

任何想法?

+0

你有[曲线拟合工具箱](http://www.mathworks.com/products/curvefitting/)吗?您还可以使用更复杂的方法,如正弦和余弦的和。 – Schorsch

+0

我使用EzyFit,因为它是免费的 – TheInterestedOne

+0

对不起...要绘制的数据只是第一个(x)和第二个(y)列。然后出现差异,PRSD%和MC的数量以获得期望的误差。这个txt文件来自Fortran90脚本。 – TheInterestedOne

回答

2

8度的多项式拟合:

close all; clear all; 

fid = fopen('output_red.txt','r'); 
Z = textscan(fid, '%f %f %f %f %f'); 
fclose(fid); 

X = log(Z{1}); 
Y = log(Z{2}); 

p = polyfit(X, Y, 8); 
Y2 = polyval(p, X); 

plot(exp(X), exp(Y)); 
hold on 
plot(exp(X), exp(Y2), 'r') 
legend('Original data','Fitted curve') 

print('-dpng','fitted.png') 

p包含多项式系数1.2737e-05 -9.1262e-04 2.7838e-02 -4.7160e-01 4.8482e+00 -3.0958e+01 1.1990e+02 -2.5649e+02 2.3480e+02。使用更高程度的多项式将导致更好的精度。

Result

+0

非常感谢您的帮助!但是拟合函数方程呢?我怎样才能得到多项式的系数? – TheInterestedOne

+0

您应该自己运行脚本来计算最小二乘方误差并决定程度。 – divanov

+0

谢谢你的帮助。它很好用 – TheInterestedOne

3

我猜你的问题是,不仅要平滑曲线......如果是这样,没有什么比为指向的@divanov精心挑选的多项式更好。所以,我无话可说。

然而,据我所知,你的数据描述了一个经验分布(你告诉我们它来自蒙特卡洛模拟),如果你真的想找到一个描述你的数据的函数,你可以考虑估计一个知名度分布重尾。

其中有一些已经在matlab工具箱中煮熟了。我建议你尝试一下,例如Weibull distribution,但你最终可能会尝试其他种类。

+0

谢谢我会检查 – TheInterestedOne