请教伽罗华域矩阵求逆
最近在学Raptor码,里面有一个矩阵求逆的过程,是在伽罗华域里进行的,做纠错码的朋友肯定很熟悉,伽罗华域的元操作是异或,我将清华大学出版《C语言常用算法程序集》第二版这本书里的矩阵求逆改了一下,这本书有随书的源代码,我改为如下:
这个程序能正确算出一部分的矩阵求逆,但是矩阵的维数超过一定的数量的时候,计算出的结果就不对了,恳请各位大侠指教,万分感谢!
int brinv(int **a,int n) //a对应矩阵二维矩阵A,n是矩阵的维数L ,计算A的逆
{
int *is,*js,i,j,k;
int d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for (k=0; k<=n-1; k++)
{
d=0;
for (i=k; i<=n-1; i++)
for (j=k; j<=n-1; j++)
{
p=a[i][j];
if (p>d) { d=p; is[k]=i; js[k]=j;}
}
if (d+1==1)
{
free(is); free(js); printf("err**not inv\n");
return(1);
}
if (is[k]!=k)
for (j=0; j<=n-1; j++)
{
p=a[k][j]; a[k][j]=a[is[k]][j]; a[is[k]][j]=p;
}
if (js[k]!=k)
for (i=0; i<=n-1; i++)
{
p=a[i][k]; a[i][k]=a[i][js[k]]; a[i][js[k]]=p;
}
a[k][k]=a[k][k];
for (j=0; j<=n-1; j++)
if (j!=k)
{ a[k][j]=a[k][j]*a[k][k];}
for (i=0; i<=n-1; i++)
if (i!=k)
for (j=0; j<=n-1; j++)
if (j!=k)
{
a[i][j]=a[i][j]^(a[i][k]*a[k][j]);
}
for (i=0; i<=n-1; i++)
if (i!=k)
{ a[i][k]=a[i][k]*a[k][k];}
}
for (k=n-1; k>=0; k--)
{ if (js[k]!=k)
for (j=0; j<=n-1; j++)
{
p=a[k][j]; a[k][j]=a[js[k]][j]; a[js[k]][j]=p;
}
if (is[k]!=k)
for (i=0; i<=n-1; i++)
{
p=a[i][k]; a[i][k]=a[i][is[k]]; a[i][is[k]]=p;
}
}
free(is); free(js);
return 0;
}
这个程序能正确算出一部分的矩阵求逆,但是矩阵的维数超过一定的数量的时候,计算出的结果就不对了,恳请各位大侠指教,万分感谢!
...全文
相关推荐
NTL最新6.0(windows版)
**矩阵和向量运算**:NTL提供矩阵和向量的数据结构,支持基本的线性代数运算,如矩阵乘法、矩阵求逆、特征值计算等,这些都是许多数学算法的基础。5.
【多元域乘法】多项式乘法电路原理及MATLAB详解
关注公号【逆向通信猿】更精彩!!! 关于二元域上的两个元素的乘法、多项式除法,在之前的博客 【有限域除法】二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 子程序:sub_gf_add.m、sub_gf_mul.m 中已对原理进行了比较详细的阐述和仿真,本文主要对多元域上多项式的乘法进行阐述和仿真。 乘法电路 I型乘法电路 II型乘法电路 MATLAB实现及详解 保存为文件名为sub_poly_mu
Fast-algorithms-of-Reed-Solomon-erasure-codes
伽罗华域(Galois Field)理论,这是理解Reed-Solomon编码的基础。2. 多项式运算,包括多项式的乘法、除法和求逆。3. 矩阵理论,因为Reed-Solomon编码涉及到矩阵的运算。
reed-solomon码的程序_matlab_
**矩阵操作**:reed-solomon码的解码往往涉及到矩阵运算,如矩阵乘法和矩阵逆。在MATLAB中,可以使用“*”运算符进行矩阵乘法,“inv”函数求逆矩阵。6.
GaloisFields.jl:Julia的有限字段
有限域,也被称为伽罗华域(Galois Field),是一个包含有限个元素的代数结构,满足加法和乘法运算具有封闭性、交换性、结合性以及存在单位元和逆元等基本代数性质。


