全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1083 1
2014-04-24
以下是我的代码,图片中是我要编的内容,结果运行太慢或者根本运行不出来,注意这里的mu是多维的,请教高手帮忙改进,多谢了! 图中 f=log(1+lambda^T*(x_1-mu))+... ...log(1+lambda^T*(x_n - mu)) , T表示转置。
fig.jpg
  • function [logelr,lambda,grad,pelrmu1,pelrmu2]=EL(x,mu)
  • lambda=zeros(size(x,2),1); k=0; gamma=1; y1=0;y2=zeros(size(x,2),1);
  • y3=zeros(size(x,2),size(x,2));y4=zeros(size(x,2),1);
  • y5=zeros(size(x,2),size(x,2));y=1;
  • while (norm(y,2)>(10^-8))
  •     for i=1:size(x,1)
  •     [F1,F2,F3,F4,F5]=f(x(i,:)',mu,lambda);
  •     y1=y1+F1;
  •     y2=y2+F2;
  •     y3=y3+F3;
  •     y4=y4+F4;
  •     y5=y5+F5;
  •    end
  •   y=y3\y2;
  •   z1=0;
  •   delta=gamma*y;
  •   for i=1:size(x,1)
  •   z1=z1+ f(x(i,:)',mu,lambda-delta);
  •   end
  • while (z1< y1)
  •     gamma=0.5*gamma;
  •     delta=gamma*y;
  •     z1=0;
  •   for i=1:size(x,1)
  •   z1=z1+ f(x(i,:)',mu,lambda-delta);
  •   end
  • end
  • k=k+1;
  • lambda=lambda-delta;
  • gamma=1/sqrt(k+1);
  • end
  •   lambda;
  •   logelr=2*y1;
  •   grad=y2;
  •   pelrmu1=y4;
  •   pelrmu2=y5;

复制代码

其中,上述程序中的函数 f(和图片中的f 不是一回事)如下
  • function [F1,F2,F3,F4,F5]=f(x,mu,lambda)
  • w1=x-mu;
  • w2=1+lambda'*(x-mu);
  • F1=log(w2);
  • F2=w1/w2;
  • F3=-w1*w1'/(w2*w2);
  • F4=lambda/w2;
  • F5=-lambda*lambda'/w2*w2;
  • end

复制代码





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-4-24 13:53:34
你可以打印出循环的中间结果自己检查的。 尤其开始的几步,都有希望手算,或者计算器算了你自己测试
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群