欠定矩阵求解matlab,在matlab中求解欠定方程组

你所拥有的通常被称为integer-linear programming,并且已知它是NP难的(这意味着在解决方案出来之前不要屏住呼吸)。

如果你想在没有整数的情况下解决它,你有一个线性程序,因此可以使用linprog。如果您将未知矩阵视为未知条目的向量,则列总和仅为

col_sum = kron(eye(4),[1,1,1]);

col_sum =

1 1 1 0 0 0 0 0 0 0 0 0

0 0 0 1 1 1 0 0 0 0 0 0

0 0 0 0 0 0 1 1 1 0 0 0

0 0 0 0 0 0 0 0 0 1 1 1

同样,行和是

row_sum = repmat(eye(3),1,4);

row_sum =

1 0 0 1 0 0 1 0 0 1 0 0

0 1 0 0 1 0 0 1 0 0 1 0

0 0 1 0 0 1 0 0 1 0 0 1

这些是你的等式约束,你也有不等式约束,但只能绑定未知值。 linprog可以将它们绑定为额外的参数。但是你没有一个目标函数,你可以用它来组合所有未知数的总和,或者其中一个或任何其他线性目标可以做的事情,或者你可以把它留空,你得到任何可行的结果。

Aeq = [col_sum;row_sum]

beq = [2 6 6 1 5 7 3]';

X = linprog([],[],[],Aeq,beq,zeros(12,1),10*ones(12,1))% 0 <= vars <= 10

X = reshape(X,3,4)

X =

0.6550 2.0160 2.0160 0.3130

1.1192 2.5982 2.5982 0.6845

0.2258 1.3859 1.3859 0.0025

>> sum(X,1)

ans =

2.0000 6.0000 6.0000 1.0000

>> sum(X,2)

ans =

5.0000

7.0000

3.0000

如果您确保某些条目保持为零等,那么所有解决方案都可能被强制为整数。否则,您需要具有非凸特定的整数编程解算器,例如given here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值