dual numbersを処理してautomatic differentiationを処理するMatlabクラスを作成しました。ほとんどの場合、これはうまく動作し、新しいクラスはほとんどの関数の他の数値クラスのドロップイン置換です(フィールド 'x'は関数の値を与え、フィールドdは導関数の値を与えます)。その点での関数)代入演算子の左辺を宣伝する
>> x = mkdual([1 2 3]);
>> x.^2
ans =
Dual
Properties:
x: [1 4 9]
d: [2 4 6]
しかし、それは関数は、出力アレイを事前に割り当てる場合に失敗し、それにインデックスを付けることによって、アレイに割り当てます。たとえば、次は、MATLABでの一般的なパターンです:それは二重の数に代入演算子のLHS上のアレイを促進することはできませんので、
>> y=zeros(2) // Pre-allocate for speed
y =
0 0
0 0
>> x = 1;
>> y(1,:)=x
y =
1 1
0 0
は、残念ながら、これは、私のクラスで失敗します。
>> x=mkdual(1);
>> y(2,:)=x
??? The following error occurred converting from Dual to double:
Error using ==> double
Conversion to double from Dual is not possible.
誰かが修正または回避策を提案できますか?y
をDual
に自動昇格させることができますか?
これはきちんとした考えです、ありがとう。 –