赞
踩
一、多项式拟合
- clear all
- clc
- 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];
- 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)拟合原理及实例
- 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) == M
- r = xi;
- xi = x;
- % 当调用的格式为(x,y,N,xi)
- else r = 1;
- end;
- % 当调用格式为(x,y,N)
- elseif nargin == 3
- xi = x;
- r = 1;
- end
- % 求解系数矩阵
- A(:,N+1) = ones(M,1);
- for n = N:-1:1
- A(:,n) = A(:,n+1).*x;
- end
- if length(r) == M
- for m =1:M
- A(m,:) = A(m,:)/r(m);
- y(m) = y(m)/r(m);
- end
- end
- % 计算拟合系数
- th = (A\y)';
- ye = polyval(th,x);
- err = norm(y-ye)/norm(y);
- yi = polyval(th,xi);
- clear all
- clc
- x = [-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:4
- N = 2*i-1;
- [th,err,yi] = polyfits(x,y,N,xi);
- subplot(2,2,i)
- plot(x,y,'o')
- hold on
- plot(xi,yi,'-')
- grid on
- end
得到的拟合结果
LS 方法其实是 WLS 方法的一种特例,相当于将每个基础数据的准确度都设为 1。但是,自行编写的 M 文件和默认的命令结果不同
三、非线性曲线拟合
- function F = ex1024(x,xdata)
- F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;
- clear all
- clc
- xdata = [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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。