公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
2.9k 浏览
Test1[body___, xmin_, xmax_, ymin_, ymax_, step_, AxesLab_, 
   opts : OptionsPattern[]] :=
  Plot3D[
   Abs[toPlot[body]], {x, xmin, xmax}, {y, ymin, ymax},
   ColorFunction -> 
    Function[{x, y, z}, 
     Hue[(Arg[toPlot[body]] + \[Pi])/(2 \[Pi]) , 1, 1, 1]],
   AxesLabel -> AxesLab,
   WorkingPrecision -> step,
   ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]},
   BoundaryStyle -> Directive[Red, Thick],
   PerformanceGoal -> "Quality",
   Evaluate[FilterRules[{opts}, Options[Plot3D]]]];
Test1[xmin_, xmax_, ymin_, ymax_, step_: MachinePrecision] :=
  Test1[x + I y, xmin, xmax, ymin, ymax, step, {Re[x], Im[x], Abs[y]}];

toPlot[x_] := Tan[x];
Test1[-5, 5, -5, 5, MachinePrecision]

Test2[xmin_, xmax_, ymin_, ymax_, step_, AxesLab_, 
   opts : OptionsPattern[]] :=
  Plot3D[
   Abs[toPlot[x + I y]], {x, xmin, xmax}, {y, ymin, ymax},
   ColorFunction -> 
    Function[{x, y, z}, 
     Hue[(Arg[toPlot[x + I y]] + \[Pi])/(2 \[Pi]) , 1, 1, 1]],
   AxesLabel -> AxesLab,
   WorkingPrecision -> step,
   ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]},
   BoundaryStyle -> Directive[Red, Thick],
   PerformanceGoal -> "Quality",
   Evaluate[FilterRules[{opts}, Options[Plot3D]]]];
Test2[-5, 5, -5, 5, MachinePrecision, {Re[x], Im[x], Abs[y]}]

Mathematica 8.0,同一个ColorFunction(应该是同一个,我应该没写错代码),居然出了三种结果,何解?

============================================================

改用新方法:

In[98]:= Function[{x, y, z}, #] &@(Hue[(Arg[toPlot[x + I y]] /2)*Pi + 
    0.5, 1, 1, 1])

Test4[plotBody___, colorBody___, xmin_, xmax_, ymin_, ymax_, step_, 
   AxesLab_, opts : OptionsPattern[]] :=
  Plot3D[
   plotBody, {x, xmin, xmax}, {y, ymin, ymax},
   ColorFunction -> Function[{x, y, z}, #] &@(colorBody),
   AxesLabel -> AxesLab,
   WorkingPrecision -> step,
   ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]},
   BoundaryStyle -> Directive[Red, Thick],
   PerformanceGoal -> "Quality",
   Evaluate[FilterRules[{opts}, Options[Plot3D]]]];

toPlot[x_] := Tan[x];
Test4[ Abs[toPlot[x + I*y]], 
 Hue[(Arg[toPlot[x + I y]] /2)*Pi + 0.5, 1, 1, 
  1], -5, 5, -5, 5, MachinePrecision, {Re[x], Im[x], Abs[y]}]



Out[98]= Function[{x, y, z}, 
 Hue[0.5 + 1/2 \[Pi] Arg[Tan[x + I y]], 1, 1, 1]]

\:6B63\:5728\:8BA1\:7B97In[98]:= Plot3D::pllim: Range specification (ColorFunction->Function[{x,y,z},#1]&)[Abs[Tan[x+I y]],Hue[0.5 +1/2 \[Pi] Arg[Tan[x+Times[<<2>>]]],1,1,1]] is not of the form {x, xmin, xmax}.

Out[101]= Plot3D[{x, -5, 5}, {y, -5, 
  5}, (ColorFunction -> Function[{x, y, z}, #1] &)[Abs[Tan[x + I y]], 
  Hue[0.5 + 1/2 \[Pi] Arg[Tan[x + I y]], 1, 1, 1]], 
 AxesLabel -> {Re[x], Im[x], Abs[y]}, 
 WorkingPrecision -> MachinePrecision, 
 ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]}, 
 BoundaryStyle -> Directive[Red, Thick], 
 PerformanceGoal -> "Quality", {}]
In[102]:= 
Test5[colorBody___, xmin_, xmax_, ymin_, ymax_, step_, AxesLab_, 
   opts : OptionsPattern[]] :=
  Plot3D[
   Abs[toPlot[x + I*y]], {x, xmin, xmax}, {y, ymin, ymax},
   ColorFunction -> Function[{x, y, z}, #] &@(colorBody),
   AxesLabel -> AxesLab,
   WorkingPrecision -> step,
   ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]},
   BoundaryStyle -> Directive[Red, Thick],
   PerformanceGoal -> "Quality",
   Evaluate[FilterRules[{opts}, Options[Plot3D]]]];

Test5[ Hue[(Arg[toPlot[x + I y]] /2)*Pi + 0.5, 1, 1, 
  1], -5, 5, -5, 5, MachinePrecision, {Re[x], Im[x], Abs[y]}]


\:6B63\:5728\:8BA1\:7B97In[102]:= Plot3D::nonopt: Options expected (instead of (ColorFunction->Function[{x,y,z},#1]&)[Hue[0.5 +1/2 \[Pi] Arg[Tan[x+Times[<<2>>]]],1,1,1]]) beyond position 3 in Plot3D[Abs[toPlot[x+I y]],{x,-5,5},{y,-5,5},(ColorFunction->Function[{x,y,z},#1]&)[Hue[0.5 +1/2 \[Pi] Arg[Tan[Plus[<<2>>]]],1,1,1]],AxesLabel->{Re[x],Im[x],Abs[y]},WorkingPrecision->MachinePrecision,ExclusionsStyle->{Opacity[0.5],Directive[Thick,Blue]},BoundaryStyle->Directive[Red,Thick],PerformanceGoal->Quality,{}]. An option must be a rule or a list of rules.

Out[103]= Plot3D[
 Abs[toPlot[x + I y]], {x, -5, 5}, {y, -5, 
  5}, (ColorFunction -> Function[{x, y, z}, #1] &)[
  Hue[0.5 + 1/2 \[Pi] Arg[Tan[x + I y]], 1, 1, 1]], 
 AxesLabel -> {Re[x], Im[x], Abs[y]}, 
 WorkingPrecision -> MachinePrecision, 
 ExclusionsStyle -> {Opacity[0.5], Directive[Thick, Blue]}, 
 BoundaryStyle -> Directive[Red, Thick], 
 PerformanceGoal -> "Quality", {}]

依然不能得到预期结果。

分类:绘图 | 用户: EmberEdison (806 分)
修改于 用户:EmberEdison
你怎么排版的,用的排版里的那个工具,分出了三个可以上下左右活动的代码框
在要插入代码框的上下打些字,中间按插入代码框按钮,输入代码,删除无用的字就可以了,外部的代码框不会影响被正文分割开的其他代码框

1个回答

+1 投票
 
已采纳

可是你就是写错了代码啊。

第一个你观察下

func[body_] := Function[x, body]
func@x

的结果就明白了。

这个问题的一个规避方法是

func[body_] := Function[x, #] &@body
func@x

第二个,你按下Ctrl+Shift+N再仔细看看你的Test2和Test3是不是一样。

用户: xzczd (2.2k 分)
采纳于 用户:EmberEdison
可是test4怎么改啊,为什么plotBody会串到后面的colorBoby的呢?
Test4里面plotBody和colorBody用的都是BlankNullSequence这当然会导致匹配出错(plotBody直接匹配前两个参数,colorBody匹配“无参数”)。话说这两个参数用___的意义到底在哪
终于彻底debug完成了。用_ _ _是因为之前没法处理纯函数的问题才用上看能不能弄好才加上的
ColorFunction系列的纯函数到底怎么写的?(二)
ColorFunction系列的纯函数到底怎么写的?(三)
...