Matlab 矩阵乘法
发布网友
发布时间:2022-04-29 09:56
我来回答
共2个回答
热心网友
时间:2022-06-25 20:03
这主要是因为计算机的工作原理:
matlab自带的a*b算法是在汇编级别编辑好的运算,计算机不用做多余的工作,直接对矩阵中的数据进行相乘处理。
计算机处理过程大体是:寻两个矩阵地址-加载乘法函数-运算并将结果写入相应地址-地址位加1-运算并将结果写入相应地址-...-运算并将结果写入相应地址-读取到结束位-结束运算。
而用for-loop自己编写乘法,本身就是调用了for-loop两个函数,这是需要时间的。同时,计算机要重新分配地址记录for函数循环中产生的变量,小点的矩阵还好说,阶数较高、数据较复杂时,计算机会花更多的时间来处理这些和相乘没有直接关系的代码和运算。
计算机处理过程大体是:加载for函数-为变量分配地址-为变量赋值-查询矩阵地址-查询矩阵阶数-判断大小-查询矩阵地址-读取相应数据-加载乘法函数-运算并将结果写入相应地址-为for变量赋值-查询矩阵地址-查询矩阵阶数-判断大小-...-判断大小-结束运算。明显要比a*b多了好多工作,所以会慢很多。
lz可以做个比较直观的实验:用循环编辑一个较复杂的迭代运算,在其中加入一行显示迭代次数的代码,记录运算时间。再在这行代码后面加上分号,再看看运算时间。你会发现后者时间比前者有明显的缩短。这就是因为计算机占用了一部分时间来处理显示数据的代码。
可以参考一些微机原理、汇编语言等材料会有更深的理解。
热心网友
时间:2022-06-25 20:03
function matrix()
%%本函数注意以下几个方面
%%1.所有fprintf中\r\n也可以用\n表示 这个主要看你的文本查看器支持
%% 如果是WINDOWS的记事本看matrix.txt的话,最好用\r\n
%%2.输出语句fprintf(fid,'%.1f ',C(i,j));
%% 我觉得用fprintf(fid,'%4.1f ',C(i,j));产生的数据会更整齐一些
%% 不过你给的提示用fprintf(fid,'%.1f ',C(i,j));就可以了
disp('This program multiplies two m x m matrices A and B.')
m=input('Enter a value for m:');
%%input A
disp(' ');
A=zeros(m);
for i=1:m
info=sprintf('Enter row %d of A as an array:',i);
A(i,:)=input(info);
end
%%input B
disp(' ');
B=zeros(m);
for i=1:m
info=sprintf('Enter row %d of B as an array:',i);
B(i,:)=input(info);
end
%%C=A*B
C=zeros(m);
for i=1:m
for j=1:m
for k=1:m
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end
fid=fopen('matrix.txt','w');
fprintf(fid,'A x B =\r\n');
fprintf(fid,'_ _ \r\n');
for i=1:m
if i~=m
fprintf(fid,'| ');
else
fprintf(fid,'|_ ');
end
for j=1:m
fprintf(fid,'%.1f ',C(i,j));
end
if i~=m
fprintf(fid,'|\r\n');
else
fprintf(fid,'_|\r\n');
end
end
fclose(fid);