2013-07-12 22 views
4
映射值的范围

我希望有类似这样的Arduino功能的MATLAB功能: http://arduino.cc/en/Reference/map如何在MATLAB

基本上我有一次67个数据点范围从0到1.15基于变量,我想从0到100%(如此,101个数据点)映射。在Arduino的,将看起来像:

map(value, fromLow, fromHigh, toLow, toHigh) 

我可以使用interp1在MATLAB让我的101个数据点,但我只得到0和1.15之间的101个数据点。我知道我可以将每个值乘以100/1.15,但这是不准确的。有没有更好的方法来做到这一点,我忽略了MATLAB?

(这个帖子看上去充满希望,但它不是我在寻找: Map function in MATLAB?

感谢

+3

在Arduino的参考页您链接到他们甚至在底部提供了'map'功能代码:'(X - in_min)*(out_max - out_min)/(in_max - in_min)+ out_min;'。请注意,这个函数似乎是用整数数学实现的,所以如果你想完全复制这个函数,你需要在Matlab中完成。 – horchler

+0

我知道我可以编写基于Arduino代码的自己的函数,我的问题是如果有什么东西已经内置到MATLAB可以做到这一点。谢谢。 – dustynrobots

回答

0

如果有可用的神经网络工具箱,那么你可以尝试mapminmax功能。默认情况下,函数映射为[-1 1]相互作用并从数据获取输入边界。但我相信用您的值填充settings结构,然后调用mapminmax应该有所帮助。

+0

哦,很酷,看起来几乎完美,我确实有那个工具箱。我唯一不知道的是如何设置PS(处理设置),因为如果我可以将其设置为标准化为一定数量的值,我将被设置。谢谢! – dustynrobots

+0

你可以用你的数据填写'PS'。有10个领域。但是,只有5个领域的简单例子为我工作。 'x = [1 2 3]; ('yrange',1,'ymin',0,'no_change',0,'xrange',2,'xmin',1); y = mapminmax('apply',x,ps);' 因此,您可以为每个需要的案例设置多个预先创建的结构。 – akademi4eg

1

你可以使用linspace,例如

linspace(0,1.15,101) 

将让你101点在0和1.15之间均匀分布。

+0

谢谢,虽然这对我来说并不真正。我有一个x和f(x)。时间是x,并且对于一个特定情况,我有67个数据点跨度为0到1.15,我想将它们映射为跨越0到100的101个数据点。然后,每个初始x点具有对应的f(x) 。所以我猜这是一个两步问题:首先,插入x和f(x)以获得正确数量的数据点,然后将x矢量从初始范围“拉伸”到所需范围。 – dustynrobots

+0

我不明白这是什么比'y = map(value,fromLow,fromHigh,fromLow,fromHigh)'的向量化版本更多;',即从范围映射到相同的确切范围。 – horchler

+0

对不起,我不明白你的问题。让我尽量在短时间内重新发布它。看起来尽管你所需要的只是'interp1',你得到的方式不确切吗? – bla