我需要像这样在Mathematica函数Series[]中输入一个变量,比如var
: Series[A^2+B^2+C^2, var]
。Series[]的语法如下:
Series[f, {x, x_0, n}]生成f关于点x=x_0到n阶的幂级数展开式。
系列[f, {x, x_0, n}, {y, y_0, m},…]]依次求关于x的级数展开式,然后求关于y的级数展开式,等等
因为我并不总是在一个维度上计算Series[](即,B
和C
在每次迭代中并不总是变量),var
必须正确格式化以适应维度需求。需要注意的是Mathematica喜欢列表,所以任何退化的表都会有一组外部{}
。
table[1]= {{A, 0, n}};
table[2]= {{A, 0, n}, {B, 0, m}};.
我最好的想法是使用字符串操作(对于i= 2):
string = ToString[table[i]];
。str = StringReplacePart[string, {" ", " "}, {{1}, {StringLength[string], StringLength[string]}}]
下一步是将str
转换为类似var
的表达式,并通过执行var= ToExpression[str]
来执行Series[A^2 + B^2 + C^2, var]
,但这会返回以下错误:
ToExpression::sntx: "{A, 0, n}, {B, 0, m}"中或之前的语法无效。
美元失败
帮助正确地将str
转换为表达式或建议其他处理此问题的方法。
如果我没理解错的话,你有
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]]
给出了正确的级数展开。
您可以使用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}}