有一个带下标和上标的参数

时间:2011-11-15 13:44:20

标签: wolfram-mathematica

我想在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}

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

2 个答案:

答案 0 :(得分:6)

我不完全确定我明白你想要什么。你正在谈论的“对象”

(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定义为一个符号。

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

enter image description here


还有一件事:

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

  

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

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

答案 1 :(得分:1)

继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}