2013-07-12 24 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