clear
clc
%假设的原始数据
y = [1,2,3,4,5,6,7,8,9,11];
%实际自变量x为1到n(n为y的长度),这里将log10(x)作为自变量
logx=log10(1:length(y));
%同样将log10(y)作为因变量,这里是因为自变量和因变量的对数是线性关系,所以取其
%对数进行拟合
logy=log10(y);
%使用一次拟合(y=ax+b)拟合出log10(x)和log10(y)
%其中p为[a,b],S返回误差信息,可以做残差分析,一般不用管,如下调用形式也行
%p = polyfit(logx,logy,1);
[p,S] = polyfit(logx,logy,1);%一次线性拟合
%将斜率a给gamma
gamma=p(1);%这个是算什么
%将截距b给y0
y0=p(2);%这个是算什么
%同样以log10(x)为横坐标,求出拟合曲线在自变量出的值
Output = polyval(p,logx);%这个是算什么
%求原始数据log10(y)与拟合后曲线对应点Outpt的相关系数,为一个2×2的矩阵
%(1,1)是logy与logy的相关系数(1,2)是logy与Output的相关系数
%(2,1)是Output与logy的相关系数,(2,2)是Output与Output的相关系数
%这里我们只关心非对角线上的相关系数(1,2)和(2,1).他们是相等的
%取值范围为[-1,1],其中1表示最大正相关,-1表示最大负相关.
Correlation = corrcoef(logy, Output);%这个是算什么
%取其相关系数给RSquare
RSquare=Correlation(2,1);%这个是算什么
%logspace(a,b,n)在区间[a,b]中产生n个数,他们按对数形式产生
%相应的函数有linspace(a,b,n)在区间[a,b]中线性产生n个数
loglin=logspace(log10(1),log10(length(y)),100);%? 后面就都不懂了
%前面我们推出y、x的对数是线性关系如下:
%log10(y) = a*log10(x)+b
%那么拟合数据y和x的关系为:
%y = x^(a)*10^b
%下面的几句解释,回头我自己都看不太懂了,大概就这个意思,
%你只要知道原始的y和x为y = x^(a)*10^b这个关系就行了,不用管前面的Output了
%这里求出拟合数据y而不是log10(y),前面的Output为log10(y)
%也就是说我们将前面的Output写成10.^(Output)就是下面的fitted
%不过Output的数据点只是对于在元素数据点x处的y值
%而这里在自变量x的区间上取了100点求出fitted
fitted=10.^y0 * loglin.^gamma;
figure;
%画出自变量和原始数据的图像,横纵坐标均为对数坐标.
%b表示颜色为蓝色,同样有r(red)为红色,k(black)为黑色,g(green),y(yellow)等等属性
%o表示数据点用圆圈表示,同样还有星号*,等属性
%另外还有线型属性,如'--'表示虚线,'-.'表示点画线等,他们用一个引号引出,
%不分先后顺序,没设置的属性可以不写,如下:
%'r*--'(红色,星号,虚线)
%MarkerSize表示数据点所用圆圈的大小为2
loglog(y,'bo','MarkerSize',2);%bo是什么
%保持图像继续绘图
%还可以用:
%set(gca,'NextPlot','Add')
hold on;
%绘制拟合后的曲线y=x^(a)*10^b
loglog(loglin,fitted,'k--','LineWidth',1);%这两部大概是在画图?具体是调了些什么?
%取消图像保持保持
hold off;