Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
Matlab[AddTranslator] - add a custom MATLAB(R) to Maple function translator method
Calling Sequence
AddTranslator(fname,handler)
Parameters
fname
-
string
handler
procedure
Description
AddTranslator is an extension mechanism that allows anyone to supply a function that will translate a MATLAB command string into an equivalent Maple command string. The handler must accept as arguments the parameters to the MATLAB function fname. Each argument passed to the handler has already been translated to parsable Maple strings.
For example, AddTranslator("eye",handler1); will define a translation method for the MATLAB eye command. handler1 will be invoked when translating the MATLAB command, eye(2,3). handler1 will be called with two string arguments; handler1("2", "3") The handler should not execute any code (ie. it should not create an identity matrix), rather it should return a string that contains Maple syntax for performing the equivalent operation in Maple. Something like the string "LinearAlgebra[IdentityMatrix](2,3)".
In many cases the MATLAB argument sequence will not exactly match the equivalent Maple command. For example, the MATLAB eye command accepts either integer dimensions, or an array of dimensions. Maple's IdentityMatrix command only accepts integer dimensions. So, translating eye(dims) to LinearAlgebra[IdentityMatrix](dims) is not correct when dims is an array. In these cases it is usually easiest to write a Maple procedure that does the argument conversion. For example, write: Then write a handler that translates eye(dims) to maple_eye(dims). In this case, where the handler simply needs to rename the function while keeping all the arguments as is, use StringTools[Join] to join all the given arguments together into a string with commas in between. eye(a,b) becomes "maple_eye(a,b)". The handler will be:
Most built-in translations handlers try not to map to special procedures that just massage their arguments. The intent is to make it obvious what the target function is. In the examples above you really should see LinearAlgebra[IdentityMatrix] in the translated result, rather than a call to maple_eye. However, this sometimes makes the translated code more verbose than it would normally be if you simply started writing the code in Maple. Translated code should usually be reviewed and optimized by hand to remove extra cases that don't need to be handled.
When translating directly to Maple statements, keep in mind that the arguments can themselves be expressions. To avoid multiple evaluations, reference each argument only once. For example, when translating eye(1+n), the first argument given to the handler will be "1+n". So, a translation to will cause to be evaluated at least twice. Inline procedures can help. Rewrite the above to , or, more explicitly .
Similarly the function you are translating could be contained inside another expression. To support embedded expressions make sure the resulting translation is a single expression (ie don't translate to multiple statements). As described above, a procedure can be defined and invoked in the same statement -- proc(x) x^2 end(3) is another way to write 9.
Examples
translate_brick_handler := proc( ) cat( "maple_brick(", StringTools[Join]([args],", "), ")" ); end proc;
Evaluating: maple_brick(1, 2);
Evaluating: maple_brick(Matrix([[1, 2], [3, 4]] ));
See Also
Matlab[FromMFile], rtable_indexing
Download Help Document