二进制数除法 matlab,MATLAB求出不可约多项式(实现二进制加法、除法)

本文介绍了一种使用MATLAB实现不可约多项式检测的方法,通过多项式除法和二进制累加运算。作者利用deconv()函数进行多项式除法,并讨论了如何将字符串型二进制转换为数值型矩阵以进行运算。最终,代码实现了寻找最高次数为5的多项式中的不可约多项式,并提供了完整代码下载链接。
摘要由CSDN通过智能技术生成

本人的课堂小作业,发现网上没有完全整合好的算法,所以用MATLAB实现了一下

1、 什么是不可约多项式?

就相当于素数一样,除了1和本身之外不能被其他多项式整除的多项式就称为不可约多项式,也叫做既约多项式

这里可以参考百度百科

既约多项式-百度百科

2、实现该算法所需要完成的准备

1、

多项式的除法运算,在MATLAB中有一个函数deconv()可以使用,所以本次实验采用MATLAB编程实现

代码如下:

[c,d]=deconv(x,y) %其中x,y是两个多项式的系数,c,d分别为商和余数

举例如下:

2e82fdf8c2587300be0c1094c9d71852.png

2、

要实现用for循环来寻找是否存在除1和本身之外的其他多项式,就得实现一个二进制的累加运算。

类似于找素数的实验,将1~本身的数都除一下,如果有能除尽的,直接判定其不是素数。

而二进制的累加运算可以通过先转十进制,再转二进制来实现

代码如下:

a=dec2bin((bin2dec(m)+bin2dec(n))) %先转为十进制,加完后再转为二进制

实际上此实验中,并不需要这么转化,因为可以直接进行十进制的累加,在计算多项式除法的时候再转为二进制进行运算即可

所以只需要运用其中的 dec2bin() 函数

举例如下:

1f21b7c12f466f98741e59a30e896585.png

3、

注意到,第二步转化成的二进制是字符串型,也就是‘111101’这样的类型,而第一步中的x,y需要的是数值型的矩阵,怎么进行转换呢?

这里直接上图,代码详见最后《完整代码》

bb9a8e3ca3806a8c2f165422031b326f.png

这一步可以说是全文最重要的一步,转化之后就可以进行deconv()运算了

如下图:

8c62c9c38791d8f67ac36f0ed90ed2bd.png

4、

按理来说,到第三步就可以进行程序的编写了,但是为了数据保存的方便性课可看性,这里介绍一个str2num()函数

它是将字符串型二进制转化成数值型,可看性更高

举例如下:

afb8de44f7992680bee6160441d71126.png

这里可以看出str2num()函数和dec2bin() 函数的区别

3、编写程序

其实本实验的算法跟找素数的算法相差不多,在经过上述步骤后,便可以自主进行程序编写。

本人以最高次数为5的多项式为例,找出其中的既约多项式(不可约多项式)

最后结果如下:

1) 既约多项式

c50b0d924ac6d2650a37ad8db90f808d.png

2) 本源多项式

edb5aed24689d0b528448c22e46f366e.png

同时也可以看出本源多项式和既约多项式的关系是子集的关系

4、完整代码

大家若有兴趣,可以下载本人编写的代码,链接如下:

本实验完整代码

该代码可以实现寻找任意阶次的既约多项式

具体用途,在其简介上已有介绍,欢迎下载~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值