一、多项式拟合

  • 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 allclcx = [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
  • 输出结果如下:

  • 可见,当采用 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) == Mr = xi;xi = x;% 当调用的格式为(x,y,N,xi)else r = 1;end;% 当调用格式为(x,y,N)elseif nargin == 3xi = x;r = 1;end% 求解系数矩阵A(:,N+1) = ones(M,1);for n = N:-1:1A(:,n) = A(:,n+1).*x;endif length(r) == Mfor m =1:MA(m,:) = A(m,:)/r(m);y(m) = y(m)/r(m);endend% 计算拟合系数th = (A\y)';ye = polyval(th,x);err = norm(y-ye)/norm(y);yi = polyval(th,xi);
  • 将上面代码保存为 “polyfits.m” 文件
  • 使用上面的程序代码,对基础数据进行 LS 多项式拟合。在 MATLAB 的命令窗口输入下面的程序
     clear allclcx = [-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:4N = 2*i-1;[th,err,yi] = polyfits(x,y,N,xi);subplot(2,2,i)plot(x,y,'o')hold onplot(xi,yi,'-')grid onend
  • 得到的拟合结果

  • 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 allclcxdata = [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如何快速进行曲线拟合

转载于:https://www.cnblogs.com/NikkiNikita/p/9464245.html

MATLAB曲线拟合函数相关推荐

  1. matlab曲线拟合 函数 用法以及例子

    在运行MATLAB编程进行数据的处理过程当中,我们常常用到matlab曲线拟合,但是工具箱由于需要人工交互,得到的拟合结果,需要人工的去提取,再输入,所以,工具箱拟合结果十分不适合调用,以及继续下面的 ...

  2. matlab拟合曲线poly交点,matlab曲线拟合 函数 用法以及例子,看完你就知道了

    在运行MATLAB编程进行数据的处理过程当中,我们常常用到matlab曲线拟合,但是工具箱由于需要人工交互,得到的拟合结果,需要人工的去提取,再输入,所以, 工具箱拟合结果 十分不适合调用,以及继续下 ...

  3. Matlab负幂次拟合,matlab 曲线拟合函数中幂为负数该怎么写?比如实现y=a*x^(-1)+b*x^(-2) 的曲线拟合系数a,b...

    答:用 nlinfit()函数或lsqcurvefit()函数,可以求得其曲线拟合系数a,b. 求解步骤: x=[...],y=[...] func=@(a,x)a(1)*x^(-1)+a(2)*x^ ...

  4. matlab曲线拟合详解(含fit、fittype函数及fitoptions设置)

    在利用origin等商业软件对某些复杂的公式进行拟合时,常常会出现未知原因的拟合失败.这并不是说明我们的公式本身有问题,很有可能是因为商业软件本身的算法有问题.这时候就可以应用matlab中的曲线拟合 ...

  5. MATLAB多项式函数拟合和曲线拟合

    MATLAB软件提供了基本的曲线拟合函数的命令. 多项式函数拟合:a=polyfit(xdata,ydata,n) 其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式 ...

  6. matlab 曲线命令,matlab软件基本的曲线拟合函数命令

    matlab软件基本的曲线拟合函数命令 MATLAB软件提供了基本的曲线拟合函数的命令. 曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非 采集数据对应的变量信息.1.线性拟 ...

  7. matlab 曲线拟合--视频编码中PSNR计算及码率计算

    matlab 曲线拟合分为多项式拟合和一般曲线拟合 一.多项式拟合 用到的函数为: a=polyfit(xdata,ydata,n); n表示多项式的最高阶数: (我遇到的问题是要拟合一般曲线,因此多 ...

  8. matlab曲线拟合的应用,MATLAB软件在曲线拟合中的应用

    2007 年第 3 期 福 建 电 脑 MATLAB软件在曲线拟合中的应用 冯元珍 1, 屠小明 2, 罗建平 2 (1. 南京人口管理干部学院基础部 江苏 南京 210042 2. 南京医科大学数学 ...

  9. Matlab——常用函数的用法总结(部分直接摘自mathwork,持续更新)

    Matlab--常用函数的用法总结(部分直接摘自mathwork,持续更新) 文章目录 Matlab--常用函数的用法总结(部分直接摘自mathwork,持续更新) 一.绘图篇 1.图像显示形式 ①f ...

  10. matlab ploty,matlab绘制函数 如何利用matlab的ploty

    最近有网友提出"matlab绘制函数 如何利用matlab的ploty"等问题,小小知识站提取了各大知名网站有关"matlab绘制函数 如何利用matlab的ploty& ...

最新文章

  1. equals方法变量和常量位置区别
  2. unity 弹出式菜单_Java Swing JMenu和JPopupMenu:菜单和弹出式菜单
  3. 科大星云诗社动态20210519
  4. dnf时装预览怎么打开_DNF最疯狂的年代,纯色天空整套白给,“神话”宠物不卖只送...
  5. 结对作业_代码复审= =
  6. 关于mysql查询_关于mysql的查询
  7. 长治a货翡翠,永州a货翡翠
  8. 毕设题目:Matlab图像融合
  9. c语言读取windows注册表,C\C++修改windows注册表
  10. python身份证号码校验第十七位系数_python实现身份证校验位计算
  11. Vue引入百度地图API,添加点击地图拾取坐标并且标记和地址搜索功能
  12. html5如何引用百度地图api,WebApp如何调用百度地图API
  13. 菜刀、冰蝎、蚁剑、哥斯拉
  14. 简单解释一下一个项目中的pojo模块
  15. qq上word文件失效怎么恢复
  16. Linux系统磁盘大小比raid小,挂载磁盘阵列柜后,显示的大小比实际小1TB
  17. iOS JS与OC交互
  18. FireAlpaca(电脑绘画软件)官方中文版V2.7.7 | 火羊驼绘画软件下载 | 电脑绘画软件哪个好用?
  19. 2023年考生必读!PMP最强自学教程
  20. 基于433M频率无线通信模块在评委台的无线传输应用

热门文章

  1. comsol 超声声场模拟_Comsol Multiphysics 声场仿真模块整体介绍
  2. Maven下载及安装教程
  3. java中的oop是什么意思_什么是面向对象编程(OOP)?
  4. 人工势场法(APF) —— Path Planning
  5. 根据输入的银行卡号识别出银行名称并显示
  6. oracle语句查询时间范围,oracle时间范围查询
  7. 中值滤波(Median filtering)
  8. java日期字符串排序_java字符串日期排序比较问题
  9. B-002 电容基础知识
  10. dnastar拼接反向互补序列_DNAstar 教程