デフォルトのMATLABデータ型では、実際にはできません。ただし、データを保存するにはcreate your own new data type (i.e. class object)とすることができます。クラス定義内では、subsref
メソッドをオーバーロードして、添え字付き参照(つまり、()
、{}
、または.
を使用)が新しいオブジェクトに対して動作します。これはオブジェクトの配列を扱うことに関してはやや難解かもしれませんが、可能です。
新しいデータ型で使用するすべての既存関数のオーバーロードされたメソッドを作成する必要があることにも注意してください。具体的には、組み込みのpol2cart
関数を引数として渡されたオブジェクトの適切なデータで内部的に呼び出すことができる、オブジェクトのメソッドpol2cart
を作成する必要があります。
...これは私の現在の状況のためのより簡単なソリューションに私をもたらします。まったく新しいタイプのクラスオブジェクトを作成する代わりに、データを格納するストラクチャ配列(または配列のスカラー構造)を作成し、呼び出し構文を簡略化するstruct data types用の新しいオーバーロードされたpol2cart
関数を作成することができます。
組み込みデータ型のオーバーロード関数の詳細については、別の2つの回答hereとhereで詳しく説明します。つまり、@struct
というフォルダを作成し、MATLAB pathのフォルダに配置します。これは今、いくつかのサンプルデータを作成してみましょうなど、入力にエラーチェックをせずに、機能のストリームライニングバージョンであることを
function varargout = pol2cart(polarCoordinates)
[varargout{1:nargout}] = pol2cart(polarCoordinates.theta, ...
polarCoordinates.rho, ...
polarCoordinates.z);
end
注:
この
@struct
フォルダの中に、あなたは、このオーバーロードされた関数を置きます
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));
、次のように、あなたは、5行目のrho
値にアクセスできます。
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
そして、あなたは次のように、彼らそれぞれが同一の結果が得られていることを確認することができます:n個の座標が、ここでは、各データ・タイプのためにそれを行うだろう方法ですコードの
>> isequal([X Y Z],[X2 Y2 Z2])
ans =
1 %# True!
あなたの最初の行は動作しません。 [POL2CART](http://www.mathworks.com/help/techdoc/ref/pol2cart.html)には、1つのベクトル引数ではなく、2つ(または3つ)の入力引数が必要です。どのバージョンのMATLABを使用していますか? – gnovice
私はMatlabを持っていないので実際にはOctaveでテストしましたが、使用している友人を助けなければなりません。したがって、pol2cartがそのような引数を受け入れない場合、最初の引数は保持されません。それでも、名前を使ってインデックスに対処することができれば便利です。 – syockit