我需要调用使用linspace命令生成的矩阵的索引,并基于从示波器获取的一些数据。因此,输入的数据是双倍的。但是,我真的不能打电话:
Time[V0Found]
其中V0Found类似于5.2但是,索引5足够接近,所以我需要删除小数。我使用这个等式来删除小数:
V0FoundDec = V0Found - mod(V0Found,1)
Time[V0FoundDec]
然而,即使小数点滴,但八度音仍然会抱怨它。
那么,我可以做些什么来将它强制转换为int?
答案 0 :(得分:5)
在MATLAB中,它应该是int8(x)
或int16(x)
或one of the other integer casts。
但我很惊讶你需要为索引做到这一点。试试
myarray(floor(indexlist))
或
myarray(round(indexlist))
其中myarray
是您的数组,indexlist
是非整数索引的向量。
示例:
octave-3.2.3:8> v=rand(1,8)*10+1
v =
3.1769 1.4397 8.7504 1.7424 6.9413 3.1663 8.4085 9.0179
octave-3.2.3:9> a = (1:1:20).^2
a =
Columns 1 through 15:
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225
Columns 16 through 20:
256 289 324 361 400
octave-3.2.3:10> a(floor(v))
ans =
9 1 64 1 36 9 64 81
答案 1 :(得分:2)
您可以使用 round , floor , ceil 函数代替公式进行舍入。
顺便说一句,索引是使用括号而不是括号来完成的:
V0FoundDec = round(V0Found);
Time(V0FoundDec) % not Time[V0FoundDec]
如果那是你的问题
答案 2 :(得分:0)
在matlab中,正确的方法是使用interp1命令进行插值。该命令的格式为
yout = interp1(xdata,ydata,xin,...) 要么 yout = interp1(ydata,xin,...) 其中xdata被假定为1:length(ydata)
如果你想产生调用
的结果你会说V0FoundDec =时间(round(V0found))
V0FoundDec = interp1(时间,V0found,'最近')
但您可以轻松地使用
进行线性插值(这是默认设置)V0FoundDec = interp1(时间,V0found)
或
V0FoundDec = interp1(时间,V0found,'线性')
你也可以在限制之外进行推断(使用'extrap'或提供extrap值),其中
如果是圆形(V0found)<时间(圆(V0found))
将崩溃1或>长度(时间)