告诉 Plot 在 Mathematica 中设置向量值黑盒函数的样式

2023-11-22

假设我编写一个黑盒函数,它对一个昂贵的复值函数进行数值计算,然后返回实部和虚部。

fun[x_?InexactNumberQ] := Module[{f = Sin[x]}, {Re[f], Im[f]}]

然后我可以像往常一样在 Plot 中使用它,但 Plot 无法识别该函数返回一对,并且两条曲线的颜色相同。如何告诉 Mathematica 指定的函数始终返回固定长度的向量?或者如何设计这个情节?

screen-shot of plot with both curves being the same color

EDIT:鉴于尝试回答该问题,我认为只有在将样式作为所获得图形的后处理来执行时,才可能避免双重重新评估。以下很可能并不可靠,但它似乎适用于我的示例:

gr = Plot[fun[x + I], {x, -1, 1}, ImageSize -> 250];
k = 1;
{gr, gr /. {el_Line :> {ColorData[1][k++], el}}}

two images, one with styling applied


一种可能性是:

Plot[{#[[1]], #[[2]]}, {x, -1, 1}, PlotStyle -> {{Red}, {Blue}}] &@ fun[x + I]  

enter image description here

Edit

如果你的功能不是really平滑(即几乎线性!),您无法采取太多措施来防止双重评估过程,因为由于 Plot[] 网格探索算法的性质,它无论如何都会发生(某种程度上)。

例如:

fun[x_?InexactNumberQ] := Module[{f = Sin[3  x]}, {Re[f], Im[f]}];
Plot[{#[[1]], #[[2]]}, {x, -1, 1}, Mesh -> All, 
   PlotStyle -> {{Red}, {Blue}}] &@fun[x + I]  

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

告诉 Plot 在 Mathematica 中设置向量值黑盒函数的样式 的相关文章

随机推荐