MATLAB编写高等数值大作业最小二乘法

最小二乘法

已知有如下数据:

x

4

4.2

4.5

4.7

5.1

5.5

5.9

6.3

6.8

7.1

y

102.56

113.18

130.11

142.05

167.53

195.14

224.87

256.73

299.50

326.72

(1) 分别构造一次、二次、三次最小二乘多项式,画图并计算平方误差;

(2) 构造形如y=be^{ax}  和y=bx^{a}的最小二乘多项式,画图并计算平方误差.

1. 数学原理

最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

从整体上考虑近似函数p\left ( x \right ) 同所给数据点(x_{i},y_{_{i}}) (i=0,1,…,m)误差r_{i}=p\left ( x_{i} \right )-y_{i} (i=0,1,…,m)的大小,常用的方法有以下三种:一是误差r_{i}=p\left ( x_{i} \right )-y_{i}(i=0,1,…,m)绝对值的最大值\underset{0\leqslant i\leqslant m}{max}\left | r_{i} \right | ,即误差向量r=\left \{ r_{0},r_{1},...,,r_{m} \right \}^{T} 的∞—范数;二是误差绝对值的和 \sum_{i=0}^{m}}\left | r_{i} \right |,即误差向量r的1—范数;三是误差平方和\sum_{i=0}^{m}}r_{i}^{2} 的算术平方根,即误差向量r的2—范数;前两种方法简单、自然,但不便于微分运算 ,后一种方法相当于考虑 2—范数的平方,因此在曲线拟合中常采用误差平方和 \sum_{i=0}^{m}}r_{i}^{2}来度量误差 (i=0,1,…,m)的整体大小。

数据拟合的具体作法是:对给定数据(x_{i},y_{_{i}}) (i=0,1,…,m),在取定的函数类 \Phi中,求p\left ( x \right )\in \Phi ,使误差r_{i}=p\left ( x_{i} \right )-y_{i} (i=0,1,…,m)的平方和最小,即

    \underset{i=0}{\sum }r^{2}_{i}=\underset{i=0}{\sum }\left [ p\left ( x_{i} \right ) -y_{i}\right ]^{2}=min

从几何意义上讲,就是寻求与给定点 (x_{i},y_{_{i}})(i=0,1,…,m)的距离平方和为最小的曲线y=p(x) 。函数p(x) 称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。

2.2 程序设计

2.2.1(1)问程序代码

% x、 y为输入量;a[num]为拟合函数的系数列向量;x0、y0为拟合函数曲线;delta2为平方误差.

x=[4,4.2,4.5,4.7,5.1,5.5,5.9,6.3,6.8,7.1];

y=[102.56,113.18,130.11,142.05,167.53,195.14,224.87,256.73,299.50,326.72];

[~,k]=size(x);

for n=1:3

    X0=zeros(n+1,k);

    for k0=1:k           %构造矩阵X0

        for n0=1:n+1

            X0(n0,k0)=x(k0)^(n+1-n0);

        end

    end

    X=X0';

    a=(X'*X)\X'*y';

    for i=1:n+1          %answer矩阵存储每次求得的方程系数,按列存储

       answer(i,n)=a(i);

    end

   x0=3.5:0.01:7.5;

    y0=a(1)*x0.^n    ;%根据求得的系数初始化并构造多项式方程

    for num=2:1:n+1    

        y0=y0+a(num)*x0.^(n+1-num);

    end

    subplot(2,2,n)

    plot(x,y,'*')

    hold on

    plot(x0,y0)

      delta2=0;%平方误差

    for i=1;1;10;

        y1(i)=a(1)*x(i).^n;

         for num=2:1:n+1

            y1=y1+a(num)*x(i).^(n+1-num);

         end

    delta2=delta2+(y(i)-y1)^2;

    end

    delta2

end

suptitle('一次、二次、三次最小二乘多项式方程曲线拟合结果')

2.2.2 (2.1)问程序代码

% x、 yy为输入量;y为y=lnyy函数值转换;a、b为拟合函数的系数;x0、y0为拟合函数曲线;delta2为平方误差.

x=[4,4.2,4.5,4.7,5.1,5.5,5.9,6.3,6.8,7.1];

yy=[102.56,113.18,130.11,142.05,167.53,195.14,224.87,256.73,299.50,326.72];

y=log(yy);

e=2.718281828459;

[~,k]=size(x);

X0=zeros(2,k);

    for k0=1:k           %构造矩阵X0

        for n0=1:2

            X0(n0,k0)=x(k0)^(2-n0);

        end

    end

    X=X0';

    a=(X'*X)\X'*y';

    for i=1:2          %answer矩阵存储每次求得的方程系数,按列存储

       answer(i,1)=a(i);

    end

   x0=3.5:0.01:7.5;

    y0=a(1)*x0;   %根据求得的系数初始化并构造多项式方程

    y0=y0+a(2);

    b=e^a(2);%a(2)=lnb;

    a=a(1);

    y=e.^y;

    y0=e.^y0;

    plot(x,yy,'*')

    hold on

    plot(x0,y0)

    delta2=0;%平方误差

    for i=1;1;10;

        y1(i)=b*exp(a*x(i));

    delta2=delta2+(yy(i)-y1)^2;

    end

    delta2

suptitle('构造y=b*exp(a*x)最小二乘多项式')

2.2.2 (2.2)问程序代码

% xx、 yy为输入量;x=lnxx、y=lnyy为变量、函数值转换;a、b为拟合函数的系数;x0、y0为拟合函数曲线;delta2为平方误差.

xx=[4,4.2,4.5,4.7,5.1,5.5,5.9,6.3,6.8,7.1];

yy=[102.56,113.18,130.11,142.05,167.53,195.14,224.87,256.73,299.50,326.72];

y=log(yy);

x=log(xx);

e=2.718281828459;

[~,k]=size(x);

X0=zeros(2,k);

    for k0=1:k           %构造矩阵X0

        for n0=1:2

            X0(n0,k0)=x(k0)^(2-n0);

        end

    end

    X=X0';

    a=(X'*X)\X'*y';

    for i=1:2          %answer矩阵存储每次求得的方程系数,按列存储

       answer(i,1)=a(i);

    end

   x0=x(1):0.01:x(10);

    y0=a(1)*x0;   %根据求得的系数初始化并构造多项式方程

    y0=y0+a(2);

    b=e^a(2);%a(2)=lnb;

    a=a(1);

    x0=e.^x0;

    y0=e.^y0;

    plot(xx,yy,'*')

    hold on

    plot(x0,y0)

    delta2=0;%平方误差

    for i=1;1;10;

        y1(i)=b*xx(i)^a;

    delta2=delta2+(yy(i)-y1)^2;

    end

    delta2

suptitle('构造y=b*x^a最小二乘多项式')

2.3结果分析和讨论

2.3.1下图分别为一次、二次、三次最小二乘多项式方程曲线拟合结果:

 

一次最小二乘多项式:y= 72.0845x -194.1382.

平方误差为69.8924.

二次最小二乘多项式:y= 6.6182x2 -1.1435x+ 1.2356.

平方误差为5.1243e-05.

三次最小二乘多项式:y= -0.0137 x3+ 6.8456 x2 -2.3792x+ 3.4291.

平方误差为3.9466e-05.

 2.3.2下图为y=b*exp(a*x)最小二乘多项式拟合曲线:

 

y=b*exp(a*x)最小二乘多项式:  .

平方误差为25.2762.

2.3.3下图为y=b*x^a最小二乘多项式拟合曲线:

 

y=b*exp(a*x)最小二乘多项式:  .

平方误差为3.2377e-05.

如需要代码请在此链接下下载:https://download.csdn.net/download/weixin_41788456/10854218

如有志同者请发邮箱chenshuai0614@hrbeu.edu.cn联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值