楼主: sosiumann
3381 8

高额悬赏解决MATLAB程序零值判断小问题 [推广有奖]

  • 1关注
  • 2粉丝

已卖:1634份资源

博士生

22%

还不是VIP/贵宾

-

威望
0
论坛币
4701 个
通用积分
1.6061
学术水平
2 点
热心指数
1 点
信用等级
1 点
经验
4169 点
帖子
137
精华
0
在线时间
232 小时
注册时间
2010-10-5
最后登录
2020-10-15

楼主
sosiumann 发表于 2010-12-4 11:05:40 |AI写论文
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)'.
我是菜鸟,一直搞不懂为什么不对。请各位指点啊,论坛币奉上。

关键词:MATLAB程序 MATLAB atlab matla 高额悬赏 MATLAB 程序 判断 解决 悬赏
专注 信念 坚忍 改变

沙发
sosiumann 发表于 2010-12-4 11:06:16
应该怎么改呢?谢谢!
专注 信念 坚忍 改变

藤椅
sosiumann 发表于 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=[];
改为上面的程序后,虽然不报错但是算出来的值明显不合理,唉,哪位指点一下啊?不胜感激!
专注 信念 坚忍 改变

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

   后来出现的问题的确很奇怪,因为你根本没用到函数 pareto_nbd_ll.m 呀。
已有 1 人评分热心指数 收起 理由
sosiumann + 1 热心

总评分: 热心指数 + 1   查看全部评分

报纸
sosiumann 发表于 2010-12-4 12:50:07
4# rby 上面的程序就是pareto_nbd_ll.m文件,就是这个程序块出现对数零值的情况啊,r,s是参数,就是通过这段程序进行估计的,T和X是样本数据值,通过主程序读取的。
专注 信念 坚忍 改变

地板
rby 发表于 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)是否合理呢?

7
sosiumann 发表于 2010-12-5 21:21:03
不用修改,结果是对的。
专注 信念 坚忍 改变

8
liuxin9023 发表于 2010-12-6 10:10:14
你做的是MLE吧 MLE你不如试试直接用MLE函数或者其他的蒙特卡洛方法来做 直接算函数值有时候问题蛮多的
已有 1 人评分热心指数 收起 理由
sosiumann + 1 热心

总评分: 热心指数 + 1   查看全部评分

9
sosiumann 发表于 2010-12-7 18:03:21
8# liuxin9023 怎么直接用MLE函数或者其他的蒙特卡洛方法来做啊?可否赐教?
专注 信念 坚忍 改变

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

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