Я написал класс 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
?
Это аккуратная идея, спасибо. –