Преобразование строки в недопустимое / неподдерживаемое выражение в Mathematica. - PullRequest
1 голос
/ 29 июля 2011

Мне нужно ввести переменную, скажем, var, в функцию Mathematica Series [] следующим образом: Series[A^2+B^2+C^2, var].Ряд [] имеет следующий синтаксис:

Ряд [f, {x, x_0, n}] генерирует разложение в степенной ряд для f относительно точки x = x_0 до порядка n.
Series[f, {x, x_0, n}, {y, y_0, m}, ...] последовательно находит расширения серии по x, y и т. д.

Потому что я не являюсьвсегда вычисляя Series [] в одном измерении (т. е. B и C не всегда являются переменными на каждой итерации), var должен быть правильно отформатирован в соответствии с требованиями измерения.Предостережение заключается в том, что Mathematica любит списки, поэтому любая вырожденная таблица будет иметь набор внешних {}.

Предположим, мой предыдущий код генерирует следующие два набора наборов:

table[1] = {{A, 0, n}};
таблица [2] = {{A, 0, n}, {B, 0, m}};.

Моя лучшая идея - использовать манипуляции со строками (для i = 2):

string = ToString [table [i]];.
str = StringReplacePart [string, {"", ""}, {{1}, {StringLength [string], StringLength [string]}}]

Следующим шагом являетсяпреобразуйте str в выражение типа var и выполните Series[A^2 + B^2 + C^2, var], выполнив var= ToExpression[str], но это возвращает следующую ошибку:

ToExpression :: sntx: неверный синтаксис в или перед "{A, 0, n}, {B, 0, m} ".
$ Failed

Помогите правильно преобразовать str в выражение или предложить другой способ решения этой проблемы.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Если я правильно понял, у вас есть

table[2] = {{A, 0, n}, {B, 0, m}};

и пытаемся получить от этого

Series[f[A,B],{A,0,n},{B,0,m}]

Это можно сделать с помощью Sequence, например, так (я буду использовать series вместо Series, чтобы оставить его неоцененным, чтобы вы могли видеть, что происходит):

series[f[A, B], Sequence @@ table[2]]
(*
-> series[f[A,B],{A,0,n},{B,0,m}]
*)

Например,

table[3] = {{A, 0, 2}, {B, 0, 2}};
Series[f[A, B], Sequence @@ table[3]]

дает правильное расширение серии.

1 голос
/ 29 июля 2011

Вы можете использовать First или Last или, в общем, Part, чтобы получить List, который вы хотите.Например,

var = {{x, 0, 3}, {x, 0, 5}};
Series[1/(1 + x), var[[1]]]

Out[1]= 1 - x + x^2 - x^3 + O[x]^4

Series[1/(1 + x), var[[2]]]

Out[2]= 1 - x + x^2 - x^3 + x^4 - x^5 + O[x]^6

РЕДАКТИРОВАТЬ:

Для нескольких переменных вы можете использовать SlotSequence (##) вместе с Apply (@@) примерно так:

Series[Sin[u + w], ##] & @@ {{u, 0, 3}, {w, 0, 3}}
...