热线电话:13121318867

登录
2019-02-19 阅读量: 800
在Matlab中找到线性整数方程的精确有理解

我有一个线性方程组A * x = b其中A是一个带整数值的NxN矩阵,b是一个带整数值的Nx1向量。由于先验知识,我知道我保证存在恰好一个有理解x,使得x = A ^ { - 1} b(以及A具有满秩)。

我现在在Matlab(或任何其他我可以重写为Matlab的语言)中搜索算法,它为给定的A和b提供了这个问题的精确合理解,例如x = r / s * t,其中r和s是标量整数,t是整数的Nx1向量,或者是x = r。/ s形式,其中r和s是Nx1整数向量。

我试过[r,s] = rat(A \ b),它适用于足够简单的情况,但很快导致舍入问题(ier / s只能近似x,但我需要精确的解决方案)。使用符号计算工作; 但是,我必须将程序编译为独立程序,据我所知,就我所尝试的而言,Matlab编译器不支持符号工具箱。

一些统计:N应该被允许至少大约100或更高。A中的值可能会变得相当大,因此我现在已经在使用int64。我明白,有一点我会遇到数字问题,而且我只要能够推迟这些问题就足够了(我很感激任何解决方案,即使它只适用于较小的N)。但是,我需要精确的解决方案,我更喜欢任何近似的错误信息,无论多好。算法的运行时间是次要的,如果N = 100需要一个小时左右就可以了(但是更有效率是一个加号)。

解决办法:可以使用Matlab符号工具箱解决问题:

N = 100; %Dimensionality

A = randi(1000, [N, N]);

assert(rank(A) == N);

B = randi(1000, [N, 1]);

As = sym(A);

Bs = sym(B);

tic

xs = linsolve(As, Bs); % is a rational number

toc

disp(xs);

xs被表示为有理数的向量。i5上的运行时间约为9秒linsolve。

0.0000
5
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子