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

Wolfram mathematica 如何在Mathematica中计算和绘制瞬时相位,wolfram-mathematica,Wolfram Mathematica,我想画一幅频率扫描驱动器和它所驱动的非线性振荡器之间的瞬时相位差图。下面的x[t]是振荡器的瞬时位移,图x提供了一个图 谢谢, 凯里 我会非常仔细地看这张照片。在本文中,我们找到了非线性振荡器的平均包络和相位。既然你正在寻找一些超出第一顺序的东西,我会考虑从空军学院看这个。 < P>(响应,占2) 你可以得到相位的合理近似值 f[tt_?NumericQ] := -(ArcTan @@ ({x[t], x'[t]}/ Sqrt[x[t]^2 + x'[t]^2]) /. s[[1]])

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

谢谢, 凯里


我会非常仔细地看这张照片。在本文中,我们找到了非线性振荡器的平均包络和相位。既然你正在寻找一些超出第一顺序的东西,我会考虑从空军学院看这个。

< P>(响应,占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 Research

到目前为止,您尝试了什么?我认为中提供给你的一些代码可以用来找到转折点,从而估计振荡器的相位。我想你可以使用较少的“物理”术语,让非物理学家Mma用户有机会理解你的问题。清楚地展示什么是刺激,什么是反应。嗨,科莱尔,谢谢你链接到关于平均的论文。@Carey,不客气。出于好奇,你在做什么?@rcollyer,我正在做共振强迫非线性振荡器的博士研究。@Carey,我用Strogatz的书上了一节课,其中一些内容非常有趣。@rcollyer,我的非线性动力学课程也用了Strogatz的书。这是一篇很好的文章,但只是简单地讨论了我正在研究的强迫(非自治)系统。Mathematica在符号计算方面是无与伦比的,但我发现R在其他方面都非常好,特别是因为它现在有很好的ODE解算器和时间序列包。感谢Daniel提供的非常有用的细节。嗨Daniel,你的建议很有效。关于近似相位的方法的问题:f[tt?NumericQ]:=-(ArcTan@({x[t],x'[t]}/Sqrt[x[t]^2+x'[t]^2])/.s[[1]])/。t->tt。我知道相位可以近似为arctan(正交信号/同相信号)。为什么不能简单地将其近似为arctan(x'[t]/x[t]),而不是arctan((x'[t]/Sqrt[x[t]^2+x'[t]^2])/x[t]),也就是说,为什么x'[t]除以信号三角形(x=相邻边,x'=对边)的次边,给出了arctan参数分子中相位角的cos?谢谢Carey@Cary我认为分母是早期尝试的遗留物,可能是为了防止零问题的分裂。从快速测试中我可以看出,对于当前的代码来说,这似乎是不必要的。我应该补充一点,如果它是在1-arg ArcTan中,它会把结果搞砸。在2-arg变体中,它有效地自行取消,因此不会造成伤害。
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"}]