24小时热门版块排行榜    

查看: 312  |  回复: 1
当前主题已经存档。

lovein

金虫 (小有名气)

[交流] 【求助】麻烦帮忙看下一个“随机游走”的程序,为什么运行时老出错!!!

整个程序如下:
(*----------------------------------------------------------------------*)
BeginPackage["RW2D`"]
  RW2D::usage = "RW2D[maxstep, ktry, range, startarea, datadirectory]
    reads the two - dimensional digital image file (text file) and
    exports the mean - square displacement of random walkers as a text
    file, 'msdlist2d.out'.
     'maxstep' is the final value of the time step of the random walker.
     'ktry' is the number of average (i.e., number of walkers).
     'range' is the lower and upper limit of the voxel intensity of
    the pore space.
     'startarea' is the dimension of a square as the percentage to
    the system size.
     The random walker starts to diffuse from inside the square which is
    located at the center of the image.
     'datadirectory' is the directory or folder name where a single
    two-dimensional digital image file (text file) is located. "
  ShowTrajectory::usage = "ShowTrajectory[kk] is for the graphic display
    of the random walk trajectory of the 'kk' - th trial. "
Begin["`Private`"]
(* Reading the two - dimensional data in 'datadirectory' *)
readdata2d[range_List, datadirectory_] :=
    Module[{dataname, datasize, x, m2d, rmin = range[[1]], rmax = \
range[[2]]},
      dataname = First[FileNames["*", {datadirectory}]];
      datasize = Round[Sqrt[Length[ReadList[ToString[dataname], Real]]]];
      m2d =
        Partition[
          Map[If[rmin
(* random walk *)
(* 'xylist' is the trajectory of 'maxstep' - step from 'o2d' *)
tra2d[maxstep_, o2d_List, m2d_List] :=
    Module[{n2d = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}, now = o2d,
        xylist = {o2d}, outoffield = 0, xmax = ymax = Length[m2d],
        step, new, x, y},
      ran2d := Random[Integer, {1, 4}];
      For[i = 1, i
(* random walk of 'ktry' - walkers *)
(* 'tra2dktry' is list of the trajectory of 'ktry' - walkers *)
rw2d[maxstep_, ktry_, startarea_, m2d_List] :=
    Module[{xdatasize = ydatasize = Length[m2d], xylist, outoffield,
        tra2dktry = {}, failure = 0},
      rano2d[lx_, ly_, sa_] :=
        {Random[Integer, {(1 - sa/100)/2 lx, (1 + sa/100)/2lx}],
         Random[Integer, {(1 - sa/100)/2 ly, (1 + sa/100)/2ly}]};
      o2d := (For[i = 1; {x0, y0} = rano2d[xdatasize, ydatasize, startarea],
            m2d[[x0, y0]] != 0, i++,
            {x0, y0} = rano2d[xdatasize, ydatasize, startarea]]; {x0, y0});
      Do[{xylist, outoffield} = tra2d[maxstep, o2d, m2d];
        AppendTo[tra2dktry, xylist]; AddTo[failure, outoffield], {i, 1, \
ktry}];
      Return[{tra2dktry, failure}];
    ];
(* calculation of the mean - square displacement *)
msd2d[data_List] :=
    Module[{ktry = Dimensions[data][[1]], maxstep = Dimensions[data][[2]] - \
1,
         d1, d2, d3, dd, ii},
      d1 = Transpose[data, {2, 1}];
      d2 = Map[(# - First[d1]) &, d1];
      d3 = Transpose[Map[(#^2) &, d2]];
      dd = Apply[Plus, Transpose[Apply[Plus, d3]/ktry]];
      ii = Range[0, maxstep];
      msdlist2d = Transpose[{ii, dd}];
      Return[msdlist2d];
    ];
RW2D[maxstep_, ktry_, range_List, startarea_, datadirectory_] :=
    Module[{failure, msdlist2d},
      (* reading the two - dimensional data in 'datadirectory' *)
      m2d = readdata2d[range, datadirectory];
      (* execution of the random walk *)
      {tra2dktry, failure} = rw2d[maxstep, ktry, startarea, m2d];
      Print["Failure = ", failure, " / Success = ", ktry];
      (* calculation of the mean - square displacement of 'ktry' walkers *)
      msdlist2d = msd2d[tra2dktry];
      (* file output of the mean - square displacement *)
      (* The file name is 'msdlist2d.out' *)
      Export["msdlist2d.out", N[msdlist2d], "Table"];
      (* graphic output of the mean - square displacement *)
      ListPlot[msdlist2d, PlotJoined -> True,
          AxesLabel -> {"time \n step", "mean-square \n displacement"}];
    ];
(* graphic output of the trajectory *)
(* Show the trajectory of a single walker as an example. *)
(* RGBColor[] of 0, 1, 2 are colors of the pore, obstacle, and trajectory,
  respectively. You can change the color as you like. *)
gtra2d[tra2d_List, m2d_List] :=
    Module[{color0 = RGBColor[0.9, 0.9, 0.9],
            color1 = RGBColor[0.5, 0.5, 0.5],
            color2 = RGBColor[0.8, 0.8, 0.8],
            plmin = 1 - 2, plmax = Length[m2d] + 1},
      tra2dshift = Map[(# - {0.5, 0.5}) &, tra2d];
      tra2dm2d = (aa2 = m2d; Map[(aa2[[#[[1]], #[[2]]]] = 2) &, tra2d]; aa2);
      Show[
        Graphics[
          RasterArray[tra2dm2d /. {0 -> color0, 1 -> color1, 2 -> color2}]],
        Graphics[{Line[Map[Reverse, tra2dshift]], AbsolutePointSize[5.0],
            Point[Reverse[First[tra2dshift]]],
            Point[Reverse[Last[tra2dshift]]]}],
        PlotRange -> {{plmin, plmax}, {plmin, plmax}}, AspectRatio -> 1];
    ];
(* Only for the 'kk' - th trial, the trajectory of the random walk is shown
  graphically *)
ShowTrajectory[kk_] := gtra2d[tra2dktry[[kk]], m2d];
End[];
EndPackage[];
(*----------------------------------------------------------------------*)
(* example of usage *)
(*----------------------------------------------------------------------*)
(* As noted below, first of all, you put the command '<< RW2D.m'. *)
(* Then you can put the command set,
  'RW2D[500, 200, {0, 34000}, 10, "DATAsingle"];' and 'ShowTrajectory[2];'. \
*)
(* 'RW2D[maxstep, ktry, range, startarea, datadirectory]' is the command for
  the performance of the random walk and the calculation of mean - square
  displacement. *)
(* The command 'ShowTrajectory[kk]' is for the graphic display of the
  trajectory of the 'kk' - th trial. *)
(* In the example below, a trajectory of the second trial will be shown
  graphically. *)
(* In[1] := << RW2D.m *)
(* In[2] := RW2D[500, 200, {0, 34000}, 10, "DATAsingle"]; ShowTrajectory[2]; \
*)
不知道为啥,运行的时候老是出错,我又看不大懂这程序,请求帮忙

[ Last edited by lovein on 2009-10-26 at 13:35 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lovein

金虫 (小有名气)

附件是程序中需要调用的图像,即the two - dimensional digital image file (text file)

太长了,只能用附件发。还望帮忙。
灰常灰常感谢!!
2楼2009-10-26 13:39:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lovein 的主题更新
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[职场人生] 40+中年人失业后,还能找到好工作吗? +11 xqy2009 2026-10-13 13/650 2026-10-15 21:32 by bear2007
[有机交流] 用NBS溴化时溶剂除了CCl4外还有什么 +3 18834002860 2026-10-12 6/300 2026-10-15 14:30 by 长沙摩尔信息科�
[基金申请] 申请科研项目纯靠实力能成功吗? 200+7 David1982 2026-10-13 11/550 2026-10-15 10:30 by zyqchem
[硕博家园] 极限拉扯,如何抉择 +11 Isak0320 2026-10-12 15/750 2026-10-14 21:55 by 猫鱼不是鱼
[论文投稿] 二审4个多月了还是Awaiting Reviewer Scores 10+3 纳斯达克ML 2026-10-11 4/200 2026-10-14 17:30 by babero
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +8 wangyl_123 2026-10-10 13/650 2026-10-14 15:12 by zuesli
[教师之家] 课题组会帮你通过考核么? +4 好运来~9527 2026-10-10 7/350 2026-10-13 08:41 by xli1984
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
信息提示
请填处理意见