全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
3352 8
2010-12-04
悬赏 10 个论坛币 未解决
现有以下程序:
maxab = max(alpha,beta);
absab = abs(alpha-beta);
param2 = s+1;
if alpha < beta
    param2 = r+X;
end   

part1 = (alpha^r*beta^s/gamma(r))*gamma(r+X);
part2 = 1./((alpha+T).^(r+X).*(beta+T).^s);
if absab == 0
   F1=1./((maxab+TX).^(r+s+X));
   F2=1./((maxab+T).^(r+s+X));
   su=(F1-F2);
else
   F1=h2f1(r+s+X,param2,r+s+X+1,absab./(maxab+TX))./...
       ((maxab+TX).^(r+s+X));
   F2=h2f1(r+s+X,param2,r+s+X+1,absab./(maxab+T))./...
       ((maxab+T).^(r+s+X));
end

f = -sum(log(part1.*(part2+(s./(r+s+X)).*(F1-F2))));
[f/1000 param]
g=[];
运行过程中,程序报错为:Warning: Log of zero.也就是说part1.*(part2+(s./(r+s+X)).*(F1-F2))部分出现了零值,本人想写个条件语句避开零值的情况,将后面部分的程序改为:
if (part1.*(part2+(s./(r+s+X)).*(F1-F2)))>0
    f=-sum(log(part1.*(part2+(s./(r+s+X)).*(F1-F2))));
    [f/1000 param]
    g=[];
else if (part1.*(part2+(s./(r+s+X)).*(F1-F2)))<0
        f=-sum(log(part1.*(part2+(s./(r+s+X)).*(F1-F2))));
        [f/1000 param]
        g=[];
    end
end
但还是报错为:One or more output arguments not assigned during call to 'D:\MATLAB\work\pareto_nbd_ll.m (pareto_nbd_ll)'.
我是菜鸟,一直搞不懂为什么不对。请各位指点啊,论坛币奉上。
二维码

扫码加我 拉你入群

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

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

全部回复
2010-12-4 11:06:16
应该怎么改呢?谢谢!
二维码

扫码加我 拉你入群

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

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

2010-12-4 11:32:13
su=part1.*(part2+(s./(r+s+X)).*(F1-F2));
if su>0
    xiaomin=log(su);
   
else if su<0
        xiaomin=log(su);
      
    end
end
f=-sum(xiaomin);
[f/1000 param]
g=[];
改为上面的程序后,虽然不报错但是算出来的值明显不合理,唉,哪位指点一下啊?不胜感激!
二维码

扫码加我 拉你入群

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

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

2010-12-4 11:46:21
你的程序中的变量是在多少的时候出现的问题呀?s r T TX 是多少呀?

   后来出现的问题的确很奇怪,因为你根本没用到函数 pareto_nbd_ll.m 呀。
二维码

扫码加我 拉你入群

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

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

2010-12-4 12:50:07
4# rby 上面的程序就是pareto_nbd_ll.m文件,就是这个程序块出现对数零值的情况啊,r,s是参数,就是通过这段程序进行估计的,T和X是样本数据值,通过主程序读取的。
二维码

扫码加我 拉你入群

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

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

2010-12-4 22:52:00
3# sosiumann


      一点问题,不知道对不对。
      在
      su=part1.*(part2+(s./(r+s+X)).*(F1-F2));
if su>0
    xiaomin=log(su);
   
else if su<0
        xiaomin=log(su);
      
    end
end
f=-sum(xiaomin);
[f/1000 param]
g=[];

  中,如果su=0时该怎么处理呢?  你既然说了 su可能等于0, 那su=0时,if .....end 可以避免log出现,那这时候令 f=-sum(xiaoming)是否合理呢?
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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