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

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

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

就相当于素数一样,除了1和本身之外不能被其他多项式整除的多项式就称为不可约多项式,也叫做既约多项式
这里可以参考百度百科
既约多项式-百度百科

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

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

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

举例如下:

MATLAB求出不可约多项式(实现二进制加法、除法)_第1张图片

2、
要实现用for循环来寻找是否存在除1和本身之外的其他多项式,就得实现一个二进制的累加运算。
类似于找素数的实验,将1~本身的数都除一下,如果有能除尽的,直接判定其不是素数。
而二进制的累加运算可以通过先转十进制,再转二进制来实现
代码如下:

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

实际上此实验中,并不需要这么转化,因为可以直接进行十进制的累加,在计算多项式除法的时候再转为二进制进行运算即可
所以只需要运用其中的 dec2bin() 函数
举例如下:

MATLAB求出不可约多项式(实现二进制加法、除法)_第2张图片

3、
注意到,第二步转化成的二进制是字符串型,也就是‘111101’这样的类型,而第一步中的x,y需要的是数值型的矩阵,怎么进行转换呢?
这里直接上图,代码详见最后《完整代码》

MATLAB求出不可约多项式(实现二进制加法、除法)_第3张图片

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

MATLAB求出不可约多项式(实现二进制加法、除法)_第4张图片

4、
按理来说,到第三步就可以进行程序的编写了,但是为了数据保存的方便性课可看性,这里介绍一个str2num()函数
它是将字符串型二进制转化成数值型,可看性更高
举例如下:

MATLAB求出不可约多项式(实现二进制加法、除法)_第5张图片

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

3、编写程序

其实本实验的算法跟找素数的算法相差不多,在经过上述步骤后,便可以自主进行程序编写。
本人以最高次数为5的多项式为例,找出其中的既约多项式(不可约多项式)
最后结果如下:
1) 既约多项式

MATLAB求出不可约多项式(实现二进制加法、除法)_第6张图片

2) 本源多项式

MATLAB求出不可约多项式(实现二进制加法、除法)_第7张图片

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

4、完整代码

大家若有兴趣,可以下载本人编写的代码,链接如下:
本实验完整代码
该代码可以实现寻找任意阶次的既约多项式
具体用途,在其简介上已有介绍,欢迎下载~

你可能感兴趣的:(MATLAB)