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?
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;
不管它值多少钱,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;
如果 Matlab(x^3+x*y) 表达式以书面形式给出代码 x^3+x*y,那么您可以简单地将其转换为 x.^3+x。y ,只需使用任何记事本应用程序的“查找和替换”选项。只需找到所有 " " 和 "^" ,然后将它们替换为 ".*" 和 ".^" 。
希望这可以帮助。