Наличие параметра с нижним и верхним индексом - PullRequest
4 голосов
/ 15 ноября 2011

Я хотел бы определить объект / символ в Mathematica, который будет иметь несколько параметров, например, что-то вроде: S=(1-t)({b_i}^x,{b_i}^y)+t({b_{i+1}}^x,{b_{i+1}}^y) (вид обозначения LaTeX) В примере я пытаюсь описать отрезок, соединяющий две точки b_i и b_{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 ]

6 голосов
/ 15 ноября 2011

Я не совсем уверен, что понимаю, чего вы хотите.«Объект», о котором вы говорите

(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.Тем не менее, крайне важно, чтобы вы использовали шаблон, сгенерированный при нажатии кнопки Symbolize на палитре обозначений (вы получаете это после запуска << Notation`).Затем введите вашу составную переменную.Я буду предполагать, что верхний индекс x и y являются фиксированными символами, а индекс i s является переменным:

enter image description here


Еще одна вещь:

Возможно, не стоит использовать Subscript[b, i]^y, так как вы потеряете способность поднимать индексированные переменные до степени x и y (небольшая потеря, но все же).Вместо этого вы можете использовать Subsuperscript[b,i,y].Обратите внимание, что предложение в части «Дополнительная информация» на странице Subsuperscript документации явно неверно .Там написано:

Чтобы ввести нижний индекс в блокноте, используйте либо Ctrl + _, чтобы начать обычный индекс, либо Ctrl + ^, чтобы начать обычный верхний индекс.После ввода первого скрипта используйте Ctrl +%, чтобы перейти в противоположную позицию скрипта.Ctrl + Пробел перемещается из позиции нижнего или верхнего индекса.

Если вы сделаете FullForm на результирующем объекте, вы увидите, что вместо этого вы сделали Subscript[b, i]^y.Чтобы получить символ для вставки в шаблон Symbolize, я не вижу другого решения, кроме ввода Subsuperscript[b, i_, y], оценки и копирования результата в шаблон.

1 голос
/ 16 ноября 2011

В дополнение к ответу Шёрда: Поскольку вы говорите, что символ 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}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...