デフォルトの MATLAB データ型については、いいえ、実際にはできません。ただし、独自の新しいデータ型 (つまり、クラス オブジェクト) を作成して、データを格納することもできます。クラス定義内でsubsref
メソッドをオーバーロードして、添字付き参照 (つまり()
、 、{}
、またはを使用.
) が新しいオブジェクトに対してどのように動作するかを定義します。これは、オブジェクトの配列を扱う場合にはややこしくなりますが、可能です。
新しいデータ型で使用するすべての既存の関数に対して、オーバーロードされたメソッドも作成する必要があることに注意してください。具体的には、引数として渡されたオブジェクトからの適切なデータを使用して、組み込み関数をpol2cart
内部的に呼び出すことができるオブジェクトのメソッドを作成する必要があります。pol2cart
...そして、これにより、現在の状況に対するより簡単な解決策が得られます。まったく新しい型のクラス オブジェクトを作成する代わりに、構造体配列 (または配列のスカラー構造) を作成してデータを格納し、構造体データ型pol2cart
専用の新しいオーバーロード関数を作成して、呼び出し構文を簡素化することができます。
組み込みデータ型の関数のオーバーロードの詳細については、他の 2 つの回答hereとhereで説明しています。つまり、 というフォルダーを作成し、 MATLAB path@struct
上のフォルダーに配置します。このフォルダーに、このオーバーロードされた関数を配置します。@struct
function varargout = pol2cart(polarCoordinates)
[varargout{1:nargout}] = pol2cart(polarCoordinates.theta, ...
polarCoordinates.rho, ...
polarCoordinates.z);
end
これは関数の簡素化されたバージョンであり、入力のエラー チェックなどがないことに注意してください。では、サンプル データを作成してみましょう。
pols = rand(9, 3); %# A 2-D array of data
polStruct = struct('theta', pols(:, 1), ... %# Convert it to a scalar
'rho', pols(:, 2), ... %# structure of arrays
'z', pols(:, 3));
rho
そして、次のように 5 行目の値にアクセスできます。
rho5 = pols(5,2);
rho5 = polStruct.rho(5);
極座標からデカルト座標に変換する場合は、データ型ごとに次のようにします。
[X,Y,Z] = pol2cart(pols(:,1), pols(:,2), pols(:,3)); %# Calls the built-in one
[X2,Y2,Z2] = pol2cart(polStruct); %# Calls the overloaded one
そして、次のように、それぞれが同じ結果を返すことを確認できます。
>> isequal([X Y Z],[X2 Y2 Z2])
ans =
1 %# True!