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

发布于 2024-11-27 01:42:26 字数 1086 浏览 1 评论 0原文

我需要将一个变量(例如 var)输入到 Mathematica 函数 Series[ ] 中,如下所示:Series[A^2+B^2+C^2, var]。 Series[ ] 具有以下语法:

Series[f, {x, x_0, n}] 生成 f 关于点 x=x_0 的幂级数展开,阶数为 n。
Series[f, {x, x_0, n}, {y, y_0, m}, ...] 依次找到相对于 x 的级数展开,然后是 y 等。

因为我并不总是在一维中计算 Series[ ] (即,BC 在每次迭代中并不总是变量),var 必须正确格式化以适应尺寸要求。需要注意的是,Mathematica 喜欢列表,因此任何退化的表都将具有一组外部 {}

假设我之前的代码生成了以下两组集合:

表[1]= {{A, 0, n}};
表[2]= {{A, 0, n}, {B, 0, m}}; .

我最好的想法是使用字符串操作(对于 i= 2):

字符串 = ToString[表[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 正确转换为表达式或建议另一种方法来处理此问题。

I need to input a variable, say var, into Mathematica function Series[ ] like this: Series[A^2+B^2+C^2, var]. Series[ ] has the following syntax:

Series[f, {x, x_0, n}] generates a power series expansion for f about the point x=x_0 to order n.
Series[f, {x, x_0, n}, {y, y_0, m}, ...] successively finds series expansions with respect to x, then y, etc.

Because I am not always computing Series[ ] in one dimension (i.e., B and C are not always variables at each iteration), var must be properly formatted to fit the dimension demands. The caveat is that Mathematica likes lists, so any table degenerated will have a set of outer {}.

Suppose my previous code generates the following two sets of sets:

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

My best idea is to use string manipulation (for i= 2):

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

The next step is to convert str to an expression like var and do Series[A^2 + B^2 + C^2, var] by doing var= ToExpression[str], but this returns the following error:

ToExpression::sntx: Invalid syntax in or before "{A, 0, n}, {B, 0, m}".
$Failed

Help convert str to expression propertly or suggest another way to handle this problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

御弟哥哥 2024-12-04 01:42:26

如果我理解正确,您已经

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]]

给出正确的级数展开。

If I understood correctly, you have

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

and are trying to obtain from that

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

This may be done using Sequence, like so (I will use series instead of Series to keep it unevaluated so you can see what is happening):

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

So for instance

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

gives the right series expansion.

眼波传意 2024-12-04 01:42:26

您可以使用 First最后或更一般地说,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 (##) 以及 应用 (@@),如下所示:

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

You can use First or Last or more generally, Part to get the List you want. For e.g.,

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

EDIT:

For multiple variables, you can use a SlotSequence (##) along with Apply (@@) like so:

Series[Sin[u + w], ##] & @@ {{u, 0, 3}, {w, 0, 3}}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文