matlab学习笔记:第三章3.3矩阵的运算(算术运算)
矩阵的转置符号为英文的单引号:“ ’ ”,它也可以在前面加上点变成“ .’ ”,两者的区别在于对矩阵中复数的处理,使用“ ’ ”会在转置的同时将复数变为共轭复数,使用“.’”则会保持原来的复数。一种是线性代数中定义的矩阵的乘法,使用的运算符号是乘号“*”,例如矩阵A*B,矩阵的乘法必须要满足前面矩阵A的列数和后面矩阵B的行数相等(符合线性代数的要求);另一种是“按对应位置的元素运算”的乘法,使用的
2.算数运算
MATLAB的基本算术运算符有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)和' (转置)
(1)矩阵加法
在线性代数中,只有两个大小完全相同的矩阵才可以进行相加,而在MATLAB中,只要两个矩阵的大小兼容,就能够进行计算。
以下是一些具有兼容大小的标量、向量和矩阵的组合:
- 两个大小完全相同的输入。
- 一个输入是标量。
- 一个输入是矩阵,另一个输入是具有相同行数的列向量。
- 一个输入是矩阵,另一个输入是具有相同列数的行向量。
- 一个输入是列向量,另一个输入是行向量。
A = randi(9,3,4) B = randi(15,3,4) C = A + B %两个矩阵大小一样 D = A + 5 %和标量相加 E = randi(9,3,1) F = A + E %3x4矩阵加3x1列向量,矩阵每一列都和列向量相加 G = randi(9,1,4) H = A + G %3x4矩阵加1x4行向量,矩阵每一行都和行向量相加 I = E + G %3x1列向量加1x4行向量,最后结果为3x4矩阵
(2)矩阵减法
矩阵的减法和加法相同
A = randi(9,3,4)
B = randi(15,3,4)
C = A - B %两个矩阵大小一样
D = A - 5 %和标量相减
E = randi(9,3,1)
F = A - E %3x4矩阵减3x1列向量,矩阵每一列都和列向量相减
G = randi(9,1,4)
H = A - G %3x4矩阵减1x4行向量,矩阵每一行都和行向量相减
I = E - G %3x1列向量减1x4行向量,最后结果为3x4矩阵
(3)矩阵乘法
在MATLAB中,矩阵的乘法分为两种:
一种是线性代数中定义的矩阵的乘法,使用的运算符号是乘号“*”,例如矩阵A*B,矩阵的乘法必须要满足前面矩阵A的列数和后面矩阵B的行数相等(符合线性代数的要求);
另一种是“按对应位置的元素运算”的乘法,使用的运算符号是点乘 “.*” ,例如A.*B,这时A和B的大小只需要满足上方表格介绍的五种兼容模式。
特别的,如果一个矩阵和常数相乘,那么使用乘号“*”和点乘“.*”得到的结果相同。
A = randi(9,2,3)
B = randi(9,3,2)
C = A * B %矩阵A*B,矩阵的乘法必须要满足前面矩阵A的列数和后面矩阵B的行数相等
D = randi(9,2,3)
E = randi(9,2,3)
F = D .* E %对应元素相乘,但要符合matlab的兼容模式。
G = 5 * E
H = 5 .* E %GH结果一样
(4)矩阵除法
事实上,在我们学的线性代数中,矩阵并不能进行除法的运算,但MATLAB中定义了矩阵的除法的计算规则。
在MATLAB中,除号有两种,分别是 /(右除) 和 \(左除):(可以把这个符号想象成一个梯子,梯子靠在哪边墙上就是哪边的除法)
用的更多的是对矩阵进行点除的操作,即将两个矩阵按对应位置的元素做除法。
命令“A ./ B”表示用A的每个元素除以B的对应元素,A和B的大小必须兼容;
命令“A .\ B”则表示用B的每个元素除以A的对应元素,这个用法不太符合我们的习惯。
因此,大家只需要掌握点右除“A ./ B”的用法即可。特别地,如果B是标量,那么A./B的结果和A/B的结果相同。
%命令“x = B/A”表示对线性方程组x*A = B求解x;
B = randi(9,3,3)
A = randi(9,3,3)
X = B / A
B_ = X * A %验证一下,结果一样
%命令“x1 = A\B”则表示对线性方程组A*x = B求解x。
X1 = A \ B
B__ = A * X1 %验证一下,结果一样
C = B ./ A %B中对应元素除以A中的
D = B .\ A %A中对应元素除以B中的
E = B ./ 5
(5)矩阵的乘方
矩阵的乘方也有两种用法,分别是“^”和“.^”。
“^”表示矩阵的幂运算,例如A是一个方阵,那么A ^ 3等价于A*A*A;
“.^”表示对矩阵中的每一个元素分别进行乘方计算,例如A .^ 0.5表示对矩阵A中的每一个元素开根号。
A = randi([0,9],2,2)
B = A ^ 3 %这个是符合线性代数的矩阵相乘,A*A*A
C = A .^ 3 %这个是矩阵中的每个元素的三次幂
(6)矩阵逆运算
逆矩阵:设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵
如果A是一个可逆的方阵,那么A^(-1)可用来计算A的逆矩阵(inverse matrix)。另外,MATLAB中的inv函数也可以计算逆矩阵,它们的计算结果相同。
format short
A = [1 2 3;
2 2 1;
3 4 3]
B = A ^ (-1)
B1 = inv(A)
E = A * B %由于MATLAB使用浮点数计算矩阵的逆存在一定的误差,因此,实际上A*B接近但不完全等于单位矩阵。
(7)矩阵的转置
矩阵的转置符号为英文的单引号:“ ’ ”,它也可以在前面加上点变成“ .’ ”,两者的区别在于对矩阵中复数的处理,使用“ ’ ”会在转置的同时将复数变为共轭复数,使用“.’”则会保持原来的复数。
A = [ 3 1+3i;
2 5;
4-2i 6]
A' %变成共轭复数
A.' %不变
(8)评价预测结果指标
假设真实值向量 = [ ... ] ,拟合值或预测值是向量 = [ ... ]
1)SSE 误差(或残差)平方和(Sum of Squares due to Error)
范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。它的量纲是原来数据量纲的平方。
2)MSE 均方误差(Mean Square Error)
就是SSE除了一个n,范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。
它的量纲是原来数据量纲的平方。
3)RMSE: 均方根误差(Root Mean Square Error)
其实就是MSE加了个根号,范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。它的量纲和原来数据的量纲相同。
4)MAE: 平均绝对误差(Mean Absolute Error)
范围[0,+∞),当预测值与真实值完全吻合时等于0。误差越大,该值越大。
它的量纲和原来数据的量纲相同。
5)MAPE: 平均绝对百分比误差(Mean Absolute Percentage Error)
该公式通常将值乘以100,以百分比形式表示数字。
范围[0,+∞),当预测值与真实值完全吻合时等于0。
可以看到,MAPE跟MAE很像,就是多了个分母。
注意:当真实值有数据等于0时,存在分母为0的问题,该公式不可用!
6)SMAPE:对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)
它的范围是0%到200%,当预测值与真实值完全吻合时等于0。
注:有些地方定义的SMAPE的分母没有加绝对值,这时候SMAPE可能为负数。
7):决定系数、可决系数、R方、拟合优度(Coefficient of determination)
注意:如果使用的是线性回归模型,那么上面两种计算R方的公式都可以使用,且此时R方的范围是[0,1]
如果使用的是非线性回归模型,那么R方使用的是第一种定义方法!且此时R方的范围是(,1].
(线性回归中,两种方法算出来的R方一定相等。非线性回归中只能使用第一种方法计算,第二种算出来的结果是错的!)
所有代码如下所示:
%y是真实值,y_hat是拟合值
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) %总体数量n=10
%SSE:误差平方和
SSE = sum((y - y_hat) .^2)
%MSE:均方误差
MSE = mean((y - y_hat) .^2)
%RMSE:均方根误差
RMSE = sqrt(mean((y - y_hat) .^2))
%MAE:平均绝对误差
MAE = mean(abs(y - y_hat))
%MAPE:平均绝对百分比误差
MAPE = mean(abs((y - y_hat) ./ y))
%SMAPE:平均绝对百分比误差,我们可以将这个数乘以100,那么它的单位为%
SMAPE = mean(abs(y - y_hat) ./ ((abs(y) + abs(y_hat)) ./2))*100
%R^2:决定系数
RR = 1 - (sum((y - y_hat).^2) ./ sum((y - mean(y)).^2))
RR_ = sum((y_hat - mean(y)) .^2) ./ sum((y - mean(y)) .^2)
%两种计算结果不一样,所以说明我们的模型是非线性的模型,只能使用第一种方法计算
(9)优化算法中常见的测试函数
在优化算法中,测试函数(或称为基准函数)是用来评估优化算法性能的一组数学函数。这些函数通常具有已知的最优解,且具有不同的特性和复杂性,以便全面测试优化算法的效果。
在应用数学中,测试函数可用于评估优化算法的特性,例如:
- 收敛速度。
- 精度。
- 鲁棒性。
- 一般性能。
X = 1:10; a = X([1:end-1]) b = X([2:end]) %Sphere函数: S = sum(X .^2) %Rastrigin函数: R = sum(X .^2 - 10*cos(2*pi*X) + 10) %Griewank函数 G = 1/4000 * sum(X .^2) - prod(cos(X./sqrt(X(1:end)))) + 1 %Rosebrock Ro = sum(100*(b - a.^2).^2 + (a - 1).^2)
参考:数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)