我寫了一個Matlab類來處理dual numbers做automatic differentiation。對於幾乎所有的情況,這工作得很好,新類是大多數函數中其他數值類的直接替換(字段'x'給出了函數的值,字段d給出了導數的值在該點的函數。)提升賦值運算符的左側
>> x = mkdual([1 2 3]);
>> x.^2
ans =
Dual
Properties:
x: [1 4 9]
d: [2 4 6]
然而,當功能預先分配的輸出陣列失敗,並且通過索引到其分配到該陣列。例如,下面是在Matlab一個共同的模式:
>> y=zeros(2) // Pre-allocate for speed
y =
0 0
0 0
>> x = 1;
>> y(1,:)=x
y =
1 1
0 0
不幸的失敗,我的課,因爲它不能促進賦值運算符的LHS陣列的雙數:
>> 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
?
這是一個整潔的想法,謝謝。 – 2012-03-08 23:36:00