精华内容
下载资源
问答
  • MATLAB曲线拟合代码

    2019-09-06 16:08:00
    MATLAB曲线拟合代码 只要改变代码中ui uo内值,便可进行所需拟合,拟合后可通过workspace查看直线参数
  • MATLAB曲线拟合

    2015-07-21 17:01:19
    利用MATLAB中的三次样条插值法等对曲线进行拟合
  • 一阶惯性加延迟环节的matlab曲线拟合,利用最小二乘法原理 一阶惯性加延迟环节的matlab曲线拟合,利用最小二乘法原理
  • 使用matlab工具箱对函数进行拟合的方法及操作
  • matlab曲线拟合

    2018-04-10 22:15:39
    matlab曲线拟合,包括最小二乘法和差值等方法,适合初学者
  • MATLAB曲线拟合讲解ppt

    2018-10-27 10:52:42
    这是一份关于曲线拟合讲解的ppt,之前学习是用到的资源,现在贡献给大家参考。
  • 利用MATLAB曲线拟合工具箱求离散点的拟合曲线,陈巍,,曲线拟合是数值分析中的一种普遍且重要的方法,求解拟合曲线的方法也有很多.本文主要介绍利用MATLAB曲线拟合工具箱对离散数据点做�
  • matlab曲线拟合-插值与拟合.doc 自己下载的一些曲线插值,拟合的资料,希望对大家有所帮助
  • 龙源期刊网 基于matlab曲线拟合的数据预测分析 作者屈长杰 来源商情2016年第40期 ?摘要试验所得的数据一般为离散的且不能直接用一般的方程去描述它们这样给数据的分析和预测带来了极大的麻烦本文针对股票数据的变化...
  • matlab曲线拟合工具箱使用手册,用于曲线拟合
  • MATLAB曲线拟合工具箱(cftool)介绍(完结)

    千次阅读 多人点赞 2021-07-23 18:47:24
    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。 目录1.实例介绍2. 进入系统辨识工具箱界面3. 加载数据4. 加载数据5. 选择拟合曲线的类型 1.实例介绍 已知 x = [0 ...

    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。

    1.实例介绍

    已知
    x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0];
    y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583];

    并且根据某种物理或数学关系确定y=f(x)的表达形式,并求出拟合结果对应的系数。

    2. 进入曲线拟合工具箱界面

    两种方法,第一种:
    打开app栏的曲线拟合工具箱(Curve Fitting),
    在这里插入图片描述
    第二种,直接在命令行窗口输入“cftool”:
    在这里插入图片描述
    进入界面后,弹出如下窗口:
    在这里插入图片描述

    3. 加载数据

    新建一个.m文件,并写入如下代码:

    clc;clear;
    x = [0 0.2 0.5 0.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0];
    y = [1.2779 2.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.0031 1.1233 1.1583];
    

    作为要拟合曲线所需要的数据。

    4. 加载数据

    在上述窗口中选中相应数据和拟合选项:在这里插入图片描述

    5. 选择拟合曲线的类型

    通过下拉菜单选择拟合曲线的类型,
    在这里插入图片描述
    工具箱提供的拟合类型有:

    • Custom Equations:用户自定义的函数类型;
    • Exponential:指数逼近,有2种类型, a ∗ e x p ( b ∗ x ) a*exp(b*x) aexp(bx) a ∗ e x p ( b ∗ x ) + c ∗ e x p ( d ∗ x ) a*exp(b*x) + c*exp(d*x) aexp(bx)+cexp(dx)
    • Fourier:傅立叶逼近,有7种类型,基础型是 a 0 + a 1 ∗ c o s ( x ∗ w ) + b 1 ∗ s i n ( x ∗ w ) a0 + a1*cos(x*w) + b1*sin(x*w) a0+a1cos(xw)+b1sin(xw)
    • Gaussian:高斯逼近,有8种类型,基础型是 a 1 ∗ e x p ( − ( ( x − b 1 ) / c 1 ) 2 ) a1*exp(-((x-b1)/c1)^2) a1exp(((xb1)/c1)2)
    • Interpolant:插值逼近,有4种类型,Nearest neighbor、Linear、Cubic、Shape-preserving(PCHIP);
    • Linear Fitting:线性拟合;
    • Polynomial:多形式逼近;
    • Power:幂逼近,有2种类型, a ∗ x b a*x^b axb a ∗ x b + c a*x^b + c axb+c
    • Rational:有理数逼近;
    • Smoothing Spline:平滑逼近;
    • Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a 1 ∗ s i n ( b 1 ∗ x + c 1 ) a1*sin(b1*x + c1) a1sin(b1x+c1)
    • Weibull:只有一种, a ∗ b ∗ x ( b − 1 ) ∗ e x p ( − a ∗ x b ) a*b*x^(b-1)*exp(-a*x^b) abx(b1)exp(axb)

    6. 进行曲线拟合

    假设我们以 y = a ∗ s i n ( b ∗ x ) ∗ e x p ( c ∗ x ) + d y =a*sin(b*x)*exp(c*x)+d y=asin(bx)exp(cx)+d的表达形式进行拟合,则选择”Custom Equation”,在方框中输入相应的函数表达式,拟合过程及结果图像如下图所示:
    在这里插入图片描述
    可以发现,曲线和拟合程度较差。这是因为,对同一问题的拟合情况,每次可能都不一样,这取决对于参数a,b,c,d的StartPoint的选取。解决方法是在拟合过程中,将a,b,c和d也作为约束拟合的条件,例子中已知a,b,c,d的的取值范围(正负范围),可以进行如下操作,点击[Fit Options]按钮,弹出的窗口如下:
    在这里插入图片描述
    可以调整a,b,c,d参数的StartPoint,Lower,Upper三个选项来是拟合更加准确,比如说,将a,b,d的Lower选项设为0(a,b,d>0),将c的Upper选项设为0(c<0),设置如下图所示:
    在这里插入图片描述
    设置完毕之后,就会自动出现重新拟合之后的图像,如下图所示。
    在这里插入图片描述
    可以看到,拟合程度较之前有了很大的提高.因此,可以预见的是,在拟合过程中,设置好待拟合函数的参数的StartPoint,Lower和Upper三者的值可以使拟合更加准确。

    7. 拟合结果分析

    在左侧的Result中显示拟合模型参数以及拟合效果

    在这里插入图片描述
    拟合效果评测:

    • SSE:拟合误差平方和,接近0,表示与数据拟合的好,但是要小心过拟合;
    • R-Square:实测数据与推理数据之间的相关系数平方值,趋近于1较好;
    • RMSE:均方差;

    8.其他常用拟合方法

    当然,除了上面提到的拟合方法之外,还有两种常用的拟合方法:

    • Interpolant
      插值逼近,该方法的优势在于会连接所有点,而使其SSE为0,R-square为1,如下图所示:
      在这里插入图片描述
    • Smoothing Spline
      平滑逼近,该方法的会尽可能逼近所有点,使其SSE尽可能逼近0,R-square尽可能逼近1,如下图所示:
      在这里插入图片描述

    9.输出拟合参数

    如果希望只显示拟合图像,可以点击“文件”——>“Print to figure”
    在这里插入图片描述
    这样就可以只显示拟合图像了,如下图所示。
    在这里插入图片描述
    如果希望导出拟合后的曲线数据,可以点击“文件”——>“Generate Code”
    在这里插入图片描述
    生成代码后,默认函数名为createFit,可以自行修改,直接保存,就可以调用了。比如说,我要导出五次多项式Polynomial逼近结果,按照上述方式导出后,可以查看生成代码的信息:
    在这里插入图片描述
    其中,fitresult是函数的输出,是一个结构体,可以用fitresult.p1得到p1的系数,同理其它系数也可得。
    在这里插入图片描述
    如果想导出拟合后的曲线数据,只需要把横坐标传给fitresult就可以了:

    y = fitresult(x)';
    

    10.结论

    本文主要讨论了MATLAB曲线拟合工具箱(cftool)的拟合过程。通过工具箱模块可以非常方便地对曲线进行拟合,不需要太多的编程,曲线拟合方法多样,效果较好。

    ok,以上便是曲线拟合工具箱的全部内容了,如果对你有所帮助,记得点个赞哟~

    展开全文
  • matlab曲线拟合-MATLAB曲线拟合向导.doc 自己下载的一些曲线插值,拟合的资料,希望对大家有所帮助
  • 在实际工程应用和科学实践中,经常需要寻求 两个(或多个)变量间的关系,而实际去只能 通过观测得到一些离散的数据点。
  • MATLAB曲线拟合函数

    千次阅读 2018-08-12 20:02:00
    MATLAB曲线拟合函数 一、多项式拟合 ployfit(x,y,n) :找到次数为 n 的多项式系数,对于数据集合 {(x_i,y_i)},满足差的平方和最小 [P,E] = ployfit(x,y,n) :返回同上的多项式 P 和矩阵 E 。...

    MATLAB曲线拟合函数

    一、多项式拟合

    • ployfit(x,y,n) :找到次数为 n 的多项式系数,对于数据集合 {(x_i,y_i)},满足差的平方和最小
    • [P,E] = ployfit(x,y,n) :返回同上的多项式 P 和矩阵 E 。多项式系数在向量 p 中,矩阵 E 用在 ployval 函数中来计算误差
    • 某数据的横坐标为 x= [0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8],纵坐标为 y = [1 2 3 5 6 7 6 5 4 1],对该数据进行多项式拟合
    • 代码
          clear all
          clc
          x = [0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];
          y = [1 2 3 5 6 7 6 5 4 1];
          p5 = polyfit(x,y,5);               % 5 阶多项式拟合 
          y5 = polyval(p5,x);
          p5 = vpa(poly2sym(p5),5)           %显示 5 阶多项式
          p9 = polyfit(x,y,9);               % 9 阶多项式
          y9 = polyval(p9,x);
          figure;                               %画图
          plot(x,y,'bo');
          hold on;
          plot(x,y5,'r:');
          plot(x,y9,'g--');
          legend('原始数据','5 阶多项式拟合','9 阶多项式拟合');
          xlabel('x');
          xlabel('y');
    • 运行程序后,得到的 5 阶多项式如下:
      p5 =10.041x^5 + 58.244x^4 - 124.54x^3 + 110.79x^2 - 31.838*x + 4.0393
    • 输出结果如下:
      1461291-20180812200138749-215501352.png

    • 可见,当采用 9 次拟合时,得到的结果与原数据符合的比较好。当使用函数 polyfit() 进行拟合时,多项式的阶次最大不超过 length(x) - 1

    二、加权最小方差(WLS)拟合原理及实例

    • 加权最小方差就是根据基础数据本身各自的准确度的不同,在拟合的时候给每个数据以不同的加权数值。这种方法比单纯最小方差方法要更加符合拟合的初衷
    • 根据 WLS 数据拟合方法,自行编写使用 WLS 方法拟合数据的 M 函数,然后使用 WLS 方法进行数据拟合
    • 在 M 文件编辑器中输入如下代码:
          function [th,err,yi] = polyfits(x,y,N,xi,r)
          % x,y:数据点系列
          % N:多项式拟合的系统
          % r:加权系数的逆矩阵
          
          M = length(x);
          x = x(:);
          y = y(:);
          
          % 判断调用函数的格式
          if nargin == 4
          % 当调用的格式为 (x,y,N,r)
            if length(xi) == M
                    r = xi;
                    xi = x;
          % 当调用的格式为(x,y,N,xi)
            else r = 1;
            end;
          % 当调用格式为(x,y,N)
          elseif nargin == 3
            xi = x;
            r = 1;
          end
          % 求解系数矩阵
          A(:,N+1) = ones(M,1);
          for n = N:-1:1
            A(:,n) = A(:,n+1).*x;
          end
          if length(r) == M
            for m =1:M
                A(m,:) = A(m,:)/r(m);
                y(m) = y(m)/r(m);
            end
          end
           % 计算拟合系数
          th = (A\y)';
          ye = polyval(th,x);
          err = norm(y-ye)/norm(y);
          yi = polyval(th,xi);
    • 将上面代码保存为 “polyfits.m” 文件
    • 使用上面的程序代码,对基础数据进行 LS 多项式拟合。在 MATLAB 的命令窗口输入下面的程序
         clear all
          clc
          x = [-3:1:3]';
          y = [1.1650 0.0751 -0.6965 0.0591 0.6268 0.3516 1.6961]';
          [x,i] = sort(x);
          y = y(i);
          xi = min(x) + [0:100]/100*(max(x) - min(x));
          for i = 1:4
            N = 2*i-1;
            [th,err,yi] = polyfits(x,y,N,xi);
            subplot(2,2,i)
            plot(x,y,'o')
            hold on
            plot(xi,yi,'-')
            grid on
          end
    • 得到的拟合结果
      1461291-20180812200202457-1639183280.png

    • LS 方法其实是 WLS 方法的一种特例,相当于将每个基础数据的准确度都设为 1。但是,自行编写的 M 文件和默认的命令结果不同

    三、非线性曲线拟合

    • 非线性曲线拟合是已知输入向量 xdata,输出向量 ydata,并知道输入与输出的函数关系为 ydata = F(x,xdata),但不清楚系数向量 x。进行曲线拟合急求 x 使得下式成立:
      \(\displaystyle{min_x} \frac{1}{2}|| F(x,xdata)-ydata||_2^2 = \frac{1}{2}\displaystyle{\sum_i}(F(x,xdata_i) - ydata_i)^2\)
    • 在 MATLAB 中,可以使用函数 curvefit 解决此类问题,其调用格式如下:
      • x = lsqcurvefit(fun,x0,xdata,ydata):x0 为初始解向量,xdata,ydata 为满足关系 ydata = F(x,xdata)的数据
      • x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub):lb、ub 为解向量的下届和上届 lb <= x <= ub,若没有指定界,则lb = [],ub = []
      • x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options):options 为指定的优化参数
      • [x,resnorm] = lsqcurvefit(…):resnorm 是在 x 处残差的平方和
      • [x,resnorm,residual] = lsqcurvefit(…):residual 为在 x 处的残差
      • [x,resnorm,residual,exitflag] =lsqcurve(…):exitflag 为终止迭代的条件
      • [x,resnorm,residual,exitflag,output] =lsqcurve(…) :output 为输出的优化信息
    • 已知输入向量 xdata 和输出向量 ydata,且长度都是 n,使用最小二乘非线性拟合函数:ydata(i) = x(1)·xdata(i)^2+x(2)·\sin(xdata(i))+ x(3)·xdata(i)^3
    • 根据题意可知,目标函数为:\(min_x \frac{1}{2}\displaystyle{\sum_{i=1}^n}(F(x,xdata_i)-ydata_i)^2\)
    • 其中:F(x,xdata) = x(1)·xdata^2+x(2)\sin(xdata)+x(3)·xdata^3
    • 初始解向量定位 x0 = [0.3,0.4,0.1]
    • 首先建立拟合函数文件 ex1024.m
          function F = ex1024(x,xdata)
          F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;
    • 再在命令行编写函数拟合代码;
          clear all
          clc
          xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
          ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
          x0 = [10,10,10];
          [x,resnorm] = lsqcurvefit(@ex1024,x0,xdata,ydata)
    • 结果为 \(x = \begin{matrix}0.2269 &0.3385 &0.3022\end{matrix} , resnorm = 6.2950\),即函数在 x = 0.2269、x = 0.3385、x = 0.3022 处残差的平方和均为 6.295
    • 当然了,还有一钟好用的东西叫 cftool,简直不要太简洁,入门操作请看:MATLAB如何快速进行曲线拟合
    posted @ 2018-08-12 20:02 Nikki_o3o 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • matlab曲线拟合工具箱手册,很好用,说明很详细
  • 4.6 曲线拟合在上一节,已经介绍了数据插值,它要求原始数据是精确的,或具有较小的误差。事实上,由于种种原因,实验或测量中所获得的数据总会有一定的误差。在这种情况下,如果强求构造的函数(曲线)通过各插值节点...

    4.6  曲线拟合

    在上一节,已经介绍了数据插值,它要求原始数据是精确的,或具有较小的误差。事实上,由于种种原因,实验或测量中所获得的数据总会有一定的误差。在这种情况下,如果强求构造的函数(曲线)通过各插值节点,显然是不合理的。为此,人们设想构造一个函数(曲线)y=g(x)去拟合f(x),但它不必通过各插值节点,而只是使该曲线从这些插值节点中穿过,且使它在某种意义下最优。

    MATLAB的曲线拟合是用常见的最小二乘原理,所构造的g(x)是一个次数小于拟合节点个数的多项式。

    4.6.1  最小二乘原理及其曲线拟合算法

    设测得离散的n+1个节点的数据如下:

    e57adbe2ebf5abd9b7d664b434932b94.png

    构造一个如下的m次拟合多项式函数g(x)为 (m≤n):

    b58c875fe3f67aa73c472ea277dc1a05.png

    所谓曲线拟合的最小二乘原理,就是使上述拟合多项式在各数据点处的偏差4243d6653ba8121f148d670e8533ef91.png的平方之和达最小。

    上式中的1258e8f2c6cb59b0817c82645514e1cf.png均为已知值,而式中的系数为e885f8c90614a126366756ce43d45383.png个未知数,故可以将其看做是1c417b414a69ec6c86b54511e6aace2f.png的函数,即f8de4ad292e3e1f5914aa3aa907fc26d.png。于是我们可以把上述曲线拟合归结成对多元函数的求极值问题。为使62b6f0f4b3d66e1f910a6ff010ffaab3.png取极小值,必须满足以下方程组:

    e89c83caf5d58b69086d2e90b05b6ed3.png

    经过简单的推导,可以得到一个m+1阶线性代数方程组Sa=t,其中Sm+1阶系数矩阵,t为右端项,而a为未知数向量,即欲求的m次拟合多项式的m+1个系数。这个方程组也称为正则方程组。至于正则方程组的具体推导,可参阅有关数值计算方法的教材。

    4.6.2  曲线拟合的实现

    在MATLAB中,可以用polyfit函数来求最小二乘拟合多项式的系数,另外可以用polyval函数按所得的多项式计算指定值。

    polyfit函数的调用语法是:

    [p,s]=polyfit(x,y,m)

    输入参数x,y为测量而得的原始数据,为向量;m为欲拟合的多项式的次数。polyfit (x,y,m)将根据原始数据x、y得到一个m次拟合多项式P(x)的系数,该多项式能在最小二乘意义下最优地近似函数f(x),即有p(xi)≈f(xi)≈yi。

    返回的结果中p为m次拟合多项式的系数,而s中的数据则是一个结构数组,代入polyval函数后可以得到拟合多项式相关的误差估计。s最常用的写法可以是:p=polyfit(x,y,M)。

    polyval的函数功能是按多项式的系数计算指定点所对应的函数值。

    【例4-43】  曲线拟合示例。

    本例首先在c8592e1904f8ca3a2aef05dd730051d7.png多项式的基础上加入随机噪声,产生测试数据,然后对测试数据进行数据曲线拟合:

    >> clear

    >> rand('state',0)                 

    >> x=1:1:10;

    >> y=-0.9*x.^2+10*x+20+rand(1,10).*5; %  产生测试数据

    >> plot(x,y,'o')                  %  绘图并标出原始数据点

    >> p=polyfit(x,y,2)

    >> xi=1:0.5:10;

    >> yi=polyval(p,xi);                     % 计算拟合的结果

    >> hold on

    >> plot(xi,yi);                   %  绘制拟合结果图

    >> hold off

    运行以上命令,得到的结果如图4-10所示。另外得到的多项式系数为:

    p =

       -0.8923    9.8067   23.6003

    也就是说通过曲线拟合,得到了多项式72271243ba4f145727020b62eaed3cef.png。通过比较系数和观察图形,可以看出本次曲线拟合结果的精度是比较高的。

    31548c0406f2880c0aaedfd82809cfa1.png

    图4-10  曲线拟合

    4.7  Fourier分析

    傅立叶(Fourier)分析在信号处理领域有着广泛的应用,现实生活中大部分的信号都包含有多个不同的频率组件,这些信号组件频率会随着时间或快或慢的变化。傅立叶级数和傅立叶变换是用来分析周期或者非周期信号的频率特性的数学工具。从时间的角度来看,傅立叶分析包括连续时间和离散时间的傅立叶变换,总共有4种不同的傅立叶分析类型:连续时间的傅立叶级数、连续时间的傅立叶变换、离散时间的傅立叶级数、离散时间的傅立叶变换等。

    频谱分析是在数据中识别频率组成的处理过程。对于离散数据,频谱分析的计算基础是离散傅立叶变换(DFT)。DFT将time-based或者space-based数据转换为frequency-based数据。

    一个长度为n的向量x的DFT,也是一个长度为n的向量:

    701d450c19d7db2640f8244c04f7f740.png

    其中2dd235171f8eb382f28572b717fb35db.png是n阶复数根:

    b846934875d85feefa70b093842d9071.png

    在此表达式中,i表示虚数单位 。

    DFT有一种快速算法FFT,称为快速傅立叶变换。FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。它是对变换式进行一次分解,使其成为若干个小数点的组合,从而减少运算量。常用的FFT是以2为基数的,其长度用N表示,N为2的整数倍。

    MATLAB中采用的就是FFT算法。MATLAB提供了函数fft和ifft等来进行傅立叶分析。

    1.函数fft和ifft

    函数fft和ifft对数据作一维快速傅立叶变换和傅立叶反变换,函数fft的调用语法有如下几种。

    (1)Y=fft(X):如果X是向量,则采用快速傅立叶变换算法作X的离散傅立叶变换;如果X是矩阵,则计算矩阵每一列的傅立叶变换。

    (2)Y=fft(X,n):用参数n限制X的长度,如果X的长度小于n,则用0补足;如果X的长度大于n,则去掉长出的部分。

    (3)Y=fft(X,[ ],n)或Y=fft(X,n,dim):在参数dim指定的维上进行操作。

    函数ifft的用法和fft完全相同。

    2.fft2和ifft2

    函数fft2和ifft2对数据作二维快速傅立叶变换和傅立叶反变换。数据的二维傅立叶变换fft2(X)相当于fft(fft(X)’)’,即先对X的列做一维傅立叶变换,然后对变换结果的行做一维傅立叶变换。函数fft2的调用语法有如下几种。

    (1)Y=fft2(X):二维快速傅立叶变换。

    (2)Y=fft2(X,MROWS,NCOLS):通过截断或用0补足,使X成为MROWS*NCOLS的矩阵。

    函数ifft2的用法和fft2完全相同。

    3.fftshift和ifftshift

    函数fftshift(Y)用于把傅立叶变换结果Y(频域数据)中的直流分量(频率为0处的值)移到中间位置:

    (1)如果Y是向量,则交换Y的左右半边;

    (2)如果Y是矩阵,则交换其一三象限和二四象限;

    (3)如果Y是多维数组,则在数组的每一维交换其“半空间”。

    函数ifftshift相当于把fftshift函数的操作逆转,用法相同。

    【例4-44】  生成一个正弦衰减曲线,进行快速傅立叶变换,并画出幅值(amplitude)图、相位(phase)图、实部(real)图和虚部(image)图。

    >> tp=0:2048;                             %  时域数据点数N

    >> yt=sin(0.08*pi*tp).*exp(-tp/80);      %  生成正弦衰减函数

    >> plot(tp,yt), axis([0,400,-1,1]),      %  绘正弦衰减曲线

    >> t=0:800/2048:800;                       %  频域点数Nf

    >> f=0:1.25:1000;

    >> yf=fft(yt);                             %  快速傅立叶变换

    >> ya=abs(yf(1:801));                      %  幅值

    >> yp=angle(yf(1:801))*180/pi;            %  相位

    >> yr=real(yf(1:801));                    %  实部

    >> yi=imag(yf(1:801));                     %  虚部

    >> figure

    >> subplot(2,2,1)

    >> plot(f,ya),axis([0,200,0,60])        %  绘制幅值曲线

    >> title('幅值曲线')

    >> subplot(2,2,2)

    >> plot(f,yp),axis([0,200,-200,10])     %  绘制相位曲线

    >> title('相位曲线')

    >> subplot(2,2,3)

    >> plot(f,yr),axis([0,200,-40,40])      %  绘制实部曲线

    >> title('实部曲线')

    >> subplot(2,2,4)

    >> plot(f,yi),axis([0,200,-60,10])      %  绘制虚部曲线

    >> title('虚部曲线')

    本例首先生成正弦衰减函数yt,绘制的正弦衰减曲线如图4-11所示。然后对yt进行了快速傅立叶变换,结果如图4-12所示。

    6b30c9bdc20e800917439c07d2caceb8.png

    图4-11  正弦衰减曲线图 

    9ff5a158cc0d9b98a0e17a8b9da75b4e.png

    图4-12  傅立叶变换结果

    9cdd4032601b0cafd625427aad141ce8.png

    展开全文
  • 曲线拟合MATLAB m程序

    2018-08-19 17:08:48
    文档内容为在MATLAB中,利用m函数编写最小二乘法程序以实现曲线拟合的功能
  • Mathworks 产品的曲线拟合特色,曲线拟合工具箱(Curve Fitting Toolbox),Matlab 内建函数与其他的带有曲线拟合能力的附加产品(工具箱),线性曲线拟合,非线性曲线拟合
  • matlab 曲线拟合

    千次阅读 2016-12-26 09:46:00
    曲线拟合(转载:http://blog.sina.com.cn/s/blog_8e1548b80101c9iu.html) 补:拟合多项式输出为str  1.poly2str([p],'x')  2.  fn=sprintf('%.16f%s%.16f%s%.16f%s%.16f',p(1),'*x^3+',p(2),'*x^2+',p(3),'*x+'...

    曲线拟合(转载:http://blog.sina.com.cn/s/blog_8e1548b80101c9iu.html)

    补:拟合多项式输出为str

      1.poly2str([p],'x')

      2.

        fn=sprintf('%.16f%s%.16f%s%.16f%s%.16f',p(1),'*x^3+',p(2),'*x^2+',p(3),'*x+',p(4));
        vpa(fn,精度)

    补2:字符串拼接

      1.STR=sprintf('%d%s.....',对应类型的值,对应类型的值);

      2.strcat('',''..............)

    实例:温度曲线问题

    气象部门观测到一天某些时刻的温度变化数据为:

    t

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    T

    13

    15

    17

    14

    16

    19

    26

    24

    26

    27

    29

    试描绘出温度变化曲线。

    曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。

    曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。

    1.线性拟合函数:regress()

    调用格式:  b=regress(y,X)

                         [b,bint,r,rint,stats]= regress(y,X)

                         [b,bint,r,rint,stats]= regress(y,X,alpha)

    说明:b=regress(y,X)返回X与y的最小二乘拟合值,及线性模型的参数值β、ε。该函数求解线性模型:

    y=Xβ+ε

    β是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。

    bint返回β的95%的置信区间。r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。

    例1:设y的值为给定的x的线性函数加服从标准正态分布的随机干扰值得到。即y=10+x+ε ;求线性拟合方程系数。

    程序: x=[ones(10,1) (1:10)'];

          y=x*[10;1]+normrnd(0,0.1,10,1);

          [b,bint]=regress(y,x,0.05)

    结果:  x =

         1     1

         1     2

         1     3

         1     4

         1     5

         1     6

         1     7

         1     8

         1     9

         1    10

    y =

       10.9567

       11.8334

       13.0125

       14.0288

       14.8854

       16.1191

       17.1189

       17.9962

       19.0327

       20.0175

    b =

                  9.9213

                  1.0143

    bint =

                9.7889   10.0537

                0.9930    1.0357

    即回归方程为:y=9.9213+1.0143x

    2.多项式曲线拟合函数:polyfit( )

    调用格式:  p=polyfit(x,y,n)

                         [p,s]= polyfit(x,y,n)

    说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval)

    例2由离散数据

    x

    0

    .1

    .2

    .3

    .4

    .5

    .6

    .7

    .8

    .9

    1

    y

    .3

    .5

    1

    1.4

    1.6

    1.9

    .6

    .4

    .8

    1.5

    2

    拟合出多项式。

    程序:

                  x=0:.1:1;

                y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2];

                n=3;

                p=polyfit(x,y,n)

                xi=linspace(0,1,100);

                z=polyval(p,xi); %多项式求值

                plot(x,y,'o',xi,z,'k:',x,y,'b')

                legend('原始数据','3阶曲线')

    结果:

    p =

       16.7832  -25.7459   10.9802   -0.0035

    多项式为:16.7832x3-25.7459x2+10.9802x-0.0035

    曲线拟合图形:

    MATLAB插值与拟合 - 飞扬 Youth - 浇灌一处绿色的风景

    如果是n=6,则如下图:

    MATLAB插值与拟合(1)

     

    也可由函数给出数据。

    例3x=1:20,y=x+3*sin(x)

    程序:

           x=1:20;

           y=x+3*sin(x);

           p=polyfit(x,y,6)

           xi=linspace(1,20,100);

           z=polyval(p,xi);     %多项式求值函数

           plot(x,y,'o',xi,z,'k:',x,y,'b')

           legend('原始数据','6阶曲线')

    结果:

    p =

    0.0000   -0.0021    0.0505   -0.5971    3.6472   -9.7295   11.3304

    MATLAB插值与拟合 - 飞扬 Youth - 浇灌一处绿色的风景

     

    再用10阶多项式拟合

          程序:x=1:20;

    y=x+3*sin(x);

    p=polyfit(x,y,10)

    xi=linspace(1,20,100);

    z=polyval(p,xi);

    plot(x,y,'o',xi,z,'k:',x,y,'b')

    legend('原始数据','10阶多项式')

    结果:p =

      Columns 1 through 7

        0.0000   -0.0000    0.0004   -0.0114    0.1814   -1.8065   11.2360

      Columns 8 through 11

      -42.0861   88.5907  -92.8155   40.2671

    MATLAB插值与拟合 - 飞扬 Youth - 浇灌一处绿色的风景

     

    可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。

    3.         多项式曲线求值函数:polyval( )

    调用格式:  y=polyval(p,x)

                         [y,DELTA]=polyval(p,x,s)

    说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。

    [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。

     

    4.         多项式曲线拟合的评价和置信区间函数:polyconf( )

    调用格式:  [Y,DELTA]=polyconf(p,x,s)

                         [Y,DELTA]=polyconf(p,x,s,alpha)

    说明:[Y,DELTA]=polyconf(p,x,s)使用polyfit函数的选项输出s给出Y的95%置信区间Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。1-alpha为置信度。

    例4给出上面例1的预测值及置信度为90%的置信区间。

    程序:   x=0:.1:1;

            y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2]

            n=3;

            [p,s]=polyfit(x,y,n)

            alpha=0.05;

           [Y,DELTA]=polyconf(p,x,s,alpha)

           结果:  

     p =

       16.7832  -25.7459   10.9802   -0.0035


    s =

       R: [4x4 double]
      df: 7
    normr: 1.1406


    Y =

      Columns 1 through 9

       -0.0035    0.8538    1.2970    1.4266    1.3434    1.1480    0.9413   0.8238    0.8963

      Columns 10 through 11

        1.2594    2.0140

    5.         稳健回归函数:robust( )

    稳健回归是指此回归方法相对于其他回归方法而言,受异常值的影响较小。

    调用格式:  b=robustfit(x,y)

                         [b,stats]=robustfit(x,y)

                         [b,stats]=robustfit(x,y,’wfun’,tune,’const’)

    说明:b返回系数估计向量;stats返回各种参数估计;’wfun’指定一个加权函数;tune为调协常数;’const’的值为’on’(默认值)时添加一个常数项;为’off ’时忽略常数项。

    例5演示一个异常数据点如何影响最小二乘拟合值与稳健拟合。首先利用函数y=10-2x加上一些随机干扰的项生成数据集,然后改变一个y的值形成异常值。调用不同的拟合函数,通过图形观查影响程度。

    程序:x=(1:10)’;

    y=10-2*x+randn(10,1);

    y(10)=0;

    bls=regress(y,[ones(10,1) x]) %线性拟合

    brob=robustfit(x,y) %稳健拟合

    scatter(x,y)

    hold on

    plot(x,bls(1)+bls(2)*x,’:’)

    plot(x,brob(1)+brob(2)*x,’r‘)

    结果  bls =

                        8.4452

                       -1.4784

    brob =

                       10.2934

                       -2.0006

    MATLAB插值与拟合 - 飞扬 Youth - 浇灌一处绿色的风景

     

    分析:稳健拟合(实线)对数据的拟合程度好些,忽略了异常值。最小二乘拟合(点线)则受到异常值的影响,向异常值偏移。

    6.         向自定义函数拟合

    对于给定的数据,根据经验拟合为带有待定常数的自定义函数。

    所用函数:nlinfit( )

    调用格式:  [beta,r,J]=nlinfit(X,y,’fun’,betao)

    说明:beta返回函数’fun’中的待定常数;r表示残差;J表示雅可比矩阵。X,y为数据;‘fun’自定义函数;beta0待定常数初值。

    例6在化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有如下形式的非线性模型:

          

    现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。

    x            y                   x            y                   x            y

    8            0.49               16           0.43               28           0.41

    8            0.49               18           0.46               28           0.40

    10           0.48               18           0.45               30           0.40

    10           0.47               20           0.42               30           0.40

    10           0.48               20           0.42               30           0.38

    10           0.47               20           0.43               32           0.41

    12           0.46               20           0.41               32           0.40

    12           0.46               22           0.41               34           0.40

    12           0.45               22           0.40               36           0.41

    12           0.43               24           0.42               36           0.36

    14           0.45               24           0.40               38           0.40

    14           0.43               24           0.40               38           0.40

    14           0.43               26           0.41               40           0.36

    16           0.44               26           0.40               42           0.39

    16           0.43               26           0.41

           首先定义非线性函数的m文件:fff6.m

    function yy=model(beta0,x)

      a=beta0(1);

      b=beta0(2);

      yy=a+(0.49-a)*exp(-b*(x-8));

           程序:

    x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00... 

         16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00...  

         24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00...

         34.00 36.00 36.00 38.00 38.00 40.00 42.00]';

       y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43...

         0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41...

         0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39]';

         beta0=[0.30 0.02];

    betafit = nlinfit(x,y,'sta67_1m',beta0)

    结果:betafit =

                    0.3896

    0.1011

    转载于:https://www.cnblogs.com/zhangxinly/p/6221289.html

    展开全文
  • 基于Matlab曲线拟合工具箱的列表曲线拟合.pdf
  • matlab曲线拟合 函数 用法以及例子(polyfit)

    万次阅读 多人点赞 2018-05-22 15:48:28
    转自:https://blog.csdn.net/It_BeeCoder/article/details/78779385在运行MATLAB...所以,工具箱拟合结果十分不适合调用,以及继续下面的操作,所以我们需要用到matlab曲线拟合函数,并且以最常用的多项式拟合函数为...
  • matlab曲线拟合工具

    2014-03-24 11:30:08
    matlab曲线拟合工具用于数据的线性回归预测
  • 使用MATLAB曲线拟合工具箱做曲线拟合.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,529
精华内容 3,811
关键字:

matlab曲线拟合

matlab 订阅