gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中绘制数轴

转载 作者:行者123 更新时间:2023-12-04 02:50:54 27 4
gpt4 key购买 nike

我想在 Mathematica 的数轴上绘制一个简单的区间。我该怎么做呢?

最佳答案

这是使用更传统的白色和黑色圆圈绘制数字线的另一种尝试,尽管您可以轻松替换您想要的任何图形元素。

它依赖于 LogicalExpand[Simplify@Reduce[expr, x]]Sort将表达式变成类似于替换规则可以处理的规范形式的东西。这没有经过广泛的测试,可能有点脆弱。例如,如果给定 expr减少到 TrueFalse ,我的代码没有优雅地死去。

numLine[expr_, x_Symbol:x, range:{_, _}:{Null, Null}, 
Optional[hs:_?NumericQ, 1/30], opts:OptionsPattern[]] :=
Module[{le = {LogicalExpand[Simplify@Reduce[expr, x]]} /. Or -> List,
max, min, len, ints = {}, h, disk, hArrow, lt = Less|LessEqual, gt = Greater|GreaterEqual},
If[TrueQ@MatchQ[range, {a_, b_} /; a < b],
{min, max} = range,
{min, max} = Through[{Min, Max}@Cases[le, _?NumericQ, \[Infinity]]]];
len =Max[{max - min, 1}]; h = len hs;
hArrow[{x1_, x2_}, head1_, head2_] := {{Thick, Line[{{x1, h}, {x2, h}}]},
Tooltip[head1, x1], Tooltip[head2, x2]};
disk[a_, ltgt_] := {EdgeForm[{Thick, Black}],
Switch[ltgt, Less | Greater, White, LessEqual | GreaterEqual, Black],
Disk[{a, h}, h]};
With[{p = Position[le, And[_, _]]},
ints = Extract[le, p] /. And -> (SortBy[And[##], First] &);
le = Delete[le, p]];
ints = ints /. (l1 : lt)[a_, x] && (l2 : lt)[x, b_] :>
hArrow[{a, b}, disk[a, l1], disk[b, l2]];
le = le /. {(*_Unequal|True|False:>Null,*)
(l : lt)[x, a_] :> (min = min - .3 len;
hArrow[{a, min}, disk[a, l],
Polygon[{{min, 0}, {min, 2 h}, {min - Sqrt[3] h, h}}]]),
(g : gt)[x, a_] :> (max = max + .3 len;
hArrow[{a, max}, disk[a, g],
Polygon[{{max, 0}, {max, 2 h}, {max + Sqrt[3] h, h}}]])};
Graphics[{ints, le}, opts, Axes -> {True, False},
PlotRange -> {{min - .1 len, max + .1 len}, {-h, 3 h}},
GridLines -> Dynamic[{{#, Gray}} & /@ MousePosition[
{"Graphics", Graphics}, None]],
Method -> {"GridLinesInFront" -> True}]
]

(注意:我最初尝试使用 ArrowArrowheads 来绘制线条 - 但由于 Arrowheads 会根据包含图形的宽度自动重新缩放箭头,这让我很头疼。)

好的,举几个例子:
numLine[0 < x], 
numLine[0 > x]
numLine[0 < x <= 1, ImageSize -> Medium]

enter image description here
enter image description here
enter image description here
numLine[0 < x <= 1 || x > 2, Ticks -> {{0, 1, 2}}]

enter image description here
numLine[x <= 1 && x != 0, Ticks -> {{0, 1}}]

enter image description here
GraphicsColumn[{
numLine[0 < x <= 1 || x >= 2 || x < 0],
numLine[0 < x <= 1 || x >= 2 || x <= 0, x, {0, 2}]
}]

enter image description here

编辑:让我们将上面的结果与 Wolfram|Alpha 的输出进行比较
WolframAlpha["0 < x <= 1 or x >= 2 or x < 0", {{"NumberLine", 1}, "Content"}]
WolframAlpha["0 < x <= 1 or x >= 2 or x <= 0", {{"NumberLine", 1}, "Content"}]

output of the above

请注意(在 Mathematica session 或 W|A 网站中查看上述内容时)重要点上的精美工具提示和灰色动态网格线。我窃取了这些想法并将它们合并到编辑过的 numLine[] 中。上面的代码。
WolframAlpha 的输出不太正常 Graphics对象,因此很难修改其 Options或结合使用 Show .要查看 Wolfram|Alpha 可以返回的各种数轴对象,请运行 WolframAlpha["x>0", {{"NumberLine"}}] - “内容”、“单元格”和“输入”都返回基本相同的对象。无论如何,要从中获取图形对象
wa = WolframAlpha["x>0", {{"NumberLine", 1}, "Content"}]

例如,您可以运行
Graphics@@First@Cases[wa, GraphicsBox[__], Infinity, 1]

然后我们可以修改图形对象,将它们组合成一个网格,得到

aligned

关于wolfram-mathematica - 在 Mathematica 中绘制数轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com