仅使用标量运算,编写矩阵乘法子函数 (mat_mul),统计耗时(tic, toc),与 MATLAB 原生乘法运算对比。函数原型见附件。
时间: 2024-09-21 19:02:19 浏览: 56
Matlab.zip_matlab向量运算_求矩阵的特征向量_矩阵初等变换_矩阵相关性
为了编写一个使用标量运算的矩阵乘法子函数(mat_mul),我们首先需要理解 MATLAB 的原生矩阵乘法 `*` 是基于分块算法进行的,非常高效。然而,如果我们想简单地逐元素相乘(相当于元素级的乘法),我们可以创建一个类似版本。这里是一个简单的示例,我们将使用 `tic` 和 `toc` 函数测量时间,然后与 MATLAB 原生乘法进行比较:
```matlab
function [result] = mat_mul(scalarMul, A, B)
% 检查输入维度是否适合标量乘法
if size(A, 2) ~= size(B, 1)
error('Incompatible dimensions for scalar multiplication');
end
result = zeros(size(A));
tic
% 使用逐元素乘法
for i = 1:size(A, 1)
for j = 1:size(B, 2)
result(i,j) = scalarMul * A(i,j) * B(i,j);
end
end
elapsed_time = toc;
% 记录并打印耗时
fprintf('Elapsed time for manual matrix multiplication: %f seconds\n', elapsed_time);
% 与 MATLAB 原生乘法对比(假设名为 native_matmul)
tic
native_result = native_matmul(A, B);
native_elapsed_time = toc;
fprintf('Elapsed time for native matrix multiplication: %f seconds\n', native_elapsed_time);
% 返回手动计算的结果
disp(['Result comparison: ', num2str(norm(result - native_result))]);
end
% 示例调用:
A = randn(1000, 1000);
B = randn(1000, 1000);
scalarMul = 2; % 可以替换为任何标量值
[~, result] = mat_mul(scalarMul, A, B);
%
阅读全文