您的位置:首页 > 编程语言 > MATLAB

Matlab学以致用 - 曲线拟合

2017-10-21 11:21 375 查看

曲线拟合

使用Matlab自带的polyfit函数,可以很方便地根据现有样本数据进行多项式曲线拟合,为了有直观感受,先上例程,如下所示:

1 x = -5:0.1:5;                           % 样本数据x坐标
2 y = 3*x.^2 + 6*x + 5 + randn(size(x));  % 样本数据y坐标,添加随机噪声
3
4 p = polyfit(x, y, 2);   % 使用自带函数进行数据拟合,拟合的多项式维数n=2
5 yy = polyval(p, x);     % 生成拟合数据
6
7 figure, plot(x, y, '.');                    % 显示原始数据
8 xlabel('x'), ylabel('y');                   % 坐标轴
9 hold on, plot(x, yy, 'r', 'LineWidth', 2);  % 显示拟合数据
10 legend('raw data', 'fitting line');         % 图例


运行结果:



函数说明:

p = polyfit(x,y,n) returns the coefficients for a polynomial p(x) of degree n that is a best fit (in a least-squares sense) for the data in y. The coefficients in p are in descending powers, and the length of p is n+1



即,polyfit(x,y,n) 返回对应于样本数据y的n维多项式p(x)的系数(基于最小二乘法)。该系数按照降幂顺序排列,个数为 n+1

直线拟合

基本原理:给定一组数据[x1,x2,…,xn]和[y1,y2,…yn],已知x和y成基本线性关系,即存在一条最佳拟合直线 y = kx + b,对此,同样可以基于最小二乘法来求出系数k和b。此时,调用polyfit(x,y,n)时,应取n=1,即把直线拟合看作是一阶多项式的拟合,在此不再赘述。

另外,还可以使用基于矩阵除法的直线拟合方法,基本原理如下:



例程:

1 % 基于矩阵除法的直线拟合
2 x = [0.5 1 1.5 2 2.5 3];
3 y = [1.75 2.45 3.81 4.8 8 8.6];
4
5 n = length(x);
6 x = reshape(x,n,1);          % 生成列向量
7 y = reshape(y,n,1);
8 A = [x,ones(n,1)];           % 连接矩接A
9
10 yy = A \ y;                  % 左除,相当于inv(A)*y
11
12 k = yy(1);                   % 得到k
13 b = yy(2);                   % 得到b
14
15 yy = polyval([k, b], x);     % 生成拟合数据
16 figure,
17 plot(x, y, '*');
18 hold on, plot(x, yy, 'r');   % 显示拟合曲线


运行结果:



reference

http://cofftech.iteye.com/blog/2211239

http://blog.csdn.net/seamanj/article/details/36209865
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: