24小时热门版块排行榜    

查看: 2153  |  回复: 11

kabaisun

专家顾问 (正式写手)

[求助] 使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重 已有1人参与

想画出一隐函数的等值线图,代码如下:
CODE:
a = 0; b = 10; ContourPlot[{y + 3 ArcTan[y/(x - a)]}/20, {x, -b,
  b}, {y, -b, b}, Exclusions -> {x == a}, PlotPoints -> 50,
ContourStyle -> {Red}, Frame -> True, Axes -> True,
ContourShading -> None, PlotLegends -> {"\[Psi](x,y)"}]

由于有间断点,设置Exclusions 指定,图中在此间断点两侧(图中为Y轴)的等高线应该相连才正确,这个错位怎么调整?一直没想出来。。

使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重
平面无旋流叠加图.png
回复此楼
严实诚勇
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
kabaisun: 金币+15, ★★★★★最佳答案 2015-01-08 13:50:39
很遗憾,如果你坚持要用这个方程,那么这就是个不可能的任务,因为ContourPlot忠实地画出了你输入的东西:
CODE:
a = 0;
Limit[y + 3 ArcTan[y/(x - a)], x -> 0, Direction -> #] & /@ {-1, 1}
(* {y + (3 \[Pi] Sqrt[y^2])/(2 y), y - (3 \[Pi] Sqrt[y^2])/(2 y)} *)

如你所见,这里左右极限不等,本来就是间断的。好了我睡觉去了——正当我这么想的时候我突然反应过来了。说的具体一点,就是我明白你其实是想要做什么了。你所需要的其实不是ArcTan,而是Arg(复数幅角):
CODE:
a = 0; b = 10;
ContourPlot[{y + 3 Arg[(x - a) + I y]}/20, {x, -b, b}, {y, -b, b},
  ContourStyle -> Red, Frame -> True, Axes -> True,
  ContourShading -> None] /.
Graphics[a__] :>
  Legended[Graphics[a],
   Placed[LineLegend[{Red}, {"\[Psi](x,y)"}], After]]

使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重-1

注意现在Exclusions和PlotPoints也用不着了。因为奇点消失了。

» 本帖已获得的红花(最新10朵)

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
2楼2015-01-07 22:28:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kabaisun

专家顾问 (正式写手)

送红花一朵
引用回帖:
2楼: Originally posted by xzczd at 2015-01-07 22:28:07
很遗憾,如果你坚持要用这个方程,那么这就是个不可能的任务,因为ContourPlot忠实地画出了你输入的东西:

a = 0;
Limit & /@ {-1, 1}
(* {y + (3 \ Sqrt)/(2 y), y - (3 \ Sqrt)/(2 y)} *)


如你所见 ...

错位纠正了,还有一个疑问:ArcTan求角度和Arg求的不一样吗?
严实诚勇
3楼2015-01-07 23:00:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kabaisun

专家顾问 (正式写手)

引用回帖:
2楼: Originally posted by xzczd at 2015-01-07 22:28:07
很遗憾,如果你坚持要用这个方程,那么这就是个不可能的任务,因为ContourPlot忠实地画出了你输入的东西:

a = 0;
Limit & /@ {-1, 1}
(* {y + (3 \ Sqrt)/(2 y), y - (3 \ Sqrt)/(2 y)} *)


如你所见 ...

如果方程中不止这个幅角函数有间断点,还有对数函数,如下面代码中的方程,这个错位可以调整吗?
CODE:
z1 = -(0.5*Log[x^2 + y^2] - Arg[x + y I])/(2 Pi);
ContourPlot[{z1}/300, {x, -10, 10}, {y, -10, 10},
ContourStyle -> {Red}, Frame -> True, Axes -> False,
ContourShading -> None,
Exclusions -> {x == 0, y == 0}, PlotPoints -> 50]

使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重-2
平面无旋流叠加图.png

严实诚勇
4楼2015-01-07 23:31:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

引用回帖:
3楼: Originally posted by kabaisun at 2015-01-07 23:00:15
错位纠正了,还有一个疑问:ArcTan求角度和Arg求的不一样吗?...

你仔细回忆一下ArcTan的数学定义。实在记不清的话就画个图看看。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
5楼2015-01-08 09:42:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

引用回帖:
4楼: Originally posted by kabaisun at 2015-01-07 23:31:20
如果方程中不止这个幅角函数有间断点,还有对数函数,如下面代码中的方程,这个错位可以调整吗?
z1 = -(0.5*Log - Arg)/(2 Pi);
ContourPlot

平面无旋流叠加图.png
...

……跟Log没关系,这是极端条件下的数值误差。(楼主你很有才能啊,这么短时间内能踩出这么多雷。)嗯,有意思,WorkingPrecision选项对这种情况似乎无效。对于你这个问题,最简单的方法,就是别除那个300。除不除产生的等高线在理论上都是一样的。(不信你用Plot3D看一下。)但是你这个式子除了300之后数字太小,导致了绘图时的数值误差。至于怎么通过选项调节来解决这个问题,我暂时没想到。

» 本帖已获得的红花(最新10朵)

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
6楼2015-01-08 10:26:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kabaisun

专家顾问 (正式写手)

送红花一朵
引用回帖:
6楼: Originally posted by xzczd at 2015-01-08 10:26:41
……跟Log没关系,这是极端条件下的数值误差。(楼主你很有才能啊,这么短时间内能踩出这么多雷。)嗯,有意思,WorkingPrecision选项对这种情况似乎无效。对于你这个问题,最简单的方法,就是别除那个300。除不除 ...

我猜也是数值误差的原因。
严实诚勇
7楼2015-01-08 13:43:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kabaisun

专家顾问 (正式写手)

引用回帖:
5楼: Originally posted by xzczd at 2015-01-08 09:42:49
你仔细回忆一下ArcTan的数学定义。实在记不清的话就画个图看看。...

差别可能只在原点处,arctan(0)是间断点,而arg不是。
严实诚勇
8楼2015-01-08 13:49:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

引用回帖:
8楼: Originally posted by kabaisun at 2015-01-08 13:49:46
差别可能只在原点处,arctan(0)是间断点,而arg不是。...

……不,ArcTan值域是-Pi/2到Pi/2,所以你转了半圈就又循环回去了,导致图像错位。Arg不一样,可以转够一圈。所以说你画下图就都明白了:
CODE:
(* 注意值域 *)
Plot3D[ArcTan[y/x], {x, -10, 10}, {y, -10, 10}]

使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重-3
CODE:
(* 注意值域 *)
Plot3D[Arg[x + I y], {x, -10, 10}, {y, -10, 10}]

使用contourplot画图,当用Exclusions设置间断点时两侧的等高线错位严重-4
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
9楼2015-01-08 14:05:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kabaisun

专家顾问 (正式写手)

引用回帖:
9楼: Originally posted by xzczd at 2015-01-08 14:05:16
……不,ArcTan值域是-Pi/2到Pi/2,所以你转了半圈就又循环回去了,导致图像错位。Arg不一样,可以转够一圈。所以说你画下图就都明白了:



(* 注意值域 *)
Plot3D

(* 注意值域 *)
Plot3D
...

在xy平面上,从x正轴开始逆时针ArcTan的值域是0到Pi/2,在y正轴时跳到负极值-Pi/2,这样产生了错位。而Arg是从0到PI,在x半轴要跳到-PI,也错位一次,到正轴时回到起点。你也没说对全部。
严实诚勇
10楼2015-01-08 14:53:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kabaisun 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 职称评审,求友友推荐见刊最快的期刊 +4 工厂打螺丝 2026-08-08 4/200 2026-08-12 09:18 by hansi2025
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +7 布布和一二 2026-08-10 10/500 2026-08-12 09:12 by 布布和一二
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +8 Tide man 2026-08-10 9/450 2026-08-11 20:39 by beefly
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[硕博家园] 读博的好处 +3 lnee 2026-08-11 3/150 2026-08-11 18:10 by 希望我好好的
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 分享一下我之前已中青C的计划书的filecode +3 布布和一二 2026-08-11 4/200 2026-08-11 15:20 by aasahr
[基金申请] FileCode能看出啥? +7 要乐观耀哥 2026-08-10 17/850 2026-08-11 10:50 by 要乐观耀哥
[基金申请] filecode +9 documentary 2026-08-10 9/450 2026-08-11 10:08 by wk7465
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 这样的filecode谁见过 +11 布布和一二 2026-08-08 22/1100 2026-08-10 11:10 by wmfsnow
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 关于豆爷回答的JTJC与%2F数量 +5 yang182083 2026-08-06 7/350 2026-08-08 18:29 by zhanghaozhu
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 化学口download_prp&fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
信息提示
请填处理意见