matlab计算幂律分布,Matlab拟合曲线之幂律分布

收集的问题:

如何用matlab来拟合幂律分布,怎样将拟合值和实际值进行对比,放在一个图中,又如何检验实际数据是否符合拟合函数。

如果不符合,如何来直接判断实际数据服从什么样的函数分布呢

在MATLAB里,对数据进行拟合,在双对数坐标下,看数据是否符合幂律分布,求出幂指数,并绘出图形。-In MATLAB, the pairs of data fitting, in double logarithmic coordinates to see whether the data meet the power-law distribution, find the power index, and draw the graph.以傅雷书信为例:(平移237个单位时间)

“>>”后是输入内容,行开头不含“>>”的是MATLAB运行的结果,“/”后是注释部分

>> x=[ ];  /输入修正的书信间隔时间

>> y=[ ];  /输入累积概率

>> loglog(x,y,’ko’)  /画出双对数下坐标图(k表示黑色,o表示圆圈)

>> hold on  /保留刚才所画图表,以便继续在此图画出拟合直线

>>  a=polyfit(log(x),log(y),1)  /求拟合直线的参数(一次项和常数项)

a =

-1.0700    5.9525

>> b=2.71828^5.9525  /常数项转化

b =

384.7124

>> x=100:100000;  /根据上面所作的图指定x的取值范围

>> y=b*x.^ -1.0700 ;  /根据刚才的计算输入x和y的关系式

>> plot(x,y,’k’)  /在双对数坐标下画出拟合直线

但是得注意的是,用这个plotfit函数不太能够用来拟合很复杂的函数,而只是用来拟合线性的、二维之类的,而用它来拟合幂律分布的曲线时,只能考虑先截取一部分的点,然后用这个函数去拟合。

MATLAB软件提供了基本的曲线拟合函数的命令.

多项式函数拟合:P=polyfit(x,y,n)

其中n表示多项式的最高阶数,x,y为将要拟合的数据,它是用数组的方式输入.输出参数P为拟合多项式 P(1)*X^N + P(2)*X^(N-1) +…+ P(N)*X + P(N+1).的系数

多项式在x处的值y可用下面程序计算.

y=polyval(P,x,m)

线性:m=1, 二次:m=2, …

polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

例:

x=0:0.1:1;

y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

A=polyfit(x,y,2)

Z=polyval(A,x);

Plot(x,y,’r*’,x,z,’b’)

polyfit不能保证你每次都能得到最优解,math的答案是使用数值计算。

个人认为,对于这种非线性的曲线,尽量不要使用ployfit, ployfit多项式抑合适合线性方程!!

用polyfit()函数去拟合这么复杂的曲线不太合适,polyfit()函数对于数据遵循多项式分布是比较好的,一般来说,利用polyfit()函数拟合的阶数不要超过5阶。 如果是不需要得到拟合曲线的函数,只是把这些点利用一些光滑曲线连接,建议使用三次样条函数spline()进行插值即可。

相关资源:钢琴调律软件 Piano Tuner 安卓破解版_http://download.csdn.net/…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月13日
下一篇 2021年2月13日

相关推荐