Вы можете оценить параметр пользовательского распределения, используя функцию mle
:
Пример с вашим пользовательским Weibul PDF:
data = wblrnd(1,1,1000,1); %random weibull data
custompdf = @(x,a,b) (b*a).*x.^(b-1).*exp(-a*x.^b); %your custom PDF function
opt = statset('MaxIter',1e5,'MaxFunEvals',1e5,'FunValCheck','off'); %Iteration's option
[param,ci]= mle(data,'pdf',custompdf,'start',[1 1],'Options',opt,'LowerBound',[0 0],'UpperBound',[Inf Inf])
Если функция не сходится, выможно настроить начальную точку с помощью более подходящего значения.