【问题标题】:Having a parameter with subscript and superscript有一个带有下标和上标的参数
【发布时间】:2011-11-15 13:44:19
【问题描述】:

我想在mathematica 中定义一个对象/符号,它将有几个参数,例如:S=(1-t)({b_i}^x,{b_i}^y)+t({b_{i+1}}^x,{b_{i+1}}^y)(某种 LaTeX 表示法)。在示例中,我试图描述连接两个点 b_ib_{i+1} 的线段。

如何在mathematica中定义这样的对象?

我发现了以下两个问题:

但我不确定我是否正确使用它们。我所做的是以下。首先我调用了:

Needs["Notation`"];

Symbolize[
ParsedBoxWrapper[
SubscriptBox["\[SelectionPlaceholder]", "\[Placeholder]"]]]

Symbolize[
ParsedBoxWrapper[
SuperscriptBox["\[SelectionPlaceholder]", "\[Placeholder]"]]]

然后,我实际上定义了对象:

(1 - t) {Subscript[b, i]^x, Subscript[b, i]^y} + 
 t {Subscript[b, i + 1]^x, Subscript[b, i + 1]^y}

这是做我想做的事情的正确方法吗?

【问题讨论】:

  • 我也很难理解这个问题。

标签: wolfram-mathematica


【解决方案1】:

我不完全确定我明白你想要什么。你所说的“对象”

(1 - t) {Subscript[b, i]^x, Subscript[b, i]^y} + 
 t {Subscript[b, i + 1]^x, Subscript[b, i + 1]^y}

并不是真正的单个实体,而是两个列表的总和,每个列表由两个组件组成。所以,我假设你真的想将Subscript[b, i]^x 定义为一个符号。

您可以使用 Notation 包中的 Symbolize 执行此操作。不过,使用在 Notation 面板上按下 Symbolize 按钮时生成的模板绝对至关重要(运行 << Notation` 时会得到此信息)。然后输入您的复合变量。我假设上标 x 和 y 是固定符号,而下标 is 是可变的:


还有一件事:

使用Subscript[b, i]^y 可能不是一个好主意,因为您将失去将下标变量提高到 x 和 y 次幂的能力(损失很小,但仍然如此)。相反,您可能想使用Subsuperscript[b,i,y]。请注意,Subsuperscript 文档页面的“更多信息”部分中的句子似乎显然是错误的。它说:

要在笔记本中输入下标,请使用 Ctrl+_ 开始 正则下标或 Ctrl+^ 开始正则上标。后 键入第一个脚本,使用 Ctrl+% 移动到相反的脚本 位置。 Ctrl+Space 移出下标或上标 位置。

如果您对生成的对象执行FullForm,您会看到您已经创建了Subscript[b, i]^y。要获取符号以粘贴到符号化模板中,除了键入 Subsuperscript[b, i_, y]、评估并将结果复制到模板之外,我没有其他解决方案。

【讨论】:

  • @Simon 对不起,我不太明白
  • 文档并没有明显错误,它只是没有说明整个故事。按照文档中的击键将产生一个Subsuperscriptbox,这就是 Notation 包将看到的。但是,默认情况下,Mma 将其解释为 Power[Subscript[..]],这通常是您想要的。当您在输入中创建 use Subsuperscript 时,Mma 通过创建 InterpretationBox[SubsuperscriptBox[...], Subsuperscript[...], Editable->False]] 来保护它免受标准解释的影响,而 Editable->False 位很烦人。
【解决方案2】:

进一步 Sjoerd 的回答:既然你说符号 S 接受各种参数,我想你可能想探索SetDelayed 方法来定义一个带参数的函数。假设您确实希望 S 具有两个点的向量值,那么类似下面的内容将以您想要的方式定义 S

S[x_,y_,t_,i_]:= (1-t) * {b[i]^x,b[i]^y} + t * {(b[i+1])^x,(b[i+1])^y}

那么问题是你是否真的需要下标。 Sjoerd 的回答显示了如何使用 Notation 包完成此操作,但您应该考虑这种额外的复杂性是否对您的分析是必要的。

编辑以回应 rcollyer 非常有用的评论 您可以使用Format 为自定义函数定义TraditionalForm 表示。这类似于定义UpValues,但与表示而非重写规则有关。

类似下面的东西应该可以工作:

Format[S[x_,y_,t_,i_],TraditionalForm] := 
  (1 - t) {Subscript[b, i]^x, Subscript[b, i]^y} +         
  t {Subscript[b, i + 1]^x, Subscript[b, i + 1]^y}  

【讨论】:

猜你喜欢
  • 2020-01-19
  • 2013-06-18
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多