中易网

有没有可能用matlab做两个二进制矩阵的乘法运算?结果也是二进制的

答案:2  悬赏:30  
解决时间 2021-04-28 06:20
  • 提问者网友:相思瘸子
  • 2021-04-27 22:17
有没有可能用matlab做两个二进制矩阵的乘法运算?结果也是二进制的
最佳答案
  • 二级知识专家网友:闲懒诗人
  • 2021-04-27 23:22
function [out] = bin_matix_multi( matr1,matr2 )

[a,b]=size(matr1);
[c,d]=size(matr2);
if b ~= c
disp('The two matrixs can not multiply!!')
else

op_1=matr1*matr2;
for i = 1:a
for j = 1:d
if mod(op_1(i,j),2)==0
op_1(i,j)=0;
else
op_1(i,j)=1;
end
end
end
end
out=op_1;
end

其中matr1,matr2是要相乘的两个函数,当然这两个矩阵就是1和0构成的。所以按照十进制运算,结果中会有偶数和奇数,如果是偶数说明按照二进制计算结果就是0,否则就是1;所以根据这个规律,我使用这个求余的判断式mod(op_1(i,j),2)==0。
全部回答
  • 1楼网友:情战辞言
  • 2021-04-27 23:59
这主要是因为计算机的工作原理: matlab自带的a*b算法是在汇编级别编辑好的运算,计算机不用做多余的工作,直接对矩阵中的数据进行相乘处理。 计算机处理过程大体是:寻两个矩阵地址-加载乘法函数-运算并将结果写入相应地址-地址位加1-运算并将结果写入相应地址-...-运算并将结果写入相应地址-读取到结束位-结束运算。 而用for-loop自己编写乘法,本身就是调用了for-loop两个函数,这是需要时间的。同时,计算机要重新分配地址记录for函数循环中产生的变量,小点的矩阵还好说,阶数较高、数据较复杂时,计算机会花更多的时间来处理这些和相乘没有直接关系的代码和运算。 计算机处理过程大体是:加载for函数-为变量分配地址-为变量赋值-查询矩阵地址-查询矩阵阶数-判断大小-查询矩阵地址-读取相应数据-加载乘法函数-运算并将结果写入相应地址-为for变量赋值-查询矩阵地址-查询矩阵阶数-判断大小-...-判断大小-结束运算。明显要比a*b多了好多工作,所以会慢很多。 lz可以做个比较直观的实验:用循环编辑一个较复杂的迭代运算,在其中加入一行显示迭代次数的代码,记录运算时间。再在这行代码后面加上分号,再看看运算时间。你会发现后者时间比前者有明显的缩短。这就是因为计算机占用了一部分时间来处理显示数据的代码。 可以参考一些微机原理、汇编语言等材料会有更深的理解。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息