gpt4 book ai didi

dynamic - 将 Dynamic[] 构造转换为数字列表

转载 作者:行者123 更新时间:2023-12-04 12:01:17 28 4
gpt4 key购买 nike

我一直在尝试整理一些东西,使我可以从 ListPlot 中提取点,以便在进一步的计算中使用它们。我目前的方法是使用 Locator[] 选择点。这适用于显示点,但我无法弄清楚如何从带有 head Dynamic[] 的构造中提取数值。下面是一个独立的例子。通过拖动灰色定位器,您应该能够选择点(由粉红色定位器指示并存储在 q 中,两个元素的列表)。这是情节下方的第二行。现在我想将 q[[2]] 传递给一个函数,或者只是显示它。但是,Mathematica 处理 q作为具有头部的单个实体 Dynamic ,因此不可能采取第二部分(因此出现错误消息)。任何人都可以阐明如何转换q进入常规列表?

EuclideanDistanceMod[p1_List, p2_List, fac_: {1, 1}] /; 
Length[p1] == Length[p2] :=
Plus @@ (fac.MapThread[Abs[#1 - #2]^2 &, {p1, p2}]) // Sqrt;
test1 = {{1.`, 6.340196001221532`}, {1.`,
13.78779876355869`}, {1.045`, 6.2634018978377295`}, {1.045`,
13.754947081416544`}, {1.09`, 6.178367702583522`}, {1.09`,
13.72055251752498`}, {1.135`, 1.8183153704413153`}, {1.135`,
6.082497198000075`}, {1.135`, 13.684582525399742`}, {1.18`,
1.6809452373465104`}, {1.18`, 5.971583107298081`}, {1.18`,
13.646996905469383`}, {1.225`, 1.9480537697339537`}, {1.225`,
5.838386922625636`}, {1.225`, 13.607746407088161`}, {1.27`,
2.1183174369679234`}, {1.27`, 5.669799095595362`}, {1.27`,
13.566771130126131`}, {1.315`, 2.2572975468163463`}, {1.315`,
5.444014254828522`}, {1.315`, 13.523998701347882`}, {1.36`,
2.380307009155079`}, {1.36`, 5.153024664297602`}, {1.36`,
13.479342200528283`}, {1.405`, 2.4941312539733285`}, {1.405`,
4.861423833512566`}, {1.405`, 13.432697814928654`}, {1.45`,
2.6028066447609426`}, {1.45`, 4.619367407525507`}, {1.45`,
13.383942212133244`}};
DynamicModule[{p = {1.2, 10}, q = {1.3, 11}},
q := Dynamic@
First@test1[[
Ordering[{#, EuclideanDistanceMod[p, #, {1, .1}]} & /@ test1,
1, #1[[2]] < #2[[2]] &]]];
Grid[{{Show[{ListPlot[test1, Frame -> True, ImageSize -> 300],
Graphics@Locator[Dynamic[p]],
Graphics@
Locator[q, Appearance -> {Small},
Background -> Pink]}]}, {Dynamic@p}, {q},{q[[2]]}}]]

最佳答案

有几种方法可以从动态表达式中提取值。你可能想要的是 Setting (documentation) ,它将所有动态值解析为它们在时间 Setting 时的值被评估。

In[75]:= Slider[Dynamic[x]] (* evaluate then move the slider *)

In[76]:= FullForm[Dynamic[x]]
Out[76]//FullForm= Dynamic[x]

In[77]:= FullForm[Setting[Dynamic[x]]]
Out[77]//FullForm= 0.384`

这是一个稍微复杂一点的例子:
DynamicModule[{x},
{Dynamic[x], Slider[Dynamic[x]],
Button["Set y to the current value of x", y = Setting[Dynamic[x]]]}
]

如果计算上述表达式,移动 slider 然后单击按钮,当前值为 x由 slider 设置分配给 y .如果您再次移动 slider , y 的值在您通过单击按钮再次更新之前不会更改。

您当然可以将值粘贴到笔记本中,调用函数,导出文件等,而不是分配给变量。

关于dynamic - 将 Dynamic[] 构造转换为数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777997/

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