当前位置:   article > 正文

matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)_matlab polyfit polyval

matlab polyfit polyval

matlab中polyfit函数的作用是对数据进行数据拟合

有些小伙伴可能搞不清楚polyfit和polyval之间的区别,这里就直接上我的笔记给大家看看吧

  1. %% 普通的多项式拟合
  2. clear;clc;
  3. num = 30;
  4. x = linspace(0,5,num); % 横轴数据
  5. error = rand(1,num); % 生产误差值
  6. a = x.^2+2*error; % 纵轴数据
  7. p = polyfit(x,a,2); % 使用 polyfit函数 拟合横、纵轴数据得到拟合多项式,储存在p中
  8. % p为多项式的系数矩阵,系数按多项式次数降序排列
  9. % 如 p = [1,2,3] 指2次项次数为11次项系数为2,常数项系数为3
  10. % polyfit中第三个参数为拟合曲线的最高次数
  11. y = polyval(p,x) % polyval用于计算出每个横轴坐标(x)在拟合多项式(p)中对应的函数值
  12. plot(x,a,'o',x,y,'-')

【拓展】:下面将给出用polyfit函数进行指数拟合的一种方法

先插入一段基本思路

  1. %% 指数拟合的方法
  2. % 基本思路: 将指数关系转化为线性关系
  3. % a = A*exp(B*x)
  4. % --> a/A = exp(B*x)
  5. % --> ln(a/A) = B*x
  6. % --> lna = B*x + lnA
  7. % 这样一来,x和a之间的指数关系就转化为了x和lna的线性关系
  8. % 因此可以用polyfit进行多项式拟合
  9. % PS:matlab中系数矩阵是降序排列
  10. % 如[1,2,3]指2次项次数为11次项系数为2,常数项系数为3

指数拟合程序:

  1. clear;clc;
  2. num = 30;
  3. x = linspace(0,1,num);
  4. error = rand(1,num);
  5. A0 = 1;
  6. B0 = 2;
  7. a = A0*exp(B0*x)+0.5*error;
  8. sh = log(a); % 先对要拟合的数据取对数
  9. p = polyfit(x,sh,1); % 然后对这个中间量sh进行线性拟合
  10. % B = p(1)
  11. % lnA = p(2)
  12. % -----------------方法一:可以求出指数拟合的解析式------------------------
  13. B = p(1);
  14. A = exp(p(2));
  15. y1 = A*exp(B*x);
  16. % -----------------方法二:这种方法绕过求解解析式,直接得到拟合曲线---------
  17. sh2 = polyval(p,x);
  18. y2 = exp(sh2);
  19. % 可见,两种方式求解得到的结果相同
  20. subplot(1,2,1)
  21. plot(x,a,'o',x,y1,'-')
  22. subplot(1,2,2)
  23. plot(x,a,'o',x,y2,'-')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/97099
推荐阅读
相关标签
  

闽ICP备14008679号