第3章 3.4.2 算术运算(MATLAB入门课程)

 讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili

MATLAB的基本算术运算符有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)和’(转置),下面我们分别进行介绍。

矩阵的加法

首先是矩阵的加法。在线性代数中,只有两个大小完全相同的矩阵才可以进行相加运算,而在MATLAB中,只要两个矩阵的大小兼容,就能够进行计算。

以矩阵的加法为例,下表我们给出了MATLAB支持的五种算术运算的兼容模式

事实上,执行加法运算时,MATLAB会将大小兼容的矩阵隐式扩展为相同的大小,然后再将对应位置的元素相加,这种计算方式在MATLAB中称为“按对应位置的元素运算”。我们在上一节介绍的min函数和max函数在计算两个矩阵对应位置元素的最小值和最大值时也支持上表五种模式。

矩阵的减法

类似的,矩阵的减法也支持上表五种兼容模式,其计算方式也是“按对应位置的元素运算”,我们看下面的例子:

矩阵的乘法

矩阵的乘法则有所不同,在MATLAB中,矩阵的乘法分为两种:第一种是线性代数中定义的矩阵的乘法,使用的运算符号是乘号“*,例如矩阵A*B,矩阵的乘法必须要满足前面矩阵A的列数和后面矩阵B的行数相等;第二种是按对应位置的元素相乘,我们需要使用运算符号点乘“.*,例如A.*B,此时A和B的大小只需要满足上方表格介绍的五种兼容模式。特别地,如果一个矩阵和标量(常数)相乘,那么使用乘号“*”和点乘“.*”得到的结果相同。

矩阵的除法

下面我们再来介绍矩阵的除法。事实上,在我们学的线性代数中,矩阵并不支持除法的运算,但MATLAB中定义了矩阵除法的计算规则。

在MATLAB中,除号有两种,分别是 / (右除)和 \ (左除),命令“x = B/A”表示对线性方程组x*A = B求解x;命令“x = A\B”则表示对线性方程组A*x = B求解x。这两个符号使用频率很低,大家不需要强记,需要用时查询即可。

我们平时使用更多的是对矩阵进行点除的操作,即将两个矩阵按对应位置的元素做除法。其中命令A./B”表示用A的每个元素除以B的对应元素,A和B的大小必须兼容;命令“A.\B”则表示用B的每个元素除以A的对应元素,这个用法不太符合我们的习惯。因此,大家只需要掌握“A./B”的用法即可

特别地,如果B是标量,那么A./B的结果和A/B的结果相同。

 

矩阵的乘方

矩阵的乘方也有两种用法,分别是“^”和“.^”。

其中,“^”表示矩阵的幂运算,例如A是一个方阵,那么A ^ 3等价于A*A*A;“.^”表示对矩阵中的每一个元素分别进行乘方计算,例如A .^ 0.5表示对矩阵A中的每一个元素开根号,等价于sqrt(A)。

特别地,如果A是一个可逆的方阵,那么A^(-1)可用来计算A的逆矩阵(inverse matrix)。另外,MATLAB中的inv函数也可以计算逆矩阵,它们的计算结果相同。

根据线性代数中逆矩阵的定义,互为逆矩阵的两个矩阵的乘积为单位矩阵(主对角线为1,其余位置为0的方阵),我们通过上表的第三行代码验证了这一点。注意:由于浮点数运算的误差,计算结果中的元素可能和0或1有微小的差异,我们使用format long g命令显示更多的小数点:

例如第一行第二个元素,理论上应为0,但MATLAB计算结果约为1.776×10^{-15}

矩阵的转置

最后我们再来介绍矩阵的转置运算,矩阵的转置符号为英文的单引号:“ ’ ”,它也可以在前面加上点变成“ .’ ”,两者的区别在于对矩阵中复数的处理,使用“ ’ ”会在转置的同时将复数变为共轭复数(实部不变虚部反号),使用“.’”则会保持原来的复数。

当然,通常情况下我们的矩阵中全是实数,那么使用“ ’ ”和“ .’ ”的效果相同。

练习

学完了矩阵的算术运算后,我们来做一些练习。

(1)计算用来评价预测效果好坏的一些指标

假设真实值是向量 y=\left[ y_1,y_2,\cdots ,y_n \right],拟合值或预测值是向量\hat{y}=\left[ \hat{y}_1,\hat{y}_2,\cdots ,\hat{y}_n \right]


% 例如我们举一个n为10的例子
y = [100 102 108 117 135 178 198 241 290 349];
y_hat = [93 108 118 117 141 170 196 249 296 359];
n = length(y);    % 10

  SSE: 误差(或残差)平方和(Sum of Squares due to Error)

SSE\,\,=\,\,\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2}

范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。

它的量纲是原来数据量纲的平方。


SSE = sum( (y-y_hat).^2 )  % 489

 MSE: 均方误差(Mean Square Error)

MSE\,\,=\,\,\frac{1}{n}\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2}        

就是SSE除了一个n

范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。

它的量纲是原来数据量纲的平方。       


MSE = 1/n*(sum(   (y-y_hat).^2 ))  % 48.9

RMSE: 均方根误差(Root Mean Square Error)

RMSE\,\,=\,\,\sqrt{\frac{1}{n}\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2}}

就是MSE加了个根号

范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。

它的量纲和原来数据的量纲相同。


RMSE = sqrt(   1/n*(sum((y-y_hat).^2)) )  % 6.9929

  

MAE: 平均绝对误差(Mean Absolute Error)

MAE\,\,=\,\,\frac{1}{n}\sum_{i=1}^n{\left| y_i-\hat{y}_i \right|}

范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。

它的量纲和原来数据的量纲相同。


MAE = 1/n*( sum(   abs(y-y_hat) ) )  % 6.3

MAPE: 平均绝对百分比误差(Mean Absolute Percentage Error)

MAPE\,\,=\,\,\frac{1}{n}\sum_{i=1}^n{\left| \frac{y_i-\hat{y}_i}{y_i} \right|}

范围[0,+∞),当预测值与真实值完全吻合时等于0。

可以看到,MAPE跟MAE很像,就是多了个分母。

注意:当真实值有数据等于0时,存在分母为0的问题,该公式不可用!


fz = y-y_hat;  % 分子
MAPE =   1/n*(sum(abs(fz ./ y)))  % 0.0403

SMAPE: 对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)

SMAPE\,\,=\,\,\frac{100\%}{n}\sum_{i=1}^n{\frac{\left| y_i-\hat{y}_i \right|}{\left( \left| y_i \right|+\left| \hat{y}_i \right| \right) /2}}

它的范围是0%到200%,当预测值与真实值完全吻合时等于0。

注:有些地方定义的SMAPE的分母没有加绝对值,这时候SMAPE可能为负数。


fz =   abs(y-y_hat);  % 分子
fm =   (abs(y)+abs(y_hat))/2;  % 分母
SMAPE = 1/n*(sum(fz./   fm ))  % 0.0399

R方: 决定系数(Coefficient of determination)


fz = sum((y -   y_hat).^2);  % 分子
fm = sum((y -   mean(y)).^2);   % 分母
R2 = 1 - fz/fm  %   0.9928

拓展:

R^2:决定系数、可决系数、R方、拟合优度(Coefficient of determination)

注意:如果使用的是线性回归模型,那么下面两种计算R方的公式都可以使用,且此时R方的范围是[0,1]

R^2=1-\frac{\sum{\left( y-\hat{y} \right) ^2}}{\sum{\left( y-\bar{y} \right) ^2}} \\ R^2=\frac{\sum{\left( \hat{y}-\bar{y} \right) ^2}}{\sum{\left( y-\bar{y} \right) ^2}} \\

式中\bar{y}是y的均值

如果使用的是非线性回归模型,那么R方使用的是第一种定义方法!

且此时R方的范围是(-∞,1].

(线性回归中,两种方法算出来的R方一定相等。非线性回归中只能使用第一种方法计算,第二种算出来的结果是错的!)

(2)计算优化算法中常见的测试函数

(假设公式中的x向量为1:10

  • Sphere

  • Rastrigin

  • Griewank

  • Rosenbrock

参考答案如下:不熟练的同学请看配套的视频讲解,视频中讲解的很详细:

% Sphere函数 
x = 1:10;
y = sum(x.^2)  

% Rastrigin函数
x = 1:10;
y = sum(x.^2-10*cos(2*pi*x)+10)

% Griewank函数
x = 1:10;
n = length(x);
y = 1/4000*sum(x.*x)-prod(cos(x./sqrt(1:n))) + 1

% Rosenbrock函数
x = 1:10;
tem1 = x(1:end-1);
tem2 = x(2:end);
y = sum(100 * (tem2-tem1.^2).^2 + (tem1-1).^2)


 点击下方的CSDN专栏阅读下一篇文章:

MATLAB入门课程专栏

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值