问题找到最低的一个函数

1视图(30天)
snipsnap333
snipsnap333 2018年11月27日
评论道: snipsnap3332018年11月27日
你好,
我有一个函数f = (x, n, mu1、mu2 sigma1, sigma2, prop2),这是一个混合耿贝尔分布。mu2,我想估计参数mu1 sigma1 sigma2, prop2邦定在我收集数据x和n。我试图找到参数的值最小化L =总和(日志(f = (x, n, mu1、mu2 sigma1, sigma2, prop2)))使用fminunc或fminsearch。
当我尝试运行代码有错误:
没有足够的输入参数。
错误max_like > myfunc(25)行
L =总和(日志(f (x_dat、n_dat mu1, mu2, sigma1, sigma2, prop2)));
错误fminsearch(第200行)
阵线(:1)= funfcn (x,变长度输入宗量{:});
错误在max_like(第10行)
x = fminsearch (@myfunc, 25岁,35岁,5、5,0.5]);
当我只调用函数myfunc效果好。它与评估函数f()内myfunc ()。我也试着用大中型企业(),但这并不与两个变量。我知道使用全局变量并不是一个很好的练习,但这个函数将实现成一个GUI,那儿有我的私人属性对整个项目和我不需要全局变量。
提前谢谢你的帮助。
全球x_dat;
x_dat = (12、13; 14.5; 15);
全球n_dat;
n_dat = [2; 2, 5, 5];
% x = fminunc (@myfunc[16日12日5、5,0.5]);
x = fminsearch (@myfunc[16日12日5、5,0.5]);
函数L = myfunc (mu1 mu2、sigma1 sigma2, prop2)
全球x_dat
全球n_dat
F1 = @ (x, mu1 sigma1) (exp (exp (- (x-mu1) / sigma1)));
F2 = @ (x, mu2 sigma2) (exp (exp (- (x-mu2) / sigma2)));
f1 = @ (x, mu1 sigma1) ((1 / sigma1) * exp (- ((x-mu1) / sigma1 + exp (- (x-mu1) / sigma1))))。(* (exp (exp () - x-mu1 / sigma1)));
f2 = @ (x, mu2 sigma2) ((1 / sigma2) * exp (- ((x-mu2) / sigma2 + exp (- (x-mu2) / sigma2))))。(* (exp (exp () - x-mu2 / sigma2)));
f_mix = @ (x, mu1 mu2、sigma1 sigma2, prop2) (1-prop2) * f1 (x, mu1 sigma1) + prop2 * f2 (x, mu2 sigma2);
f = @ (x, n, mu1 mu2, sigma1, sigma2, prop2) (n。* ((1-prop2)。* F1 (x, mu1 sigma1) + prop2。* F2 (x, mu2 sigma2)。^ (n - 1))。* f_mix (x, mu1 mu2、sigma1 sigma2, prop2);
L =总和(日志(f (x_dat、n_dat mu1, mu2, sigma1, sigma2, prop2)));
结束

接受的答案

斯蒂芬
斯蒂芬 2018年11月27日
编辑:斯蒂芬 2018年11月27日
你好,
试试这个:
[x, fval] = curvefit_gumble
函数[x, fval] = curvefit_gumble
x_dat = (12、13; 14.5; 15);
n_dat = [2; 2, 5, 5];
oldopts = optimset (“fminsearch”);
选择= optimset (oldopts,“MaxFunEvals”,250,“麦克斯特”,250,“显示”,“关闭”);
[x, fval] = fminsearch (@myfunc[16日12日5、5,0.5],选项);
函数L = myfunc (x)
mu1 = x (1);
mu2 = x (2);
sigma1 = x (3);
sigma2 = x (4);
prop2 = x (5);
F1 = @ (x, mu1 sigma1) (exp (exp (- (x-mu1) / sigma1)));
F2 = @ (x, mu2 sigma2) (exp (exp (- (x-mu2) / sigma2)));
f1 = @ (x, mu1 sigma1) ((1 / sigma1) * exp (- ((x-mu1) / sigma1 + exp (- (x-mu1) / sigma1))))。(* (exp (exp () - x-mu1 / sigma1)));
f2 = @ (x, mu2 sigma2) ((1 / sigma2) * exp (- ((x-mu2) / sigma2 + exp (- (x-mu2) / sigma2))))。(* (exp (exp () - x-mu2 / sigma2)));
f_mix = @ (x, mu1 mu2、sigma1 sigma2, prop2) (1-prop2) * f1 (x, mu1 sigma1) + prop2 * f2 (x, mu2 sigma2);
f = @ (x, n, mu1 mu2, sigma1, sigma2, prop2) (n。* ((1-prop2)。* F1 (x, mu1 sigma1) + prop2。* F2 (x, mu2 sigma2)。^ (n - 1))。* f_mix (x, mu1 mu2、sigma1 sigma2, prop2);
L =总和(日志(f (x_dat、n_dat mu1, mu2, sigma1, sigma2, prop2)));
结束
结束
结果:
退出:最大数量的迭代已经超过了
——增加麦克斯特选择。
当前的函数值:-47.742019
x =
23.3458 13.8903 5.3200 6.4483 0.1364
fval =
-47.7420
增加 MaxFunEvals 麦克斯特 不会改变结果。

更多的答案(0)

s manbetx 845


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!