Maple表达式(例如,x ^ 3 + x * y)可以通过
转换为Matlabwith(CodeGeneration):
Matlab(x^3+x*y);
然而,在Matlab中,有两种产品: A * B 和 A. * B 。以上方式将给出 x ^ 3 + x * y 。是否有方便的方法来获得结果 x。^ 3 + x。* y ?
答案 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,只需使用任何记事本应用程序的“查找和替换”选项。只需找到所有“”和“^”,然后将其替换为“。*”和“。^”。
希望这有帮助。