在 Matlab 中使用 syms 变量更改绘图结果

Eli*_*s4l 5 variables matlab plot

我正在尝试一个关于使用 fsurf 的示例,该示例使用此步骤中的代码(使用 Matlab 绘制由平面包围的圆柱体)。

\n

当我更改声明的 syms 变量的名称时,问题就出现了,图表的输出完全改变了,我不\xc2\xb4t真正理解这一点。\n这是使用原始代码的输出:

\n
symObj = syms;\ncellfun(@clear,symObj)\nclear all \nclose all\nsyms r t u\nfsurf(cos(r),sin(r),u*(cos(r)+2),[0,2*pi,0,1])\nhold on\nfsurf(r*cos(t),r*sin(t),r*cos(t)+2,[0,1,0,2*pi],\'FaceColor\',\'r\')\nrotate3d on\n
Run Code Online (Sandbox Code Playgroud)\n

fsurf 结果:
\nfsurf 结果

\n

这是同一个示例,其中我仅将声明变量中的变量名称“t”更改为“phi”以及使用它的三个位置:

\n
symObj = syms;\ncellfun(@clear,symObj)\nclear all \nclose all\nsyms r phi u\nfsurf(cos(r),sin(r),u*(cos(r)+2),[0,2*pi,0,1])\nhold on\nfsurf(r*cos(phi),r*sin(phi),r*cos(phi)+2,[0,1,0,2*pi],\'FaceColor\',\'r\')\nrotate3d on\n
Run Code Online (Sandbox Code Playgroud)\n

具有替代变量名称的 fsurf 结果:
\n具有替代变量名称的 fsurf 结果

\n

Cri*_*ngo 4

我目前没有安装符号工具箱来测试这一点,但我认为这就是问题所在:fsurf给出两个间隔来绘制为单个向量:[0,1,0,2*pi]。一个变量的范围是 0 到 1,另一个变量的范围是 0 到 2 pi。但是每个区间会给出哪个变量呢?

\n

由于函数调用中没有明确的变量排序,因此所fsurf能做的就是按字母顺序对它们进行排序。通常人们使用 x 和 y,或者 u 和 v,它们按字母顺序排序。请注意,您最初声明变量的顺序不会记录在 MATLAB 中的任何位置,只能通过检查运行来声明这些变量的源代码来恢复此信息。fsurf\xe2\x80\x99 肯定不知道你思考这些变量的顺序。

\n

第一个代码使用变量 r 和 t,第二个代码使用 phi 和 r。如果我的猜测是正确的,那么交换间隔数组中两个间隔的顺序应该可以解决您的问题。

\n