我在Matlab中有一个命令,我定义了它,它应该返回整数值:
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
我不想围绕结果。我希望值从一开始就是int
。
这就是我的尝试:
x = int32([0 0 0 0 0 0 0 ])
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
%// but this is not working, and not giving integer values.
知道我如何强制x
成为int
值而非double
的矩阵?
答案 0 :(得分:3)
以下是documentation中ls -l|awk '{A[$6":"]++}END{for (i in A){print i" "A[i]}}'
的示例
:
示例:
ls -la | grep -c "Jan"
表示: 1 Jan: 19 Feb: 11 Mar: 28 Apr: 10 May: 14 Jun: 24 Jul: 4 Aug: 16 Sep: 10 Oct: 30 Nov: 4 Dec: 1
只取整数值。
因此,如果您希望if (targetPoint != Vector3.Zero) {
transform.rotation = Quaternion.LookRotation(targetPoint, Vector3.up);
}
的所有元素都是整数,则应将intcon
设置为intcon = [1,2,7]
。
答案 1 :(得分:2)
中定义的
x
x = int32([0 0 0 0 0 0 0])
被
覆盖x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
所以你有三个选择:
1)在你的职能之外施放int32
:
x = int32(intlinprog(f,intcon,A,b,Aeq,beq,lb,ub))
2)或里面
function [ output ] = intlinprog(...)
...
...
output = int32( output )
end
如果您认为有必要,请先使用round
。另请考虑ceil
,floor
和fix
。
3)或者最后,可能是你真正想要的,正确使用预先分配的数组:
x = int32( [0 0 0 0 0 0 0] )
x(1:end) = int32(intlinprog(f,intcon,A,b,Aeq,beq,lb,ub))
x(1:end)
你不覆盖之前定义的x
,而是填充其数组元素,从而保留数据类型。函数的输出和预先分配的数组需要具有相同的大小。
答案 2 :(得分:1)
Matlab倾向于在执行计算之前将整数转换为双精度,并且几乎没有什么可以做的,同时避免任何类型的过复杂性。您必须修改您的函数,以便在执行所有计算后将结果类型转换回int32
。我从来没有检查过这个事实,但是由于Matlab基本上是Java的包装器,我担心它可以以相同的方式工作:当浮点值被转换为整数值时,它们基本上被截断。因此:
Float Integer
10.87 -> 10
10.14 -> 10
这就是为什么我建议你在使用int32 function投射之前对值进行舍入,以避免失去太多精度:
function result = intlinprog(...)
% Your computations here...
result = int32(round(result));
end
修改强>
我查了一下:
A = [
10.53;
10.01;
10.44;
10.87
];
int32(A)
ans =
4×1 int32 column vector
11
10
10
11
结果让我想到在类型转换之前内部执行到最接近整数的舍入。所以你可以使用:
function result = intlinprog(...)
% Your computations here...
result = int32(result);
end
没问题。
答案 3 :(得分:0)
你可以将双打整数转换成整数
x = round(intlinprog(f,intcon,A,b,Aeq,beq,lb,ub))