matlab曲线拟合 函数 用法以及例子(polyfit)

(一)polyfit曲线拟合 函数 用法以及例子

转自:https://blog.csdn.net/It_BeeCoder/article/details/78779385

在运行MATLAB编程进行数据的处理过程当中,我们常常用到matlab曲线拟合,但是工具箱由于需要人工交互,得到的拟合结果,需要人工的去提取,再输入,所以,工具箱拟合结果十分不适合调用,以及继续下面的操作,所以我们需要用到matlab曲线拟合函数,并且以最常用的多项式拟合函数为例作为matlab曲线拟合例子,进行详细介绍。

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

工具/原料

  • MATLAB

matlab曲线拟合

  1. 1

    数据准备:

    关于MATLAB曲线拟合,我写了一系列的经验,为了相互统一,采用下面的数据:

    x=[0    0.3000    0.6000    0.9000    1.2000    1.5000    1.8000    2.1000    2.4000    2.7000    3.0000]

    y=[2.0000    2.3780    3.9440    7.3460   13.2320   22.2500   35.0480   52.2740   74.5760  102.6020  137.0000]

    由函数y=4*x^3+3*x^2+2 产生。

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

    函数命令拟合:

    MATLAB为我们提供了多项式拟合函数命令polyfit,下面我们就用这个函数命令进行拟合。

    在MATLAB主窗口中输入

    y1=polyfit(x,y,3),回车

    我们会看到下面结果:

    y1 =

        4.0000    3.0000    0.0000    2.0000

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

    函数的说明:

    y1=polyfit(x,y,N),这里函数polyfit第一个参数传递的是拟合数据的自变量,第二个参数是因变量,第三个参数是拟合多项式的阶数,这个由我们给定。如下图。我们可以给定不同的N,运用不同的多项式进行拟合。

    输出结果:

    在上面的例子中我们看到输出的结果是:

    y1 =

        4.0000    3.0000    0.0000    2.0000

    对照原始的函数y=4*x^3+3*x^2+2 ,我们可以看到,y1其实输出的是拟合函数的系数,并且由高次到低次由左到右输出。

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




  4. 4

    多项式阶数N的确定:

    这里有些人可能会有问题了,我们事先不知道要拟合的数据是几阶的,那么我们如何判断我们给定的拟合阶数N最终为多少呢?

    阶数确定方法一:

    这种方法是最常用的确定方法,一般情况下,我们拟合函数的目的,就是为了调用,所以在用函数拟合之前会用matlab曲线拟合工具箱进行拟合函数阶数的确定,由其确定拟合的阶数,然后我们用这个函数命令在其他地方进行十分方便地调用,这是最常用的做法。我们往往拟合的是多个同类型的数据,所以确定好一组样本的次数之后,就可以对其他数据用同样的N进行拟合。

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



  5. 5

    阶数确定方法二:

    这种方法方法可以取代用cftool进行判断的过程,具体实现代码如下:

    for i=1:5

        y2=polyfit(x,y,i);

        Y=polyval(y2,x);%计算拟合函数在x处的值。

        if sum((Y-y).^2)<0.1

          

            c=i  

            break;

        end

    end

    运行以上程序,结果如下:

    c=3

    假设我们的误差平方和精度范围为0.1,那么通过以上程序,我们可以看到用3阶函数拟合,就可以达到精度要求。在多项式进行拟合的时候这个值我们在程序执行的过程中就直接可以调用。

    说明:至于说用plot函数进行画图,肉眼观察拟合程度的那种笨方法,我们不推荐,这里也不赘述。

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





matlab曲线拟合结果调用及显示

  1. 大家可能有疑问,我们拟合完函数之后得到的是拟合多项式的系数,我们应该如何调用?如何查看我们拟合的多项式是什么形式呢?下面我们就接着上面的内容进行介绍。

  2. 拟合多项式的显示:

    在MATLAB主窗口中输入

    syms x f(x)

    f(x)=poly2sym(y2,x)

    我们会看到输出如下结果:

    f(x) =

     

    4*x^3 + 3*x^2 + (5822273280258613*x)/1267650600228229401496703205376 + 2

    这就是我们拟合出来的多项式。

    这里我们看到一次项的系数并不是0,这里5822273280258613/1267650600228229401496703205376=4.5930e-15,这个数量级我们完全可以忽略,认为是0。

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



  3. 拟合结果的调用:

    在MATLAB主窗口中输入如下命令:

    TEST=polyval(y2,x)

    我们可以看到如下结果,如下图。

    函数polyval()的第一个参数为多项式的系数,第二个参数为要计算的自变量值。可以是向量或者矩阵。

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








以下转自:https://blog.csdn.net/cs_zlg/article/details/8516628

(二)matlab的polyfit命令,可以理解为“polynomial fitting”,用于数据的多项式拟合。

常用的几种命令格式:

1.P = POLYFIT(X,Y,N)

功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数。返回值P为N+1维参数向量p(1),p(2)....所得的多项式为P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1)

2.[P,S] = POLYFIT(X,Y,N)

功能:(1)P的意义同1,是参数矩阵。S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)


注意:

1. 使用polyfit命令进行多项式拟合时要注意的是,向量X(其中元素作为自变量)中不重复的元素个数m,和拟合阶数k需要满足m>=k+1.简单分析:k阶拟  合需要确定k+1个未知参数(如1阶拟合y = ax + b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。

以上只是帮助理解的粗略分析,仅供参考。

2. polyfit适合于形如y = a[k]*x^k + a[k-1]*x^(k-1) + .... + a[1]*x + a[0]的完全的一元多项式的数据拟合。


  • 61
    点赞
  • 378
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB(Matrix Laboratory)是一种专业的数学软件,可以进行数据处理、可视化、数学建模等功能,拥有强大的计算、绘图和数据分析功能。其MATLAB曲线拟合函数可以对一组数据进行拟合,并选择合适的拟合模型。以下是其用法以及一个简单的例子用法polyfit和polyval是matlab用于多项式拟合的功能。 polyfit(X,Y,N)函数会返回一个长度为N + 1的向量,其包含多项式系数p,p的元素按降幂排列,这样多项式就变成了p(1) * x^(N) + ...+ p(N) * x + p(N + 1)。X和Y表示给出的坐标点,N表示多项式的次数。 polyval(p,x)函数使用多项式系数向量p(例如计算结果),返回多项式的值。p包含的元素按降幂排列,例如,多项式p(x)=3x^2+2x+1 可表示为p = [3 2 1]。给定x值和多项式系数p,polyval函数可以计算多项式的值。 例子: 假设有一组坐标点x和y,将这组坐标点进行多项式拟合。 %生成随机数据,x表示横坐标,y表示纵坐标 x = 1:10; y = rand(1,10); %画出原始图像 plot(x,y,'*'); %将数据进行多项式拟合, 次数为N (此处设置N=3) p = polyfit(x,y,3); %根据拟合多项式绘制曲线 y_fit = polyval(p,x); hold on; plot(x,y_fit,'-'); %显示拟合后的图像 legend('原始数据','拟合曲线'); xlabel('自变量(x)'); ylabel('因变量(y)'); title('多项式拟合曲线'); 以上是一个简单的例子,可以通过CSND等技术网站获取更多的示例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值