解读Matlab 程序

>> clear
>> h=[4 8 10 14 16 20 19 23 26 30 31 36 37];
>> E=[41 50 81 104 120 139 154 180 208 241 250 269 301];
>> [a,b]=polyfit(E,h,1)

a =

0.1241 0.6719

b =

R: [2x2 double]
df: 11
normr: 4.0096
0.1241 0.6719分别代表什么?R ,df,normr又代表什么????

引用一下别人的
df是自由度
normr是标准偏差

MATLAB软件提供了基本的曲线拟合函数的命令.

多项式函数拟合:a=polyfit(xdata,ydata,n)

其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式 y=a1xn+...+anx+a n+1的系数
多项式在x处的值y可用下面程序计算.

y=polyval(a,x,m)

线性:m=1, 二次:m=2, …

polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

例:

x=0:0.1:1;

y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

A=polyfit(x,y,2)

Z=polyval(A,x);

Plot(x,y,’r*’,x,z,’b’)

polyfit不能保证你每次都能得到最优解,math的答案是使用数值计算。

个人认为,对于这种非线性的曲线,尽量不要使用ployfit, ployfit多项式抑合适合线性方程!!

用polyfit()函数去拟合这么复杂的曲线不太合适,polyfit()函数对于数据遵循多项式分布是比较好的,一般来说,利用polyfit()函数拟合的阶数不要超过5阶。

如果是不需要得到拟合曲线的函数,只是把这些点利用一些光滑曲线连接,建议使用三次样条函数spline()进行插值即可。

polyfit.m 在MATLAB安装目录下 \toolbox\matlab\polyfun

function [p,S,mu] = polyfit(x,y,n)
%POLYFIT Fit polynomial to data.
% P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
% degree N that fits the data Y best in a least-squares sense. P is a
% row vector of length N+1 containing the polynomial coefficients in
% descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1).
%
% [P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a
% structure S for use with POLYVAL to obtain error estimates for
% predictions. S contains fields for the triangular factor (R) from a QR
% decomposition of the Vandermonde matrix of X, the degrees of freedom
% (df), and the norm of the residuals (normr). If the data Y are random,
% an estimate of the covariance matrix of P is (Rinv*Rinv')*normr^2/df,
% where Rinv is the inverse of R.
%
% [P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial in
% XHAT = (X-MU(1))/MU(2) where MU(1) = MEAN(X) and MU(2) = STD(X). This
% centering and scaling transformation improves the numerical properties
% of both the polynomial and the fitting algorithm.
%
% Warning messages result if N is >= length(X), if X has repeated, or
% nearly repeated, points, or if X might need centering and scaling.
%
% Class support for inputs X,Y:
% float: double, single
%
% See also POLY, POLYVAL, ROOTS.

% Copyright 1984-2004 The MathWorks, Inc.
% $Revision: 5.17.4.5 $ $Date: 2004/07/05 17:01:37 $

% The regression problem is formulated in matrix format as:
%
% y = V*p or
%
% 3 2
% y = [x x x 1] [p3
% p2
% p1
% p0]
%
% where the vector p contains the coefficients to be found. For a
% 7th order polynomial, matrix V would be:
%
% V = [x.^7 x.^6 x.^5 x.^4 x.^3 x.^2 x ones(size(x))];

if ~isequal(size(x),size(y))
error('MATLAB:polyfit:XYSizeMismatch',...
'X and Y vectors must be the same size.')
end

x = x(:);
y = y(:);

if nargout > 2
mu = [mean(x); std(x)];
x = (x - mu(1))/mu(2);
end

% Construct Vandermonde matrix.
V(:,n+1) = ones(length(x),1,class(x));
for j = n:-1:1
V(:,j) = x.*V(:,j+1);
end

% Solve least squares problem.
[Q,R] = qr(V,0);
ws = warning('off','all');
p = R\(Q'*y); % Same as p = V\y;
warning(ws);
if size(R,2) > size(R,1)
warning('MATLAB:polyfit:PolyNotUnique', ...
'Polynomial is not unique; degree >= number of data points.')
elseif condest(R) > 1.0e10
if nargout > 2
warning('MATLAB:polyfit:RepeatedPoints', ...
'Polynomial is badly conditioned. Remove repeated data points.')
else
warning('MATLAB:polyfit:RepeatedPointsOrRescale', ...
['Polynomial is badly conditioned. Remove repeated data points\n' ...
' or try centering and scaling as described in HELP POLYFIT.'])
end
end
r = y - V*p;
p = p.'; % Polynomial coefficients are row vectors by convention.

% S is a structure containing three elements: the triangular factor from a
% QR decomposition of the Vandermonde matrix, the degrees of freedom and
% the norm of the residuals.
S.R = R;
S.df = length(y) - (n+1);
S.normr = norm(r);
温馨提示:答案为网友推荐,仅供参考