Оператор «точка перед» позволяет выполнять поэлементно операции вместо операций по умолчанию матрица . Если вы пишете свой код без точек, высока вероятность того, что вы либо столкнетесь с ошибками измерения (например, потому что вы пытаетесь выполнить матричное умножение с несовпадающими измерениями), либо получите очень странные результаты из-за автоматической трансляции, что делает в результате вы получите матрицы неожиданных размеров.
function pdf = rayleigh_pdf(x)
exp_term = -x.^2./(2.*std(x).^2);
pdf = (x.*exp(exp_term))./(std(x).^2)
end
Две мелочи: сигма-квадрат обычно обозначает дисперсию, т. е. квадрат стандартного отклонения. Поэтому либо используйте std(x).^2
, либо var(x)
.
Вместо того, чтобы писать очень многословную операцию power(x,2)
, вы можете просто использовать .^
для получения поэлементной мощности.
Обратите внимание, что некоторые точки являются лишними, например, когда вы уверены, что имеете дело с целыми числами (также известными как матрицы 1 -by- 1 в MATLAB). Таким образом, вы можете написать следующее, что эквивалентно:
function pdf = rayleigh_pdf(x)
exp_term = -x.^2/(2*std(x)^2);
pdf = (x.*exp(exp_term))/(std(x)^2)
end
т.е. точки требуются только при работе с массивами, x
и exp_term
здесь, а не со скалярами, такими как 2
или std(x)
.