MATLAB学习--------2019/7/21

曲线拟合最小二乘法

最小二乘法的Matlab实现:

  1. 解方程组法:
    (1)确定系数:
    J ( a 1 , ⋯   , a m ) = ∣ ∣ R A − Y ∣ ∣ 2 2 J(a_{1},\cdots,a_{m})=||RA-Y||_{2}^{2} J(a1,,am)=RAY22
    MATLAB中线性最小二乘的标准形式为
    m i n A ∣ ∣ R A − Y ∣ ∣ 2 2 \mathop{min}\limits_{A}||RA-Y||_{2}^{2} AminRAY22
    命令为 :A=R\Y
    例5.5
x=[19 25 31 38 44]';
y=[19.0 32.3 49.0 73.3 97.8]';
r=[ones(5,1),x.^2]      %ones(5,1)意思是生成51列的全1阵
ab=r\y
x0=19:0.1:44;
y0=ab(1)+ab(2)*x0.^2;
plot(x,y,'o',x0,y0,'r')
  1. 多项式拟合方法:
    MATLAB命令:
    a=polyfit(x0,y0,m)
    其中: x 0 , y 0 为 要 拟 合 的 数 据 , m 为 拟 合 多 项 式 的 次 数 , 输 出 参 数 a 为 拟 合 多 项 式 : y = a ( 1 ) x m + ⋯ + a ( m ) x + a ( m + 1 ) 的 系 数 向 量 a = [ a ( 1 ) , ⋯   , a ( m ) , a ( m + 1 ) ] x0,y0为要拟合的数据,m为拟合多项式的次数,输出参数a为拟合多项式:y=a(1)x^{m}+\cdots+a(m)x+a(m+1)的系数向量a=[a(1),\cdots,a(m),a(m+1)] x0,y0may=a(1)xm++a(m)x+a(m+1)a=[a(1),,a(m),a(m+1)]


    多项式在x处的值y:
    y=polyval(a,x);

    例5.6
x0=1990:1:1996;
y0=[70,122,144,152,174,196,202];
plot(x0,y0,'*')
%由图可知,利润直线上升所以用y=a1x+b函数
a=polyfit(x0,y0,1);
y1=polyval(a,1997)
y2=polyval(a,1998)

最小二乘优化
(1)把由若干个子函数的平方和构成的函数写成: F ( x ) = ∑ i = 1 m f i 2 ( x ) , x ∈ R n F(x)=\sum_{i=1}^{m}{f_{i}^{2}(x)},x\in R^{n} F(x)=i=1mfi2(x),xRn
式中: x = [ x 1 , ⋯   , x n ] T x=[x_{1},\cdots,x_{n}]^{T} x=[x1,,xn]T;
把极小化此类函数的问题
m i n F ( x ) = ∑ i = 1 m f i 2 ( x ) min \qquad F(x)=\sum_{i=1}^{m}{f_{i}^{2}(x)} minF(x)=i=1mfi2(x)
称为最小二乘优化问题
(2)
在这里插入图片描述
(3)总结:MATLAB中用于解决此类问题的函数:lsqlin,lsqcurvefit,lsqnonlin,lsqnonneg

  • Isqlin函数
    求解:
    m i n x 1 2 ∣ ∣ C ⋅ x − d ∣ ∣ 2 2 \mathop{min}\limits_{x} \quad\frac{1}{2} ||C·x-d||_{2}^{2} xmin21Cxd22
    s . t . = { A ⋅ x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b s_{.}t_{.}=\left\{ \begin{aligned} A ·x \leq b \\ Aeq ·x=beq \\ lb\leq x \leq ub \end{aligned} \right. s.t.=AxbAeqx=beqlbxub
    命令:x=lsqlin(c,d,A,b,Aeq,beq,lb,ub,x0)
  • Isqcurvefit函数
    给定输入输出数列xdata,ydata,求参量x,使
    m i n x ∣ ∣ F ( x , x d a t a ) − y d a t a ∣ ∣ 2 2 = ∑ i ( F ( x , x d a t a i ) − y d a t a i ) 2 \mathop{min}\limits_{x} \quad ||F(x,xdata)-ydata||_{2}^{2}=\sum_{i}(F(x,xdata_{i})-ydata_{i})^{2} xminF(x,xdata)ydata22=i(F(x,xdatai)ydatai)2
    命令:x=lsqlin(fun,x0,xdata,ydata,lb,ub,options)
  • lsqnonlin函数
    求解非负的x,使得:
    m i n x ∣ ∣ C ⋅ x − d ∣ ∣ 2 2 \mathop{min}\limits_{x} \quad ||C·x-d||_{2}^{2} xminCxd22
    命令:x=lsqnonlin(C,d,options)

MATLAB曲线拟合图形界面解法:
命令:cftool,给出了一维数据的拟合

曲线拟合与函数逼近
原文地址:https://wenku.baidu.com/view/cf56be0e6ad97f192279168884868762caaebb24.html

在这里插入图片描述
在这里插入图片描述
切米雪夫多项式函数
在这里插入图片描述

加权最小方差拟合(WLS)
根据基础数据准确性的不同,在拟合时给每个数据以不同的加权数值
WLS拟和数据的函数:

function [th,err,yi]=polyfits_W_L_S(x,y,N,xi,r)
%x,y:数据点系列
%N:多项式拟合的系统,x的阶数
%r:加权系数的逆矩阵

M=length(x);
x=x(:);
y=y(:);
if nargin==4
    if length(xi)==M
        r=xi;
        xi=x;
    else
        r=1;
    end
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)
    th=(A\y)';
    ye=polyval(th,x);
    err=norm(y-ye)/norm(y);
    yi=polyval(th,xi);
end

实例:在MATLAB中输入以下代码:

x=[-3:1:3]';
y=[1.1650,0.0751,-0.6965,0.0591,0.6268,0.3516,1.6961]';
[x,i]=sort(x);
% sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。sort(A)是默认的升序,而sort(A,'descend')是降序排序。
% sort(A)若A是矩阵,默认对A的各列进行升序排列
% sort(A,dim)
% dim=1时等效sort(A)
% dim=2时表示对A中的各行元素升序排列


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_W_L_S(x,y,N,xi); 
subplot(2,2,i);
plot(x,y,'o');
hold on
plot(xi,yi,'-');
grid on
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值