将字符串转换为Mathematica中非法/不支持的表达式



我需要像这样在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[](即,BC在每次迭代中并不总是变量),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]]

给出了正确的级数展开。

您可以使用FirstLast,或者更一般地使用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}}

相关内容

  • 没有找到相关文章

最新更新