全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1219 3
2011-05-26
%常数a=0.5
syms x y f R R0 X a Y;
X=0;
a=0.5;
while X==0      %不满足条件时,转回,重新抽取随机数。
    u1=unifrnd(0,1,1);%在U(0,1)分布中抽取u1。
    R=unifrnd(0,1,1);%h(x)的逆变化满足U(0,1)分布,故先在U(0,1)分布中抽取R。
    R0=int(x^(a-1)/(1/a+1/exp(1)),0,1);%求出y=1时,R的值为R0,作为判断条件(由于H(y)是单调增的)。
    if('R<=R0')
       f=int(x^(a-1)/(1/a+1/exp(1)),0,y);
       Y=solve(f-R);
       Y=vpa(Y,4);
       if ('u1<=exp(-Y)')
         X=Y;
       else
         X=0;
       end;
    elseif('R>=R0')
         f=int(exp(-x)/(1/a+1/exp(1)),1,y)+R0;
         Y=solve(f-R);
         Y=vpa(Y,4);
         if ('u1<=Y^(a-1)')
            X=Y;
         else
             X=0;         
         end;
    end;
end
X   %为抽取的随机数
二维码

扫码加我 拉你入群

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

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

全部回复
2011-5-27 12:22:35
两个条件R<=R0和R>=R0不是exclusive的,有重叠 =
另外你这个程序现在是编译不通过还是结果不对?
二维码

扫码加我 拉你入群

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

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

2011-5-27 13:54:57
a值变为0.3的时候会有复数出现。 2# junuylia
二维码

扫码加我 拉你入群

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

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

2011-5-28 12:50:08
3# 萧湘客 你这个是一个很好的问题。
做程序有两类错误;
一、语法错误,
二、逻辑错误。

第一类错误比较好找,通常MATLAB有很强的纠错功能。当然,其他语言编辑环境也有,比如JAVA的环境和C++(微软VC++)环境,都有语法错误提示功能。你的程序可以运行,第一类错误没有。

第二类错误,通常是逻辑错误。就是运算的结果和预期想要的不一致。这个在程序测试中,叫Debug吧。你的程序产生了bug。通常可以从几个方面纠正。
一个是重新设计算法,是算法错误引起的逻辑错误。一个是虽然语法没有错误,不过函数调用错误,在运行中产生了预期之外的逻辑性错误。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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