3

オシロスコープから取得したデータに基づいて、linspace コマンドを使用して作成された行列のインデックスを呼び出す必要があります。このため、入力されるデータは double です。しかし、私は本当に呼び出すことができません:

Time[V0Found]

ここで、V0Found は 5.2 のようなものですが、インデックス 5 を取得することは十分に近いため、小数点以下を削除する必要があります。この式を使用して小数を削除しました。

V0FoundDec = V0Found - mod(V0Found,1)
Time[V0FoundDec]

ただし、小数が削除されたとしても、オクターブはまだそれについて不平を言っています。

では、それを int に型キャストするにはどうすればよいでしょうか。

4

3 に答える 3

6

MATLAB では、int8(x)またはint16(x)または他の整数キャストの 1 つである必要があります。

しかし、インデックスに対してそれを行う必要があることに驚いています。試す

myarray(floor(indexlist))

また

myarray(round(indexlist))

wheremyarrayは配列で、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
于 2010-03-31T22:15:40.823 に答える
2

数式の代わりにroundfloorceil関数を使用して丸めを行うことができます。

ちなみに、索引付けは括弧の代わりに括弧を使用して行われます。

V0FoundDec = round(V0Found);
Time(V0FoundDec) % not Time[V0FoundDec]

それがあなたの問題だった場合

于 2010-03-31T22:16:51.290 に答える
1

matlab でこれを行う正しい方法は、interp1 コマンドを使用して補間することです。このコマンドの形式は次のとおりです。

yout = interp1 (xdata, ydata, xin, ...) または yout = interp1 (ydata, xin, ...) ここで、xdata は 1:length(ydata) であると想定されます

呼び出しから得られる結果を生成したい場合

V0FoundDec = Time(round(V0found))

あなたは言うでしょう

V0FoundDec = interp1(時間、V0found、「最も近い」)

しかし、線形補間を簡単に取得できます(これがデフォルトです)

V0FoundDec = interp1(時間、V0found)

また

V0FoundDec = interp1(時間、V0found、'線形')

また、制限の外側を外挿することもできます (「extrap」を使用するか、extrap 値を指定します)。

時間(ラウンド(V0found))

round(V0found) < 1 または > length(Time) の場合にクラッシュします

于 2010-04-02T02:25:08.100 に答える