匿名用户
1级
2016-11-12 回答
这是一个单模线性同余方程组(两个方程都是模26)。
关于如何求解这类问题,我查到的文献中,下述论文似乎最合乎需要:
王卿文, 薛有才. 关于线性同余方程组A_(mn)X_(n1)≡B_(m1)(mod s).
《烟台师范学院学报(自然科学版)》 1995年01期
我已把该文作为附件上传,供参考。
按照该文的算法,我初步编写了程序,包括对G矩阵进行初等变换得到Q矩阵,以及ax=b mod m的特解计算(初等变换以及特解计算都不是该文的内容,另外查的资料),但通用性方面还有很多欠缺,而且正确性也需要进一步验证,所以暂时不想公开。用上述程序针对该文的算例,计算结果是一致的。
对于题主给定的数据来说,构造G矩阵如下:
G =
3 4 13
5 6 12
1 0 0
0 1 0
经初等变换后得到Q:
Q =
3 0 13
0 -6 -29
1 -4 0
0 3 0
按照算法的要求,需求解同余方程 -6x = -29 mod 26,但这个同于方程是无解的(方程 ax = b mod m 有解,当且仅当 b 能够被 a 与 m 的最大公约数整除,现在a=-6,m=26,二者的最大公约数是2,不能整除b=-29)。所以,很遗憾,此线性同余方程组无解。
我另外编写了一段遍历法求解的程序:
A=[1 2 3 -1 2;-1 2 1 1 2;2 4 -10 -2 -12;3 6 -7 -3 -10];
b=(1:4)';
m=11;
n = size(A,2);
s = sprintf('0:%i',m-1);
for i=2:n, s=[s sprintf(',0:%i',m-1)]; end
x = 'x1';
for i=2:n, x=[x sprintf(',x%i',i)]; end
cmd = sprintf('[%s] = ndgrid(%s);',x,s);
eval(cmd)
for i=1:n, eval(sprintf('x%i=x%i(:);',i,i)); end
X = eval(['[' x ']']);
B=mod(A*X'-repmat(b,1,size(X,1)),m);
L=any(abs(B)>=eps);
X(L,:)=[];
得到的结果是121组,和上述文献的结论一致,但如果把A、b、m换成题主所给数据,得到的结果却是空数组,也就是说,可以确认本题无解。