КронекерДельта в Matlab

Эта ссылка показывает, что в Matlab есть дельта-функция Кронекера. Однако:

>> help kroneckerDelta

    kroneckerDelta not found

Я использую R2011b, так что, может быть, это еще не запрограммировано в наборе инструментов?

РЕДАКТИРОВАТЬ :: Это работает в MuPad, но не в Matlab...

.


person yankeefan11    schedule 18.07.2013    source источник
comment
Кроме того, для дальнейшего использования вам нужно будет проверить документацию по вашей версии, поскольку вы можете заметить, что ссылка предоставляет документацию R2013a (так же, как и все поиски). Так что попробуйте из Mathworks ›› Support ›› Documentation Center ›› Other Release.   -  person voxeloctree    schedule 19.07.2013


Ответы (4)


Я не вижу этого в моем R2012b, так что, возможно, нет. Если вам не нужна символическая математика, вы всегда можете написать свою собственную. Что-то простое, как

function d = kronDel(j,k)

if j == k
    d = 1;
else
    d = 0;
end
person voxeloctree    schedule 18.07.2013

Дельта Кронекера возвращает 1, если j==k...

Таким образом, вы можете упростить выражение с помощью:

function d=kronDel(j,k)

d=j==k

end

К счастью, MATLAB представляет логические значения как (0,1)

person user2293601    schedule 18.07.2013
comment
Вы должны отформатировать свой код. Кроме того, этот вопрос помечен [matlab], а не [octave], поэтому следует использовать end. Вероятно, также было бы неплохо привести вывод к double или к классу входных переменных. - person horchler; 29.01.2015

Вы также можете сделать это встроенным, например

( a == b )

Тем не менее, использование анонимной функции способ преобразовать один лайнер, подобный этому, во что-то более читаемое

kronDel = @(j, k) j==k ;

kronDel( 2, 1 )
kronDel( 2, 2 )
person Peeter Joot    schedule 08.12.2014

Ваша ссылка на функцию MuPAD kroneckerDelta - примечание URL-адрес и причудливая типографика примеров. Вы не увидите его в ни в одной версии Matlab, потому что он доступен только через MuPAD (введите mupad в командном окне и попробуйте в открывшемся окне). Я понятия не имею, когда это было добавлено в MuPAD, я знаю, что это как минимум в R2012b. Вы можете получить его, даже если команда help ничего не возвращает.

Если у вас есть kroneckerDelta в R2011b, вы не сможете запустить его из обычного командного окна или редактора обычным способом.

evalin(symengine,'kroneckerDelta(1,1)')

или более гибкий

feval(symengine,'kroneckerDelta',1,1)

Подробнее см. . . Однако, если вы не работаете с символьной математикой, я вижу, что нет причин использовать эту функцию — она даже не векторизована! Я бы выбрал решение, которое полностью имитирует поведение kroneckerDelta с двойной точностью:

function d=kronDel(m,n)
if nargin == 1
    d = double(m==0);
else
    d = double(m==n);
end
person horchler    schedule 18.07.2013
comment
... только что увидел ваше редактирование о том, что оно работает в MuPAD. Ну а вот продолжение истории... - person horchler; 19.07.2013