如何用MATLAB通过循环编写实现矩阵A*B乘法的自定义函数?
用循环实现MATLAB矩阵乘法函数的正确写法
原代码存在的问题
- 维度校验缺失:矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,原代码未做该判断,输入不符合要求的矩阵时会直接出错
- 循环逻辑错误:矩阵乘积
C(i,j)的计算规则是A的第i行与B的第j列对应元素相乘后求和,原代码错误使用B(j,i),且缺少遍历求和维度的循环(需三层循环:行、列、求和索引) - 矩阵初始化不当:用空矩阵
prodAB=[]动态赋值会降低运行效率,还容易引发索引错误 - 维度获取错误:
length(A)返回矩阵最大维度的长度,应使用size(A,1)获取行数、size(A,2)获取列数,避免非方阵场景下的错误
修正后的函数代码
function prodAB = MultiplicoMatrices(A, B) % 校验矩阵维度是否符合乘法要求 [rowsA, colsA] = size(A); [rowsB, colsB] = size(B); if colsA ~= rowsB error('矩阵A的列数必须等于矩阵B的行数!'); end % 初始化结果矩阵为全零矩阵,提前指定维度 prodAB = zeros(rowsA, colsB); % 三层循环实现矩阵乘法 for i = 1:rowsA % 遍历结果矩阵的每一行(对应A的行) for j = 1:colsB % 遍历结果矩阵的每一列(对应B的列) sum_val = 0; for k = 1:colsA % 遍历求和维度(A的列 = B的行) sum_val = sum_val + A(i, k) * B(k, j); end prodAB(i, j) = sum_val; end end end
测试验证
输入测试矩阵:
A = [1 2; 3 4]; B = [5 6; 7 8]; prodAB = MultiplicoMatrices(A, B);
输出结果:
prodAB = 19 22 43 50
该结果与MATLAB内置的A*B计算结果完全一致,符合矩阵乘法的正确结果。
内容的提问来源于stack exchange,提问作者Xetrez
相关产品推荐
相关产品推荐

