如何将Maple表达式x*y转换为Matlab以获得结果x*y?
Maple表达式(例如,x^3+x*y)可以通过如何将Maple表达式x*y转换为Matlab以获得结果x*y?,matlab,maple,Matlab,Maple,Maple表达式(例如,x^3+x*y)可以通过 with(CodeGeneration): Matlab(x^3+x*y); 但是,在Matlab中,有两种产品:A*B和A*B。上述方法将给出x^3+x*y。是否有一种方便的方法来获得结果x.^3+x.*y?如果Matlab(x^3+x*y)表达式以书面形式给出代码x^3+x*y,那么您只需使用任何记事本应用程序的“查找和替换”选项,即可将其转换为x.^3+x.y。只需找到所有“”和“^”,然后将它们替换为“*”和“^” 希望这能有所帮助。M
with(CodeGeneration):
Matlab(x^3+x*y);
但是,在Matlab中,有两种产品:A*B和A*B。上述方法将给出x^3+x*y。是否有一种方便的方法来获得结果x.^3+x.*y?如果Matlab(x^3+x*y)表达式以书面形式给出代码x^3+x*y,那么您只需使用任何记事本应用程序的“查找和替换”选项,即可将其转换为x.^3+x.y。只需找到所有“”和“^”,然后将它们替换为“*”和“^”
希望这能有所帮助。Maple的
代码生成[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;
不管有什么价值,Maple 2015都可以直接进行此翻译,而无需以下人员提供额外帮助:
我想你已经知道
*
,^
和*
,^
之间的区别了吧?是的。如果x
和y
都是向量(列表),则只有x.*y
才有意义。如果它们是矩阵,则x*y
和x*y
可能都有意义。似乎我们需要声明变量的类型。我不知道CodeGeneration软件包是否考虑到了这一点。可以扩展CodeGeneration[Matlab]
,使元素级的Maple命令x^~3
和x*~y
分别被翻译程序打印为x.^3
和x.*y
。只有在翻译的整个过程中才有可能,而不是仅仅翻译表达式本身。扩展打印机defn可能必须处理~
[:-^
](x,y)形式的调用,这似乎是在定义这样一个proc主体时elementwise调用的结果。抱歉,现在没时间试试。
> f := (x,y)->x^~y + x^~3 + x*~y:
> CodeGeneration:-Matlab(f);
function freturn = f(x, y)
freturn = x .^ y + x .^ 3 + x .* y;