2008b より新しいバージョンの MATLAB を使用している場合は、非整数、非連続、または非数値であっても、 containers.Mapクラスを使用して目的の処理を実行できます。
x = [ 1 2 3 4 5 6 7 8 9 10];
y = [ 3 6 2 4 1 6 7 0 1 8 ];
z = [ 2 3 8 9 10 3];
F = containers.Map(x,y);
% for a single element:
Fz1 = F(z(1))
% for multiple elements at the same time, you need to use arrayfun
Fz = arrayfun(@(x)(F(x)),z)
Map クラスは実際にいわゆるハッシュマップを作成するため、ほとんどすべての値を他の値 (文字列、セル、配列など) にマップできます。
アイテムが存在しない場合、エラーが返されます。
MATLAB 2008b 以降を使用できない場合、整数以外のドメイン値には 3 つの可能性があります。
などの補間方法を使用しinterp1
ます。これにより、誤った値が返される可能性があります (事前に提供されていない値で)。を使用してそのケースを確認できますismember(z, x)
。
次に、非整数から整数への独自のスキームを発明し (たとえば、すべての値が 0.5 の倍数の場合は 2 を掛ける)、Oli が示したソリューションを使用できます。
もう 1 つの解決策はstruct
、マップの動作を模倣するために s を使用することです。genvarname
次に、ドメイン値から有効なフィールド名 (つまり、関数を使用して可能な MATLAB の有効な変数名である文字列) への変換のみが必要です。
これらの最後の 2 つのソリューションは、丸めを考慮しないと、多少汚れており、エラーが発生しやすくなります。したがって、私はそれらを最後の手段としてのみ見ています。