日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab判断矩阵不可约,用Matlab计算二元域GF(2)上的不可约多项式

發布時間:2023/12/31 循环神经网络 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab判断矩阵不可约,用Matlab计算二元域GF(2)上的不可约多项式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 二元域 GF(2) 上的不可約多項式

二元域 GF(2)={0,1} 上的運算規則如下:

加法:+

0

1

0

0

1

1

1

0

乘法:?

0

1

0

0

0

1

0

1

二元域 GF(2) 上的多項式具有形式

p(x)=anxn+an?1xn?1+?+a1x+a0

其中,

ai∈GF(2),0≤i≤n .

定義:一個次數大于等于 1 的多項式稱為 不可約多的,如果它不能被分解為兩個次數大于等于 1 的多項式的乘積.

顯然,在二元域 GF(2) 上,一次多項式 p(x)=x+a0 是不可約多項式;次數大于 1 并且常數項 a0=0 的多項式均為可約多項式(因為有一次因式 x),從而次數大于 1 的多項式是不可約多項式的必要條件是常數項 a0=1.

檢查 GF(2) 上的多項式是否可約:設 p(x)=anxn+an?1xn?1+?+a1x+a0 為 n 次多項式.

(a) 若 n=1,則 p(x) 為不可約多項式.

(b) 若 n>1,

(b.1) 若 a0=0,則 p(x) 為可約多項式.

(b.2) 若 a1=1,則用所有次數 ?n2? 的(不可約)多項式 g(x) 除 p(x). 若存在一個 g(x) 使得 g(x)|p(x),則 p(x) 為可約多項式,否則為不可約多項式.

2 二元域 GF(2) 上多項式的表示

多項式在計算機中常用其系數數組來表示. 自然地,二元域 GF(2) 上的一個 n 多項式

p(x)=anxn+an?1xn?1+?+a1x+a0

可以表示為一個

GF(2) 上的

n+1 維向量

P=(an,an?1,…,a1,a0)∈GFn+1(2)

因此,多項式環

GF(2)[x] 和

GF(2) 上的無窮維向量空間

GF∞(2) 之間存在“1-1”對應關系.

更進一步,任意一個 GF(2) 上的向量可以轉化為一個非負整數:

(an,an?1,…,a1,a0)→∑i=0nai2i

顯然,這也是一個“1-1”對應關系. 從而,二元域

GF(2) 上的一個多項式

p(x)=anxn+an?1xn?1+?+a1x+a0 與一個非負整數

∑ni=0ai2i 相對應,我們得到“1-1”對應關系:

GF(2)[x]→Z?

p(x)=∑i=0naixi?p(2)=∑i=0nai2i

3 判斷 GF(2) 上兩個多項式的整除關系

在下面的 Matlab 函數判斷 GF(2) 上的一個多項式是否能被另一個多項式整除,其中,多項式表示為由 ‘0’ 和 ‘1’ 組成的字符串的形式. 例如,多項式 f(D)=D3+D+1 表示為 ′1011′.

function b = isDivisible(f,g)

% 判斷二元域 GF(2) 上兩個多項式的整除關系

% 若 'f' 可以被 'g' 整除,則返回 1;否則返回 0;

% 輸入

% f: 被除式,由 '0' 和 '1' 組成的字符串來表示

% g: 除式,由 '0' 和 '1' 組成的字符串來表示

% 輸出

% 若 'g' 整除 'f',則輸出 1;否則,輸出 0

%

% 如果被除式為 0,則返回 true (1)

if isempty(find(f,'1'))

b = true;

return;

end

% 去除高次的 0 系數

pos = find(f=='1',1);

f = f(pos:length(f));

len_f = length(f);

% 檢查除式是否為零

if isempty(find(g=='1'))

error('Error: f is divided by 0')

end

% 去除高次的 0 系數

pos = find(g=='1',1);

g = g(pos:length(g));

len_g = length(g);

% 若被除式的次數小于除式的次數,返回不可整除

b = false;

if len_f < len_g

return;

end

% 除法

for i = 1:len_f-len_g+1

if f(i) == '0'

continue;

end

for j=1:len_g

if f(i+j-1) == g(j)

f(i+j-1) = '0';

else

f(i+j-1) = '1';

end

end

end

% 檢查余式是否為 0

b = true;

for i=len_f-len_g+1:len_f

if f(i) == '1'

b = false;

break;

end

end

end

例:判斷在 GF(2) 上多項式 x3+x2+x+1 和 x3+1 能否被多項式 x2+1 整除.

>> isDivisible('1111','101')

ans =

1

>> isDivisible('1001','101')

ans =

0

注:在Matlab中,函數 dec2bin 和 bin2dec 分別將一個整數轉化為’01’字符數組和將一個’01’字符數組轉化為整數. 利用前一個函數,我們可以用整數來表示 GF(2) 上的多項式,并把上面函數的輸入類型改為兩個整數;后一個函數將在下一節使用.

4 計算 GF(2) 上的不可約多項式

下面的 Matlab 函數計算所有 GF(2) 上次數不超過 n 次的不可約多項式.

function [IrrPolys,Nums] = AllIrrPolys(n)

% 計算二元域 GF(2) 上所有次數不超過 'n' 的不可約多項式

% 輸入

% n: 多項式的次數

% 輸出

% IrrPolys: 所有次數不超過 'n' 的不可約多項式

% Nums: 各次的不可約多項式的個數

%

Nums = zeros(1,n); % '1' 至 'n' 次不可約多項式的個數

% '1' 次不可約多項式

IrrPolys = [bin2dec('10'),bin2dec('11')];

Nums(1) = 2;

total_num = 2;

% '2' 至 'n' 次不可約多項式

for d = 2:n

cnt = 0;

for k = (2^d+1):2:(2^(d+1)-1)

isDiv = false;

for s = 1:floor(d/2)

off_set = sum(Nums(1:s-1));

for t = 1:Nums(s)

isDiv = isDivisible(dec2bin(k),dec2bin(IrrPolys(off_set+t)));

if isDiv

break;

end

end

if isDiv

break;

end

end

if ~isDiv

total_num = total_num + 1;

IrrPolys(total_num) = k;

cnt = cnt + 1;

end

end

Nums(d) = cnt;

end

end

注1:在函數中,GF(2) 上的多項式用其對應的正整數來表示.

注2:所有不可約多項式都保存在數組 IrrPolys 中. 可用命令 IrrPolys(sum(Nums(1:k-1))+1:sum(Nums(1:k))) 列出所有次數為 k 的不可約多項式.

注3: GF(2) 的 n 次不可約多項式的個數為

N(n)=1n∑d|nμ(d)2n/d

其中

μ 為Moebius函數,定義為

μ(m)=???1(?1)k0如果m=1如果m=p1p2?pk,其中p1,p2,…,pk為互不相同的素數其它

例:計算所有 GF(2) 上次數不超過 5 次的不可約多項式,并列出所有 4 次不可約多項式.

>> [IrrPolys,Nums] = AllIrrPolys(5)

IrrPolys =

Columns 1 through 13

2 3 7 11 13 19 25 31 37 41 47 55 59

Column 14

61

Nums =

2 1 2 3 6

>> IrrPolys(sum(Nums(1:4-1))+1:sum(Nums(1:4)))

ans =

19 25 31

總結

以上是生活随笔為你收集整理的matlab判断矩阵不可约,用Matlab计算二元域GF(2)上的不可约多项式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。