算法来确定非负数值解实存的线性不定方程线性、方程、数值、算法

2023-09-11 22:37:33 作者:稚唇.

我寻找一种方法来确定是否有一个解决的方程,例如: 3N1 + 4N2 + 5n3 = 456 的,其中的 N1,N2,N3 的是正整数。

或者更一般的:是否有零或正整数的 N1,N2,N3 的...,解决了方程的 k1n1 + k2n2 + k3n3 ... = M 的,其中的 K1,K2,K3 的...和 M 的已知正整数。

我并不需要找到一个解决方案 - 只是为了确定一个解决方案存在

编辑:

关于实际使用这种算法的:

在一个通信库,我要决定是否根据其大小给定的消息是有效的,处理信息之前。 例如:我知道,一个消息包含零或更多的3-字节元件,零或更多的4-字节元素,和零或更多的5字节的元件。我收到的456个字节的消息,我想前进一步检查其内容,以确定其有效性。 当然,邮件的标题包含每种元素的个数,但我想通过传递类似对&LT,使创检查在通信库水平; MSGTYPE,矢量< 3,4 ,5个;>

解决方案

你问如果经常EX pression

(XXX | XXXX | XXXXX)*

匹配XX ... x,其中x发生456次

下面是为O中的溶液(N + A ^ 2),其中一个是最小的左侧的数字(在本例3)。

假设你的号码是6,7,15。我会打电话给一些EX pressible形式6X + 7Y + 15Z可用。你要检查一个给定的数字是可用的。

matlab 用lsqnonneg求取线性方程组非负解 出错了

如果你能够获得一些数n,那么可以肯定你将能够获得N + 6,N + 12,N + 18 - 一般来说,N + 6K对于所有的k> = 0。另一边,如果你不能得到一些数n,则n-6是肯定不会用太(如果你能得到(N-6),然后(N-6)+ 6 = N是可用),这表示正-12,N-18,N-6K不可没有。

假设你已经确定了15可用,但9不是。在我们的情况下,15 = 6 * 0 + 7 * 0 + 15 * 1,但将不能够得到9以任何方式。因此,我们的previous推理,15 + 6K适用于所有的k> = 0和9-6k对于所有的k> = 0是没有的。如果你有一些数字,除以6给出了3作为剩余物(3,9,15,21,...),您可以快速回答:数字< = 9不适,数> = 15是

这足以确定除以6所有可能的余(即0,1,2,3,4,5)什么是最小的数字,这是可用的。 (我刚已经表明,这个号码对其余3是15)。

如何做到这一点:创建一个顶点0,1,2,3,4,5图。对于您所提供的所有数字K(7,15 - 我们漠视6)从x添加一个边缘(X + K)模6.给它的重量(X + K)DIV 6.使用的