- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 2608
- 在线时间
- 小时
|
发表于 2013-1-29 11:16:08
|
显示全部楼层
lz的问题,如2L mathe说,是可以比较系统的解决的,我这里罗嗦一下吧,呵呵。- fn[ss_,b_]:=Module[{s=ss,bk},
- If[s=="1Win"||s=="2Lost",Return[s]];
- If[s=="0Start",s={100,0,0}];
- bk=Apply[Plus,b];
- If[bk==7,s[[2]]++,s[[2]]=0];
- If[s[[1]]<bk,s[[3]]++,s[[3]]=0];
- s[[1]]=bk;
- If[s[[2]]>=2,s="1Win",If[s[[3]]>=2,s="2Lost"]];
- s];
- fn[{12,0,0},{1,1}]
- fn["0Start",{2,3}]
- fn["2Lost",{4,5}]
- fn[{200,100,100},{6,6}]
复制代码 第一步设想会出现的状态,然后定义一个状态转移函数fn,这个fn的定义是有随意性的,我这里的情况是:ss为{最后一次的点数,已有几个7,已有几个小于号},b为两个骨子的点数。- ss = {"0Start"}
- bs = Flatten[Table[{i, j}, {i, 6}, {j, 6}], 1]
复制代码 第二步列出了ss的初始状态,和b的所有可能。- ss = Union[ss, Flatten[Outer[fn, ss, bs, 1], 1]];
- ss // Length
- ss
复制代码 第三步ss将列出所有可能的状态,我们要不停的循环它,直到ss不变,这时ss有24个元素。这24个状态就是2L提到的状态。- r=Map[First[#]->Last[#]&,Transpose[{ss,Range[Length[ss]]}]]
- gs=Flatten[Outer[{#1,fn[#1,#2]}&,ss,bs,1],1];sn=Length[ss];
- set=Map[{First[#],Length[#]/36}&,Split[Sort[gs]]]/.r;
- mm=Table[0,{sn},{sn}];Do[mm[[set[[i,1,1]],set[[i,1,2]]]]=set[[i,2]],{i,Length[set]}];
复制代码 接下来的第四步,就求出那个“转移概率阵”mm。r将24个状态编了号。- c = Table[0, {sn}]; c[[1]] = 1; m = Transpose[mm];
- MatrixPower[N[m], 10^8].c
复制代码 然后是第四一撇步,呵呵,可以看到第二项0.191292就是答案了(留着验算用吧)。而如何算出这项呢?可以用本征值,大家可以就此深入研究一下,呵呵。也可以用下面第五步的方法。- var=Table[Subscript[x,i],{i,sn}];
- qs=Map[First[#]==Last[#]&,Transpose[{mm.var,var}]];
- qs[[2]]=(Subscript[x,2]==1);qs[[3]]=(Subscript[x,3]==0);
- ans=Subscript[x,1]/.First[Solve[qs,var]]
- ans//N
复制代码 第五步,解方程。x1到x24表示位于对应装态时取胜的几率,每个状态的x等于它后面所有状态的x的加权平均,另外有:x2=1和x3=0,求出x1就ok了。 |
|