【发布时间】:2012-02-27 21:02:08
【问题描述】:
如果我在 matlab 中有一个简单的数组,比如说:
a = [0 1 2 3 4 5 6 0 0]
我如何约束该数组中的值(例如,如果我希望最大值为 1,那么要达到:
a = [0 1 1 1 1 1 1 0 0]
最简单、最有效的方法是什么?
【问题讨论】:
标签: matlab constraints
如果我在 matlab 中有一个简单的数组,比如说:
a = [0 1 2 3 4 5 6 0 0]
我如何约束该数组中的值(例如,如果我希望最大值为 1,那么要达到:
a = [0 1 1 1 1 1 1 0 0]
最简单、最有效的方法是什么?
【问题讨论】:
标签: matlab constraints
a(a>1) = 1;
这可以满足您的要求...您可以对其他约束遵循相同的模式。
编辑:评论者是正确的,已修复。
【讨论】:
a(a>1) = 1;
a > 0
或
min(a, 1)
(在 Octave 中测试。)
【讨论】:
a > 0。
a>0 返回一个逻辑索引,而不是一个新矩阵。您可以使用逻辑索引将 a 中的适当元素设置为某个值。
min 的解决方案在Matlab 中有效吗?
a<0 作为逻辑索引可以转换为 0 和 1 - 但是使用“正确”的逻辑索引可以让你更容易地修改代码,例如在价值或几乎其他任何东西。您的两种用法都特别适用于有限数量的情况 - 优雅且快速,但不容易修改。
试试:
arrayfun(@(x) min(1,x),a)
求最大值,用 max(val,x) 代替最小值。
【讨论】: