在MATLAB中仅使用标量运算,编写矩阵乘法子函 数 (mat_mul) ,统计耗时, 与MATLAB原生乘运算对比
时间: 2024-09-22 20:08:52 浏览: 22
在MATLAB中,我们可以创建一个自定义的矩阵乘法函数(mat_mul),通过循环遍历元素来进行计算,这种方式通常效率较低,因为不像MATLAB内置的*运算符那样利用了高效的内部算法。以下是编写一个基本的标量运算风格矩阵乘法函数以及比较其性能的例子:
```Matlab
function result = mat_mul(scalarMul, A, B)
% Check input dimensions for matrix multiplication
if size(A, 2) ~= size(B, 1)
error('Matrix dimensions are not compatible for multiplication.');
end
% Initialize the result matrix
result = zeros(size(A));
% Scalar Mul function to mimic element-wise operation
scalarOp = @(a, b) scalarMul * a * b;
% Using nested for loops to perform manual matrix multiplication
for i = 1:size(A, 1)
for j = 1:size(B, 2)
result(i, j) = scalarOp(A(i, :), B(:, j));
end
end
end
% 测试一个大矩阵乘法
A = randn(1000, 1000);
B = randn(1000, 1000);
tic; C = mat_mul(1, A, B); % 使用自定义函数
timeCustom = toc; % 计算时间
tic; D = A * B; % 使用MATLAB内置乘法
timeNative = toc; % 计算时间
% 输出结果和性能对比
fprintf('Manual multiplication time: %f seconds\n', timeCustom);
fprintf('Built-in multiplication time: %f seconds\n', timeNative);
fprintf('Speedup factor: %f (native vs custom)\n', timeNative / timeCustom);