matlab二次同余方程,matlab能不能解一般的同余方程组

匿名用户

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换成题主所给数据,得到的结果却是空数组,也就是说,可以确认本题无解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值