在MATLAB中polyfit函数是用来进行多项式拟合的。其数学原理是基于最小二乘法进行拟合的。具体使用语法是:

p = polyfit(x,y,n);
% 其中x,y表示需要拟合的坐标点,大小需要一样; n表示多项式拟合的次数。
% 返回值p表示多项式拟合的系数,系数从高到低排列

1、使用polyfit函数拟合一次多项式,示例:

  1. %% polyfit函数的使用
  2. clear; clc; close all;
  3. % 原始数据
  4. x = 1:20;
  5. y = [1,12,23,46,78,98,100,123,160,210,230,270,292,350,346,386,438,349,460,512];
  6. p = polyfit(x,y,1); % 进行拟合
  7. y1 = x*p(1)+p(2); % 生成表达式,计算y的值
  8. figure; % 绘图
  9. scatter(x,y,\'.\');
  10. hold on;
  11. plot(x,y1,\'Color\',\'r\');
  12. % 添加说明
  13. xlabel(\'x\');ylabel(\'y\');title(\'自己构建表达式\');
  14. legend(\'原始数据\',\'拟合直线\');

结果示例:

在这里插入图片描述

2、在一般情况下使用polyfit函数的同时也会使用polyval函数,其中polyval函数是用来计算多项式的结果的。这样就不需要自己手动来计算多项式的结果了。其中polyval函数的使用方法如下:

p = polyfit(x,y,1);
y1 = polyval(p,x);
% 其中p就是使用polyfit函数拟合数据集x,y之后的结果,p是一个向量。
% 结果y1表示使用拟合多项式系数p来求出拟合结果y1。
具体示例:

  1. clear; clc; close all;
  2. % 原始数据
  3. x = 1:20;
  4. y = [1,12,23,46,78,98,100,123,160,210,230,270,292,350,346,386,438,349,460,512];
  5. p = polyfit(x,y,1); % 进行拟合
  6. y1 = polyval(p,x); % 生成表达式,计算y的值
  7. figure; % 绘图
  8. scatter(x,y,\'.\');
  9. hold on;
  10. plot(x,y1,\'Color\',\'r\');
  11. % 添加说明
  12. xlabel(\'x\');ylabel(\'y\');title(\'使用polyval函数\');
  13. legend(\'原始数据\',\'拟合直线\');

结果示例:

在这里插入图片描述

3、在一些特殊的情况下,当x的坐标值不是从小到大进行排列的时候,只要是x,y的坐标点一一对应的,都可以使用polyfit函数进行拟合处理,示例:

  1. %% 当拟合的数据x的坐标不是排列好顺序的时候同样可以进行拟合
  2. clear; clc; close all;
  3. % 遇到的数据的x轴的坐标是乱序的,不是按照从大到小进行排序,每个点是一一对应的
  4. x = [1,2,5,7,3,6,9,10,4,8,15,16,13,11,17,12,19,18,20];
  5. y = [1,12,78,100,23,98,160,210,46,123,346,386,292,230,438,270,460,349,512];
  6. % 当遇到x的点是乱序的时候,同样的可以使用polyfit函数直接进行拟合
  7. p = polyfit(x,y,1);
  8. y1 = polyval(p,x);
  9. figure; % 绘图
  10. scatter(x,y,\'.\');
  11. hold on;
  12. plot(x,y1,\'Color\',\'r\');
  13. % 添加说明
  14. xlabel(\'x\');ylabel(\'y\');title(\'x乱序\');
  15. legend(\'原始数据\',\'拟合直线\');

结果示例:

在这里插入图片描述

版权声明:本文为zhicungaoyuan-mingzhi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhicungaoyuan-mingzhi/p/12859769.html