如何在 Mathematica 中计算和绘制瞬时相位

Posted

技术标签:

【中文标题】如何在 Mathematica 中计算和绘制瞬时相位【英文标题】:How to calculate and plot instantaneous phase in Mathematica 【发布时间】:2011-02-15 08:30:18 【问题描述】:

我想要一个扫频驱动器和它所驱动的非线性振荡器之间的瞬时相位差图。下面的 x[t] 是振荡器的瞬时位移,而 plotx 提供了一个绘图。

谢谢, 凯莉

s =
 NDSolve[x''[t] + x[t] - 0.167 x[t]^3 == 
    0.005 Cos[t - 0.5*0.0000652*t^2], x[0] == 0, x'[0] == 0, 
  x, t, 0, 3000, MaxSteps -> 35000]

plotx = Plot[Evaluate[x[t] /. s], t, 0, 3000, PlotPoints -> 10000, 
  Frame -> True, True, False, False, FrameLabel -> "t", "x", 
  FrameStyle -> Directive[FontSize -> 15], PlotLabel -> "(a)", 
  Axes -> False]

【问题讨论】:

到目前为止你尝试过什么?我认为previous answers给你的一些代码可以用来找到转折点,从而估计振荡器的相位。 我想您可以使用较少的“物理学”行话,让非物理学家 Mma 用户有机会了解您的问题。清楚地展示什么是刺激,什么是反应。 【参考方案1】:

(响应,取 2)

你可以得到一个合理的相位近似值

f[tt_?NumericQ] := -(ArcTan @@ (x[t], x'[t]/
    Sqrt[x[t]^2 + x'[t]^2]) /. s[[1]]) /. t -> tt

这里有一些情节。首先我们一起展示驱动项和结果。这表明它们有点反相。

plotx2 = Plot[
  Evaluate[x[t], Cos[t - 0.5*0.0000652*t^2]/5 /. s], t, 0, 100, 
  Frame -> True, True, False, False, FrameLabel -> "t", "x"]

现在我们一起展示这两个阶段。这次我绘制的范围略有不同。

phaseangles = 
 Plot[f[t], Mod[t - 0.5*0.0000652*t^2, 2*Pi, -Pi], t, 100, 120, 
  Frame -> True, True, False, False, FrameLabel -> "t", "x"]

最后我们展示相位差。

phasediffs = 
 Plot[f[t] - Mod[t - 0.5*0.0000652*t^2, 2*Pi, -Pi], t, 100, 120, 
  Frame -> True, True, False, False, FrameLabel -> "t", "x"]

可能我被一些附加的东西弄糊涂了(那些 Mod[] 术语会很麻烦),但这应该让我知道如何进行。

丹尼尔·利希特布劳 Wolfram 研究

【讨论】:

感谢 Daniel 提供的非常有用的详细信息。 嗨丹尼尔,你的建议很有效。关于近似相位方法的问题: f[tt_?NumericQ] := -(ArcTan @@ (x[t], x'[t]/ Sqrt[x[t]^2 + x'[t] ^2]) /.s[[1]]) /. t -> tt。我知道相位可以近似为反正切(正交信号/同相信号)。为什么不能简单地将其近似为 arctan (x'[t]/x[t])) 而不是 arctan((x'[t]/ Sqrt[x[t]^2 + x'[t]^2 ]))/x[t]),即为什么 x'[t] 除以信号三角形的斜边(x=相邻边,x'=对边)给出相角在分子中的 cos arctan 论证?谢谢,凯莉 @Cary 我认为分母是一些早期尝试的保留,可能是为了防止除以零问题。从我在快速测试中可以看出,当前的代码似乎没有必要。我应该补充一点,如果它在 1-arg ArcTan 中,它会弄乱结果。在 2-arg 变体中,它有效地自行取消,因此不会造成任何伤害。【参考方案2】:

我会非常仔细地查看method of averaging。在Strogatz's implementation 中,找到了非线性振荡器的平均包络和相位。由于您正在寻找超出一阶订单的内容,因此我会考虑查看来自空军学院的paper。

【讨论】:

嗨 rcollyer,感谢您提供关于平均的论文的链接。 @Carey,不客气。出于好奇,你在做什么? @rcollyer,我正在做关于共振强迫非线性振荡器的博士研究。 @Carey,我有一节课使用 Strogatz 的书,其中一些内容非常有趣。 @rcollyer,我的非线性动力学课程也使用了 Strogatz 的书。这是一本极好的文本,但仅简要讨论了像我正在研究的那些强制(非自治)系统。 Mathematica 在符号计算方面是无与伦比的,但我发现 R 对其他一切都非常好,特别是因为它现在具有良好的 ODE 求解器和时间序列包。

以上是关于如何在 Mathematica 中计算和绘制瞬时相位的主要内容,如果未能解决你的问题,请参考以下文章

如何使用mathematica同时绘制出曲线和散点?

图形中的 ConvexHull - Mathematica

mathematica画三维曲面

mathematica 绘制出一个图形中多条曲线,怎么在每条曲线旁边添加文本注释?

Mathematica或者origin或者excel ,如何绘制二项分布的曲线

Mathematica 和 MATLABMaple 并称为三大数学软件