如何将Maple表达式x * y转换为Matlab,得到结果x。* y?

时间:2013-01-24 02:22:11

标签: matlab maple

Maple表达式(例如,x ^ 3 + x * y)可以通过

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

然而,在Matlab中,有两种产品: A * B A. * B 。以上方式将给出 x ^ 3 + x * y 。是否有方便的方法来获得结果 x。^ 3 + x。* y

3 个答案:

答案 0 :(得分:2)

Maple的CodeGeneration[Matlab]的语言定义可以扩展为处理elementwise tilde(〜)运算符的各种实例。

因为'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;

答案 1 :(得分: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;

答案 2 :(得分:0)

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

希望这有帮助。