Vectorize an anonymous function
Afficher commentaires plus anciens
I was wondering whether someone would be able to help/point me in the right direction for vectorizing a anonymous function?
I am trying to fit a multivariate gaussian distribution to data. Here is my code:
for n = 1:length(uniqPosOne)
gaussElpt = @(param) (param(1) + param(2).*(exp(-1/2 .* (uniqPosOne(n, :) - [param(3), param(4)]) * ...
([param(5), param(6); param(6), param(7)]).^(-1) * (uniqPosOne(n, :) - [param(3), param(4)]).')));
a = gaussElpt(startPoint);
tempList(n) = a;
end
I am trying to optimize the parameters that allow for me to fit my data (not shown), I use lsqnonlin.
uniqPosOne is a n x 2 array, params(1) and (2) are offset/gain, params(3) and (4) are vector means, and params(5), (6), (7) are part of covaraince matrix. The params are the parameters used by lsqnonlin to find the parameters with the lowest error.
I want to be able to have a nx2 array (uniqPosOne) and have the function evaluate each pair separately in a vectorized manner, currently I have been unable to do so as attempting vectorization results in a nxn, while I want a nx1.
The main reason is due to time to compute is rather long for a small subset of data. Any help is appreciated.
3 commentaires
Matt J
le 11 Août 2022
If this is supposed to be a Gaussian distirbution, with covariance [param(5), param(6); param(6), param(7)] then this,
([param(5), param(6); param(6), param(7)]).^(-1)
should reallly be this,
inv([param(5), param(6); param(6), param(7)])
AES
le 11 Août 2022
Walter Roberson
le 11 Août 2022
Or, better yet,
[param(5), param(6); param(6), param(7)] \ (uniqPosOne(n, :) - [param(3), param(4)]).'
Réponse acceptée
Plus de réponses (1)
This FEX submission already appears to do what you want,
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!