Generic Anonymous Function Setup
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
dsmalenb
am 26 Jul. 2018
Kommentiert: dsmalenb
am 26 Jul. 2018
Hello!
I was wondering if the following is possible using anonymous functions. I am fairly new to them and this is not for a class - just FYI.
Let N >= 2 specify the number of mixture components I would like to build into my anonymous function. Let's say I want each component to be a Normal Distribution. I have three vectors for their weights (w), means (m), and standard deviations (s).
If N = 2 then the anonymous function would look like:
fun = @(x) w(1)/(s(1) *sqrt(2*pi))*exp(-(x-m(1))^2/(2*s(1)^2)) + w(2)/(s(2) *sqrt(2*pi))*exp(-(x-m(2))^2/(2*s(2)^2));
This becomes exceedingly arduous as N grows. It would be preferable to be able to define this function generically so it does not have to get written out.
Is this possible? From research the literature I am only finding examples where the author "hard coded" the function.
However, I could be searching for it incorrectly or missing a specific term.
Any insights would be greatly appreciated.
0 Kommentare
Akzeptierte Antwort
Stephen23
am 26 Jul. 2018
Bearbeitet: Stephen23
am 26 Jul. 2018
Your function:
>> w = 1:2;
>> m = 2:3;
>> s = 3:4;
>> fun = @(x) w(1)/(s(1)*sqrt(2*pi))*exp(-(x-m(1))^2/(2*s(1)^2)) + w(2)/(s(2)*sqrt(2*pi))*exp(-(x-m(2))^2/(2*s(2)^2));
>> fun(1)
ans = 0.30183
Vectorized function (simpler):
>> foo = @(x)sum(w./(s.*sqrt(2*pi)).*exp(-(x-m).^2./(2*s.^2)));
>> foo(1)
ans = 0.30183
Vectorized function, with N==4:
>> w = 0:3;
>> m = 3:6;
>> s = 6:9;
>> foo = @(x)sum(w./(s.*sqrt(2*pi)).*exp(-(x-m).^2./(2*s.^2)));
>> foo(1)
ans = 0.25397
When you write vectorized code you can give it arrays of any size and it will work. Any time you find yourself copy-and-pasting code then you are doing something wrong.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Function Creation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!