5

Maple 表达式(例如,x^3+x*y)可以通过以下方式转换为 Matlab

with(CodeGeneration):
Matlab(x^3+x*y);

但是,在 Matlab 中,有两种产品:A*BA.*B。上述方式将给出x^3+x*y。有没有一种方便的方法来获得结果x.^3+x.*y

4

3 回答 3

2

Maple 的语言定义CodeGeneration[Matlab]可以扩展为处理元素代字号 (~) 运算符的各种实例。

由于'x*~y'似乎自动简化为 `~`[`*`](x, `$`, y),并且由于名称“$”的存在似乎存在硬编码错误,因此该名称是在下面的使用代码中替换为NULL

> restart:

> with(CodeGeneration): with(LanguageDefinition):

> LanguageDefinition:-Define("NewMatlab", extend="Matlab",
>   AddFunction("`~`[`^`]", [Vector,integer]::Vector,
>               proc(X,Y)
>                  Printer:-Print(X,".^",Y)
>              end proc,
>               numeric=double),
>   AddFunction("`~`[`*`]", [Vector,integer]::Vector,
>               proc(X,Y)
>                  Printer:-Print(X,".*",Y)
>               end proc,
>               numeric=double));

> expr:=''x^~y + x^~3 + x*~y'':

> Translate(subs(` $`=NULL, expr ), language="NewMatlab");

cg = x.^y + x.^3 + x.*y;

> p := proc(x,y)
>         x^~y + x^~3 + x*~y;
>      end proc:

> f := subs(` $`=NULL, eval(p) ):
> Translate(f, language="NewMatlab");

function freturn = f(x, y)
  freturn = x.^y + x.^3 + x.*y;
于 2013-02-20T22:20:59.080 回答
1

不管它值多少钱,Maple 2015 可以直接进行此翻译,无需acer提供的额外帮助:

> f := (x,y)->x^~y + x^~3 + x*~y:
> CodeGeneration:-Matlab(f);
function freturn = f(x, y)
  freturn = x .^ y + x .^ 3 + x .* y;
于 2016-03-08T17:25:07.317 回答
0

如果 Matlab(x^3+x*y) 表达式以书面形式给出代码 x^3+x*y,那么您可以简单地将其转换为 x.^3+x。y ,只需使用任何记事本应用程序的“查找和替换”选项。只需找到所有 " " 和 "^" ,然后将它们替换为 ".*" 和 ".^" 。

希望这可以帮助。

于 2013-02-17T07:02:28.117 回答