求精通Mathematica的大神,蛛网图怎么画?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/20 04:13:05
求精通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]
差不多就这样吧
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]
差不多就这样吧