如何在 Maple 中定义自定义函数?

daljit97

我是 Maple 的新手,我正在寻找一种简单的方法来自动化某些任务。特别是,我正在寻找一种方法来定义自动执行某些步骤的自定义“操作”。作为一个例子,我想定义一种快速计算多项式 Hessian 行列式的方法。目前我这样做的方法是打开 Maple,创建一个新的工作表而不是执行以下命令:

p := (x, y) -> x^2*y + 3*x^3 + y^3

with(VectorCalculus):
h := Hessian(p(x, y), [x, y])
Determinant(h)

我想做的是直接用类似的东西计算粗麻布行列式

HessDet(p)

HessDet执行上述操作的自定义命令在哪里如何在 Maple 中实现这样的目标?

宏基

首先第一件事情:分配给你的价值p是一个过程,可以返回一个多项式表达,而不是本身的多项式。重要的是不要混淆表达式和过程。这样做是新用户出现问题的常见原因。

能够四处p(x,y)乱飞可能在视觉上让您赏心悦目,但在这里它几乎没有什么编程目的。过程的形参p恰好被称为xandy的事实,以及您p用参数x调用过程的事实,y实际上只是另一个常见的混淆来源。不要仅仅为了以这种方式调用它们而创建过程。

此外,您的调用p(x,y)使您的代码片段“知道” procedure 需要多少个参数看起来很神奇p所以让你的候选人HessDet接受p作为一个程序已经是一团糟

因此,让我们保持直截了当,通过编写HessDet接受多项式而不是过程。我们可以以编程方式确定 的这个表达式的名称type polynom

restart;

HessDet:=proc(p::algebraic)
  local H,vars;
  vars:=indets(p,
               And(name,Non(constant),
                   satisfies(u->type(p,polynom(anything,u)))));
  H:=VectorCalculus:-Hessian(p,[vars[]]);
  LinearAlgebra:-Determinant(H);
end proc:

现在一些使用它的例子,

P := x^2*y + 3*x^3 + y^3;
HessDet(P);

p := (x, y) -> x^2*y + 3*x^3 + y^3;
HessDet(p(x,y));

HessDet(x^3-x^2+4*x);
HessDet(s^2*t + 3*s^3 + t^3);
HessDet(s[r]^2*t[r] + 3*s[r]^3 + t[r]^3);

您可能还想知道如何跨会话重复使用这个自定义过程,而不必每次都输入它。两种合理的方式是:

  1. 将(上面)定义的明文定义HessDet放在个人初始化文件中
  2. 创建一个 (.mla) Maple Library Archive 文件,然后您的保存HessDet到该文件,然后在您的初始化文件中增加库搜索路径

看起来 2) 更费力,但重复只需要保存步骤,并且您可以将许多自定义过程存储到同一个存档中。你的选择...

[编辑] OP 要求澄清上述程序的第一部分HessDet,我怀疑这意味着调用indets.

如果P分配了一个表达式,则调用indets(P,name)将返回该表达式中存在的所有名称的集合。基本上,它返回表达式的所有不确定子表达式的集合,这些子表达式name在 Maple 的技术意义上属于类型

例如,

P := x*y + sin(a*Pi)*x;

         x y + sin(a Pi) x

indets( P,
        name );

           {Pi, a, x, y}

也许Pi这里不需要常量的名称即,

indets( P,
        And( name,
             Non(constant) ) );

             {a, x, y}

也许我们只想要表达式是多项式的非常量名称?即,

indets( P,
        And( name,
             Non(constant),
             satisfies(u->type(p,polynom(anything,u))) ) );

              {x, y}

最后一个结果是使用以下测试的高级方法:

type(P, polynom(anything, x));

               true

type(P, polynom(anything, y));

               true

type(P, polynom(anything, a));

               false

这里的一个中心问题是 OP 没有提到自定义程序要处理什么样的多项式。所以我猜测了一些防御性编码,希望以后能少一些惊喜。最初的问题指出输入可能是一个“多项式”,但我们没有被告知可能存在什么样的系数。

也许系数将始终是真实的、精确的或数字的。也许当没有提供时,custon 程序应该抛出一个错误。这些细节在问题中没有提到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在JavaScript中向自定义构造函数添加自定义方法?

如何在visual studio ide扩展自定义中调用自定义函数?

如何在自定义损失函数中遍历张量?

如何在自定义树枝函数中呈现内容?

如何在自定义bash函数中“查找-exec”?

如何在自定义函数中模拟Axios?

如何在keras中测试自定义损失函数?

如何在 React 函数中调用自定义 Hook

如何在聚合函数中应用自定义逻辑

如何在OxyPlot中绘制自定义函数图?

如何在Tensorflow中编写自定义损失函数?

如何在PlayWright中运行自定义js函数

如何在Haskell中编写自定义的show函数

如何在simulink中创建自定义s函数?

我如何在自定义函数中到达 indexPath?

如何在 Google Sheet 自定义函数中编写“重新运行自定义函数”按钮?

如何在简单的数学运算中定义keras自定义损失函数

如何在 keras 中创建自定义损失函数?(自定义加权二元交叉熵)

如何从Keras中的自定义损失函数获取结果?

如何自定义属于包的R函数中的图?

如何总结自定义dplyr函数中的变量列表?

如何使用dcast在自定义函数中重塑数据?

如何从Firebase的自定义类函数中调用数据

pyTorch 中的自定义损失函数如何工作?

如何安装Maple?

如何在自定义jQuery函数内使用函数

如何在Rails中定义自定义配置变量

如何在Dymola中定义记录的自定义参数?

如何在ckeditor中定义自定义html标签