在Mathematica中运行以下代码:
r=6197/3122;
p[k_,w_]:=Sqrt[w^2/r^2-k^2];q[k_,w_]:=Sqrt[w^2-k^2];
a[k_,w_,p_,q_]:=(k^2-q^2)^2 Sin[p]Cos[q]+4k^2 p q Cos[p]Sin[q]
a[k_,w_]:=a[k,w,p[k,w],q[k,w]];
ContourPlot[a[k,w]==0,{w,0,6},{k,0,14}]
这给了我非常不准确的曲线:
我已尝试将PlotPoints
的{{1}}和WorkingPrecision
选项分别设置为30和20,但无济于事。您还会注意到唯一的数字参数ContourPlot
是一个精确的有理数。我不知道还有什么可以尝试的。感谢。
编辑:我期望获得的曲线是下图中的三个黑色曲线(标记为A1,A2和A3)
答案 0 :(得分:6)
我有一些非常类似于你对l.h.s.的实部和虚部的单独绘图的期望。等式:
ContourPlot[{Re@a[k, w] == 0, Im@a[k, w] == 0}, {w, 0, 6}, {k, 0, 14},
MaxRecursion -> 7]
答案 1 :(得分:6)
您确定a
的图片和/或定义吗?根据{{1}}的定义,它遵循a
a[k,w]==0
,但该曲线未显示在您的图片中。
无论如何,假设k==w
的定义是正确的,绘制轮廓的问题是在域a
中,w^2/r^2-k^2<0
和p[k,w]
都变成了纯粹的想象这意味着Sin[p[k,w]]
也变成了纯粹的想象。由于a[k,w]
不喜欢复数值函数,因此只会绘制域ContourPlot
中轮廓的各个部分。
并非w^2/r^2>=k^2
对Sin[p[k,w]]/p[k,w]
和k
的所有值都是真实的(并且它在极限w
中表现良好)。因此,要解决p[k,w]->0
变得复杂的问题,您可以改为绘制轮廓a
:
a[k,w]/p[k,w]==0
<强>结果强>
答案 2 :(得分:3)
您的函数在您显示的等高线区域中给出复数。那是你的期望吗?你可以在这里看到真实的区域:
ContourPlot[a[k, w], {w, 0, 6}, {k, 0, 14}]
如果我使用的话,我会在某些方面更接近您的行:
ContourPlot[a[w, k] == 0, {w, 0, 6}, {k, 0, 14}]
是否可能存在转录错误?
(如果这无益,我道歉。)
答案 3 :(得分:3)
p
和q
都是非负值时, w^2 - k^2
ans w^2/r^2 - k^2
才会真正有价值。 w^2 / r^2 - k^2
只会在您的情节区域的以下区域中为非负值:
因此其他所有内容都会被ContourPlot
切断。也许你需要对方程进行一些修正(你只需要实部?幅度?)我不相信Mathematica给你的曲线是非常不准确的。否则,如果增加PlotPoints
和MaxRecursion
(例如,增加到50和4),就可以提高轮廓的准确性。
答案 4 :(得分:1)
尝试使用方程式的参数化。例如,定义a=w^2-k^2
和b=w^2/r^2-k^2
,然后求解a
和b
并将其映射到k
和w