1802 2

[问答] 求高手指教,修改matlab程序,whlie嵌套 [推广有奖]

  • 8关注
  • 2粉丝

讲师

33%

还不是VIP/贵宾

-

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

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下面这个程序运行后报错,错误显示没有定义y,不知道怎么回事,请各位高手指教!谢谢了!
图中是我要遍的程序,图中的函数 f 和程序里面的 f 不是一回事,图中f=sum_{i=1-n} {log(1+lambda^T*(x_i - mu))}



IMG_20140417_164314.jpg

经验证,下面程序中函数 f 没有错

function [F1,F2,F3]=f(x,mu,lambda)w1=x-mu;
w2=1+lambda.*(x-mu);
F1=log(w2);
F2=w1./w2;
F3=-w1.*w1./w2;
x=normrnd(0,1,10,1);
lambda=0; k=0; gamma=1; mu=0;
while (abs(y)<10^-8)
    [F1,F2,F3]=f(x,mu,lambda);
    y1=sum(F1);
    y2=sum(F2);
    y3=sum(F3);
    y=inv(y3)*y2;
    delta=gamma*y;
while (f(lambda-delta)<f(lambda))
    gamma=0.5*gamma;
end
k=k+1;
lambda=lambda-delta;
gamma=1/sqrt(k+1);
end
  lambda



二维码

扫码加我 拉你入群

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

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

关键词:MATLAB程序 MATLAB atlab matla Mat function matlab 程序

沙发
Benlaron 发表于 2014-4-18 15:26:37
还没运行呢,光是看你的程序就找了两个错误和两个可能的问题

错误:
1. 按照你这种迭代求近似解,明显应该是abs(y) >= 10^-8作为判定条件。while 大于10的-8次方,才继续迭代,不是么?
2. 原来你定义的f,是三input三output的,你倒数第八行代码那里,f只有一个输入,当然有问题

问题:
1. 把function和程序主体分开定义会比较好一点,混一块容易编译不过(个人感觉)。y没定义我觉得你可以给它来一发初始值,比如说y = 1试试
2. y3那里矩阵可能会奇异,所以也会导致y没有定义。(BTW,论坛有代码功能,如下图)

  1. function [F1,F2,F3]=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;
  7. x=normrnd(0,1,10,1);
  8. lambda=0; k=0; gamma=1; mu=0;
  9. while (abs(y)<10^-8)
  10.     [F1,F2,F3]=f(x,mu,lambda);
  11.     y1=sum(F1);
  12.     y2=sum(F2);
  13.     y3=sum(F3);
  14.     y=inv(y3)*y2;
  15.     delta=gamma*y;
  16. while (f(lambda-delta)<f(lambda))
  17.     gamma=0.5*gamma;
  18. end
  19. k=k+1;
  20. lambda=lambda-delta;
  21. gamma=1/sqrt(k+1);
  22. end
  23.   lambda
复制代码

藤椅
慧(会)幸福 发表于 2014-4-21 09:33:48
非常感谢,已更正

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 22:47