如何将Maple表达式x*y转换为Matlab以获得结果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

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

with(CodeGeneration):
Matlab(x^3+x*y);
但是,在Matlab中,有两种产品:A*BA*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;