symbolic-math - 如何从包含特定变量 MAPLE 的符号表达式中获取部分表达式?

标签 symbolic-math maple

我有一个符号表达式如下

y1 = (1/a)-(b/a^2)+x*a*b-x/b
y2 = a*b+a*x+b*sqrt(x)

现在我需要获取具有特定术语的部分表达式。喜欢

xFunction(y1, x) # should return x*a*b-x/b
xFunction(y2,x)  # should return a*x+b*sqrt(x)

任何建议或想法都非常有帮助 谢谢您

最佳答案

restart;

y1 := (1/a)-(b/a^2)+x*a*b-x/b:
y2 := a*b+a*x+b*sqrt(x):

K := (ee,x) -> `if`(ee::`+`,select(depends,ee,x),ee):

K( y1, x );

                     x
             x a b - -
                     b

K( y2, x );

                     (1/2)
            a x + b x     

#
# Leave alone an expression which is not a sum of terms.
#
K( sin(x+4)*x^3, x );

                         3
             sin(x + 4) x 

#
# Don't select subterms in which `x` is a just dummy name.
#
K( x^3 + sin(x) + Int(sqrt(x), x=a..b), x );

               3         
              x  + sin(x)

[已编辑]

y1 := (1/a)-(b/a^2)+x*a*b-x/b;

                      1   b            x
                y1 := - - -- + x a b - -
                      a    2           b
                          a             

op(3,y1);

                         x a b

depends(op(3,y1), x);

                          true

select 命令将其第一个参数映射到 它的第二个参数的所有操作数。

select( s->depends(s,x), y1 );

                               x
                       x a b - -
                               b

更简洁的语法,其中 select 映射其第一个 参数取决于第二个参数的操作数 参数,并将其第三个参数作为附加参数传递 选项(到选择器)。

select( depends, y1, x );

                               x
                       x a b - -
                               b

现在创建一个过程来执行此操作。使用条件 测试,以便它返回第一个参数本身 只要这不是各项的总和。

K1 := proc(ee, x)
  if type(ee,`+`) then
    select( depends, ee, x );
  else
    # leave it alone
    ee;
  end if;
end proc:

K1( y1, x);

                               x
                       x a b - -
                               b

使用更简洁的语法进行类型检查。

K2 := proc(ee, x)
  if ee::`+` then
    select( depends, ee, x );
  else
    # leave it alone
    ee;
  end if;
end proc:

K2( y1, x);

                               x
                       x a b - -
                               b

对 if..then..end if 使用更简洁的语法。 这就是所谓的if 运算符形式。这个单词 if 位于名称引号内,以将其与 if...then...end if 中的语言关键字。

K3 := proc(ee, x)
  `if`( ee::`+` , select( depends, ee, x ), x );
end proc:

K3( y1, x);

                               x
                       x a b - -
                               b

由于过程 K3 的主体只有一条语句,因此 我们可以使用所谓的运算符使其更简洁 表格。

K4 := (ee, x) -> `if`( ee::`+` , select( depends, ee, x ), x ):

K4( y1, x);

                               x
                       x a b - -
                               b

关于symbolic-math - 如何从包含特定变量 MAPLE 的符号表达式中获取部分表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368691/

相关文章:

python - 如何将 gplearn 的输出导出为 sympy 表达式或其他可读格式?

python - 如何在Python中绘制代表符号函数的特征值?

maple - 处理多个可选参数

wolfram-mathematica - mathematica/maple 中的分数阶导数?

matlab - 禁用 Matlab 符号有理逼近

c# - 使用 MathNet Symbolics 提取常用术语

function - Maple,数值函数的最大值

maple - 是否可以从 Maple 的程序内部进行绘图?

python - 有没有办法在 SymPy 中处理常量函数参数?