matlab函数plotfit_Matlab polyfit 详解 | 方程组求解的稳定性 | 条件数

MATLAB 的 polyfit 函数用于拟合数据到多项式中,以最小二乘法找到最佳拟合。它返回多项式系数、结构体S以获取预测误差估计,并在需要时进行数据的中心化和标准化。当数据点重复或条件数较大时,会发出警告。通过示例展示了简单线性回归的使用方法。
摘要由CSDN通过智能技术生成

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.

%

% Example: simple linear regression with polyfit

%

% % Fit a polynomial p of degree 1 to the (x,y) data:

% x = 1:50;

% y = -0.3*x + 2*randn(1,50);

% p = polyfit(x,y,1);

%

% % Evaluate the fitted polynomial p and plot:

% f = polyval(p,x);

% plot(x,y,'o',x,f,'-')

% legend('data','linear fit')

%

% Class support for inputs X,Y:

% float: double, single

%

% See also POLY, POLYVAL, ROOTS, LSCOV.

% Copyright 1984-2018 The MathWorks, Inc.

if ~isequal(size(x),size(y))

error(message('MATLAB:polyfit:XYSizeMismatch'))

end

x = x(:);

y = y(:);

if nargout > 2

mu = [mean(x); std(x)];

x = (x - mu(1))/mu(2);

end

% Construct the Vandermonde matrix V = [x.^n ... x.^2 x ones(size(x))]

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 p = V\y to get polynomial coefficients p.

[Q,R] = qr(V,0);

oldws = warning('off','all'); % Turn all warnings off before solving

try

p = R\(Q'*y); % Same as p = V\y

catch ME

warning(oldws); % Restore initial warning state

throw(ME);

end

warning(oldws); % Restore initial warning state

% Issue warnings.

if size(R,2) > size(R,1)

warning(message('MATLAB:polyfit:PolyNotUnique'))

elseif warnIfLargeConditionNumber(R)

if nargout > 2

warning(message('MATLAB:polyfit:RepeatedPoints'));

else

warning(message('MATLAB:polyfit:RepeatedPointsOrRescale'));

end

end

if nargout > 1

r = y - V*p;

% 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 = max(0,length(y) - (n+1));

S.normr = norm(r);

end

p = p.'; % Polynomial coefficients are row vectors by convention.

functionflag =warnIfLargeConditionNumber(R)if isa(R, 'single')

flag = (condest(R) > 1e+05);

else

flag = (condest(R) > 1e+10);

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值