Sas*_*sha 11 wolfram-mathematica
假设我编写了一个黑盒函数,它以数字方式评估昂贵的复数值函数,然后返回实部和虚部.
fun[x_?InexactNumberQ] := Module[{f = Sin[x]}, {Re[f], Im[f]}]
Run Code Online (Sandbox Code Playgroud)
然后我可以像往常一样在Plot中使用它,但是Plot不能识别该函数返回一对,并且颜色两者都是相同的颜色.如何告诉Mathematica指定的函数总是返回一个固定长度的向量?或者这个情节怎么样?

编辑:鉴于试图回答问题的尝试,我认为只有在样式作为获得的图形的后处理执行时,避免双重重新评估才有可能.最有可能的是以下不健壮,但它似乎适用于我的例子:
gr = Plot[fun[x + I], {x, -1, 1}, ImageSize -> 250];
k = 1;
{gr, gr /. {el_Line :> {ColorData[1][k++], el}}}
Run Code Online (Sandbox Code Playgroud)

一种可能性是:
Plot[{#[[1]], #[[2]]}, {x, -1, 1}, PlotStyle -> {{Red}, {Blue}}] &@ fun[x + I]
Run Code Online (Sandbox Code Playgroud)

编辑
如果你的函数不是真的光滑(即几乎是线性的!),有没有什么可以做,以防止双重评估过程,因为它会发生(在某种程度上)反正由于情节[]网探索算法的性质.
例如:
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]
Run Code Online (Sandbox Code Playgroud)
