1128 1

[问答] matlab程序,请教高手帮忙修改,十分感谢! [推广有奖]

  • 8关注
  • 2粉丝

讲师

33%

还不是VIP/贵宾

-

威望
0
论坛币
310 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
15111 点
帖子
218
精华
0
在线时间
379 小时
注册时间
2012-10-31
最后登录
2020-8-31

楼主
慧(会)幸福 发表于 2014-4-23 16:44:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
fig.jpg

1. 上图是要编的内容,图片中的 f 为log(1+lambda^T*(x_1 -mu)) +......+ log(1+lambda^T*(x_n -mu))
2.下面是我的两个程序,第一个是针对一维的,第二个是针对的多维的,按理说,在x是一维情况下,二者应该输出一样的结果。但是第一个很快可以运行出结果,第二个却不能;比如x=normrnd(0,1,10,1);EL1(x,0)很快出结果,但是第二个EL(x,0)却不能很快出来,事实上我也不知道第二个程序能不能运行出结果,想请教高手帮忙看看是不是第二个程序遍错了,有没有可以改进的地方?
多谢了,十分感谢!
第一个程序如下
  1. function [logelr,lambda,grad,pelrmu1,pelrmu2]=EL1(x,mu)lambda=0; k=0; gamma=1; y=1;while (abs(y)>(10^-8))    [F1,F2,F3,F4,F5]=f1(x,mu,lambda);    y1=sum(F1);    y2=sum(F2);    y3=sum(F3);    y4=sum(F4);    y5=sum(F5);    y=y2/y3;    delta=gamma*y;while (sum(f1(x,mu,lambda-delta))< sum(f1(x,mu,lambda)))     gamma=0.5*gamma;    delta=gamma*y;endk=k+1;lambda=lambda-delta;gamma=1/sqrt(k+1);end  lambda;  logelr=2*y1;  grad=y2;  pelrmu1=y4;  pelrmu2=y5;
复制代码

其中函数f1如下
  1. function [F1,F2,F3,F4,F5]=f1(x,mu,lambda)
  2. w1=x-mu;
  3. w2=1+lambda.*(x-mu);
  4. F1=log(w2);
  5. F2=w1./w2;
  6. F3=-w1.*w1./(w2.*w2);
  7. F4=lambda./w2;
  8. F5=-lambda.*lambda./w2.*w2;
  9. end
复制代码
  第二个程序如下
  1. function [logelr,lambda,grad,pelrmu1,pelrmu2]=EL(x,mu)
  2. lambda=zeros(size(x,2),1); k=0; gamma=1; y1=0;y2=zeros(size(x,2),1);
  3. y3=zeros(size(x,2),size(x,2));y4=zeros(size(x,2),1);
  4. y5=zeros(size(x,2),size(x,2));y=1;
  5. while (norm(y,2)>(10^-8))
  6.     for i=1:size(x,1)
  7.     [F1,F2,F3,F4,F5]=f(x(i,:)',mu,lambda);
  8.     y1=y1+F1;
  9.     y2=y2+F2;
  10.     y3=y3+F3;
  11.     y4=y4+F4;
  12.     y5=y5+F5;
  13.    end
  14.   y=y3\y2;
  15.   z1=0;
  16.   delta=gamma*y;
  17.   for i=1:size(x,1)
  18.   z1=z1+ f(x(i,:)',mu,lambda-delta);
  19.   end
  20. while (z1< y1)
  21.     gamma=0.5*gamma;
  22.     delta=gamma*y;
  23.     z1=0;
  24.   for i=1:size(x,1)
  25.   z1=z1+ f(x(i,:)',mu,lambda-delta);
  26.   end
  27. end
  28. k=k+1;
  29. lambda=lambda-delta;
  30. gamma=1/sqrt(k+1);
  31. end
  32.   lambda;
  33.   logelr=2*y1;
  34.   grad=y2;
  35.   pelrmu1=y4;
  36.   pelrmu2=y5;  
复制代码
其中,函数 f 如下:
  1. function [F1,F2,F3,F4,F5]=f(x,mu,lambda)
  2. w1=x-mu;
  3. w2=1+lambda'*(x-mu);
  4. F1=log(w2);
  5. F2=w1/w2;
  6. F3=-w1*w1'/(w2*w2);
  7. F4=lambda/w2;
  8. F5=-lambda*lambda'/w2*w2;
  9. end
复制代码


  





二维码

扫码加我 拉你入群

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

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

关键词:MATLAB程序 MATLAB matla atlab 请教高手 function matlab 图片 程序

沙发
caiewww 发表于 2014-4-24 21:13:21
路过,帮楼主顶

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 21:27