G.X*_*ara 7 plot physics wolfram-mathematica
在平面(二维)中,路径可以由(n + 1)个点(Xo,Yo),(X1,Y1),...,(Xn,Yn)的序列表示,对于任何i (整数1 <i <n-1):
Pi(vector) = [Xi-X(i-1),Yi-Y(i-1)]
Run Code Online (Sandbox Code Playgroud)
表示第i步的是具有长度Pi的向量,并且通过转向角a(i)以代数方式(不知道如何)测量向量Pi和P(i + 1)之间的方向变化的值. .
像任何角度分布(方向变化)一样,它的特征在于平均向量,该平均向量被认为是对称的并且具有角平均值Φ= o.这种分析的方法涉及数值模拟,因为代数方法似乎太复杂,我必须使用伪随机高斯发生器从正态分布获得连续值,平均值为0,标准偏差σ(0.1- 1.2)弧度来模拟路径.
因此,在每个具有长度P(恒定,即125km)的步骤之后,方向变化的值(转向角a(i))由伪随机发生器确定给定的σ值,其沿着该值是恒定的.路径.然后向下一个方向迈出一步,依此类推.
一些有用的方程:
a(i) ~ n(0,?)
?(i+1) = ?(i) + a(i)
X(i+1) = Xi + P Cos[?(i+1)]
Y(i+1) = Yi + P Sin[?(i+1)]
Run Code Online (Sandbox Code Playgroud)
其中Θi代表第i步的方向.根据伪随机均匀发生器的均匀角度分布随机选择第一步骤Θi的方向.转动角度从-Pi到Pi记录
我怎样才能看到12个500步的路径,每个路径的特征是标准变化σ的给定值在0.1到1.2弧度范围内,连续步骤之间的方向变化分布和在Mathematica中绘制它?我对Mathematica一无所知,特别是如何为这个问题编写代码.
按照问题中的符号,使用独立的法线增量来构建角度,然后将其用作下一步大小的方向size.
Block[{size=0.5}, Graphics[
Line[Accumulate[
Function[x, size*{Re[x], Im[x]}, Listable][
Exp[I Accumulate[
RandomVariate[NormalDistribution[0, Pi/4], 10^3]]]]]]
]]
Run Code Online (Sandbox Code Playgroud)

RandomRobinsonWalk[coords_List] :=
Show[CountryData["World", {"Shape", "Robinson"}],
Graphics[{Thick, Red,
Line[Map[ GeoGridPosition[ GeoPosition[#], "Robinson"][[1]] & ,
coords]]}], Frame -> True]
Run Code Online (Sandbox Code Playgroud)
在球体上随机游走的生成如下:
Coordinates[{\[Theta]_, \[Phi]_}, {cosa_,
sina_}, \[CapitalDelta]\[Theta]_] := {ArcCos[
Cos[\[CapitalDelta]\[Theta]] Cos[\[Theta]] -
cosa Sin[\[CapitalDelta]\[Theta]] Sin[\[Theta]]],
ArcTan[cosa Cos[\[Theta]] Cos[\[Phi]] Sin[\[CapitalDelta]\[Theta]] \
+ Cos[\[CapitalDelta]\[Theta]] Cos[\[Phi]] Sin[\[Theta]] +
sina Sin[\[CapitalDelta]\[Theta]] Sin[\[Phi]], (cosa \
Cos[\[Theta]] Sin[\[CapitalDelta]\[Theta]] +
Cos[\[CapitalDelta]\[Theta]] Sin[\[Theta]]) Sin[\[Phi]] -
Cos[\[Phi]] sina Sin[\[CapitalDelta]\[Theta]]]};
Clear[SphereRandomWalk];
SphereRandomWalk[ipos_, steps_, stepsize_, prec_: MachinePrecision] :=
FoldList[Function[{up, cossin}, Coordinates[up, cossin, stepsize]],
ipos, Function[u, {Re[u], Im[u]}, Listable][
Exp[I RandomVariate[UniformDistribution[{-Pi, Pi}], steps]]]]
Run Code Online (Sandbox Code Playgroud)
用于获得下一{\[Theta], \[Phi}对的公式如下:
Expand[Simplify[((RotationMatrix[\[Alpha], {Sin[\[Theta]] Sin[\[Phi]],
Sin[\[Theta]] Cos[\[Phi]],
Cos[\[Theta]]}].({Sin[\[Theta]] Sin[\[Phi]],
Sin[\[Theta]] Cos[\[Phi]],
Cos[\[Theta]]} /. {\[Theta] -> \[Theta] + \[CapitalDelta]\
\[Theta]}))) /. {Conjugate -> Identity} /. {Abs[x_]^2 :> x^2}]]
Run Code Online (Sandbox Code Playgroud)
也就是说,在θ中执行固定大小的旋转,然后以随机角度围绕前一个矢量旋转\[Alpha].
用法:
((# - {90, 0}) & /@ (SphereRandomWalk[{Pi/2, 0} // N, 2500, Pi*0.01]/
Degree)) // RandomRobinsonWalk
Run Code Online (Sandbox Code Playgroud)

Sasha的答案是要走的路,但是当你开始使用Mma时,也许程序性程序更容易理解.
请注意,我并不是说这是在Mma做事的好方法.
P = 1;
For[iter = 1, iter < 13, iter++,
sigma = iter/10;
a = RandomVariate[NormalDistribution[0, sigma], 500];
Clear[theta, x];
theta[i_] := theta[i] = theta[i - 1] + a[[i]];
x[i_] := x[i] = x[i - 1] + P {Cos[theta[i]], Sin[theta[i]]};
theta[0] = RandomReal[{0, 2 Pi}];
x[0] = {0, 0};
For[step = 1, step < 500, step++,
r[iter, step] = x[step];
]
]
Show@Table[
ListLinePlot[Table[r[s, i], {i, 500}], PlotStyle -> ColorData[1][s],
PlotRange -> 300 {{-1, 1}, {-1, 1}}], {s, 1, 12}]
Run Code Online (Sandbox Code Playgroud)

以下代码以不同的颜色绘制了您的12个家庭,如果您将鼠标悬停在一条线上,则会在工具提示中获得sigma.
Graphics[
Table[
{x, y} = {0, 0};
p = 1;
\[Theta] = RandomReal[{-\[Pi], \[Pi]}];
Tooltip[
{
Hue[\[Sigma]/1.3],
Line[
NestList[(\[Theta] +=
RandomVariate[NormalDistribution[0, \[Sigma]]]; # +
p {Cos[\[Theta]], Sin[\[Theta]]}) &, {x, y}, 500]
]
}, \[Sigma]
],
{\[Sigma], 0.1, 1.2, 0.1}
]
]
Run Code Online (Sandbox Code Playgroud)
