MATLAB中的模与余数(中国余数定理)

MATLAB中的模与余数(中国余数定理),matlab,modulo,chinese-remainder-theorem,Matlab,Modulo,Chinese Remainder Theorem,给定数组中的模值及其余数值,如何在Matlab中找到最小可能值?例如: A=[ 23 90 56 36] %# the modulo values B=[ 1 3 37 21] %# the remainder values 这导致了答案93;这是最小可能的值 编辑: 这是我的代码,但它似乎只将余数数组的最后一个值显示为最小值: z = input('z='); r = input('r='); c = 0; m = max(z); [x, y] = find(z == m); r =

给定数组中的模值及其余数值,如何在Matlab中找到最小可能值?例如:

A=[ 23 90 56 36] %# the modulo values
B=[  1  3 37 21] %# the remainder values
这导致了答案
93
;这是最小可能的值


编辑: 这是我的代码,但它似乎只将余数数组的最后一个值显示为最小值:

z = input('z=');
r = input('r=');
c = 0;
m = max(z);
[x, y] = find(z == m);
r = r(y);
f = find(z);
q = max(f);
p = z(1:q);
n = m * c + r;
if (mod(n, p) == r)
    c = c + 1;
end
fprintf('The lowest value is %0.f\n', n) 

好的,那么您的目标是为每个
i
找到满足
B(i)=mod(x,A(i))
的最小
x

包含一个非常简单(但彻底)的解释,说明如何使用。下面是所述方法在MATLAB中的实现:

A = [23, 90];                                  %# Moduli
B = [1, 3];                                    %# Remainders

%# Find the smallest x that satisfies B(i) = mod(x, A(i)) for each i
AA = meshgrid(A);
assert(~sum(sum(gcd(AA, AA') - diag(A) > 1)))  %# Check that moduli are coprime
M = prod(AA' - diag(A - 1));
[G, U, V] = gcd(A, M);
x = mod(sum(B .* M .* V), prod(A))

x =
    93
您应该注意,该算法仅适用于模(A的值),即

在您的示例中,它们不是,因此这对您的示例不起作用(如果模不是互质的,我已经放置了一个
assert
命令来中断脚本)。你应该试着实现你自己的目标

p.S

还请注意,该命令使用。如果您需要自己实现,可以作为很好的参考。

请参阅“中国剩余定理”。在MATLAB文件交换中已经有几个CRT实现,例如:和…@EitanT您能帮我制作这个程序吗?我在编程方面真的很差劲,我们只允许使用rem和mod命令,我没有得到任何好处progress@Jey看起来和你的一模一样。另外,如果你已经做了一些事情(将代码嵌入原始问题中),这样就可以将其改进为一个工作程序,这将是最好的。@Jey别这样!如果你不努力,你就不会变得更好。