求精通Mathematica的大神,蛛网图怎么画?能尽量把代码写清楚点吗?

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 20:21:00
求精通Mathematica的大神,蛛网图怎么画?能尽量把代码写清楚点吗?求精通Mathematica的大神,蛛网图怎么画?能尽量把代码写清楚点吗?求精通Mathematica的大神,蛛网图怎么画?能

求精通Mathematica的大神,蛛网图怎么画?能尽量把代码写清楚点吗?
求精通Mathematica的大神,蛛网图怎么画?

能尽量把代码写清楚点吗?

求精通Mathematica的大神,蛛网图怎么画?能尽量把代码写清楚点吗?
鉴于好像在过去还没有人问过蛛网图的相关问题,这里答一下.比较好理解的解法:


f[a0_,n_] := Partition[NestList[1/2 (# + 1/#) &,a0,n + 1],2,1] /.{a_,b_} :> Sequence[{a,b},{b,b}]
f[0.3,100] // ListLinePlot





效率稍高一点并且同样比较好理解的解法:


f[a0_,n_] := Replace[Partition[NestList[1/2 (# + 1/#) &,a0,n + 1],2, 1],{a_,b_} :> Sequence[{a,b},{b,b}],{1}]


(* 效果是一样的所以不贴图了 *)


效率更高但是拐了一点弯所以对初学者来说可能有点难懂的解法:


f[a0_,n_] := Flatten[{{Most@#,Rest@#}\[Transpose],{Rest@#, Rest@#}\[Transpose]}\[Transpose],1] &@NestList[1/2 (# + 1/#) &,a0,n + 1]


当然了,大部分都塞到NestList里也是可以的:


f[a0_,n_] := 
 Flatten[Rest@
   NestList[
    Module[{amid = #[[2,2]],a1}, 
      a1 = 1/2 (amid + 1/amid); {{amid,a1},{a1,a1}}] &,{{0, 0},{0,a0}},n + 1],1]


差不多就这样吧