Maple Professionel
Maple Académique
Maple Edition Étudiant
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professionel
MapleSim Académique
Maple T.A. - Suite d'examens de classement
Maple T.A. MAA Placement Test Suite
Möbius - Didacticiels de mathématiques en ligne
Machine Design / Industrial Automation
Aéronautique
Ingénierie des véhicules
Robotics
Energie
System Simulation and Analysis
Model development for HIL
Modélisation du procédé pour la conception de systèmes de contrôle
Robotics/Motion Control/Mechatronics
Other Application Areas
Enseignement des mathématiques
Enseignement de l’ingénierie
Enseignement secondaire et supérieur (CPGE, BTS)
Tests et évaluations
Etudiants
Modélisation financière
Recherche opérationnelle
Calcul haute performance
Physique
Webinaires en direct
Webinaires enregistrés
Agenda des évènements
Forum MaplePrimes
Blog Maplesoft
Membres Maplesoft
Maple Ambassador Program
MapleCloud
Livres blancs techniques
Bulletin électronique
Livres Maple
Math Matters
Portail des applications
Galerie de modèles MapleSim
Cas d'Etudes Utilisateur
Exploring Engineering Fundamentals
Concepts d’enseignement avec Maple
Centre d’accueil utilisateur Maplesoft
Centre de ressources pour enseignants
Centre d’assistance aux étudiants
define_external(...,WRAPPER,...) - generate and compile a C translation wrapper used by define_external
Calling Sequence
define_external(...,WRAPPER,...)
Description
When the WRAPPER option is used with define_external, a C file is created, compiled and linked into Maple. This new library, called a wrapper library, contains the code necessary to translate Maple data types into data types recognized by C programs.
A C compiler is required to use this feature. See COMPILE_OPTIONS for a description of the various settings available for configuring Maple to automatically compile the generated wrappers.
In addition to the data structures supported by wrapperless external call, generated wrappers support procedures (callbacks), structures, and unions.
A structure is a non-homogeneous collection of members, corresponding to a struct in C.
STRUCT( member1::descriptor1, ..., memberN::descriptorN, options);
A union is similar to a structure, except that all the members start at the same memory address, hence only one member of the union is valid at any given time.
UNION( member1::descriptor1, ..., memberN::descriptorN, options);
Each member::descriptor pair describes one member of the structure or union. The descriptor is any of the basic external types recognized by define_external.
The options are used to specify what kind of data type the wrapper should expect for conversion purposes. Valid options are TABLE and LIST. Only one of these options can be specified, and once the wrapper has been generated only the declared type is accepted. When tables are used, the member names correspond to table indices. When lists are used, the member ordering is used to determine which element is accessed. Lists are considered read-only.
A Maple procedure can be passed as an argument to an external function.
PROC( arg1::descriptor1, ..., argN::descriptorN, RETURN::descriptor, options);
Examples
The following example shows how to declare an external function that takes callback parameters. The external function is an implementation of Newton's method for finding a root of the given function, . The derivative of , fprime must also be provided. The initial guess is continuously improved until the absolute value of is less than or equal to the given tolerance. If a good solution cannot be found in 100 iterations, the computation aborts and 0 is returned, otherwise the improved guess is returned. The external C function is defined as follows.
#include <stdio.h>
#include <math.h>
double newton(
double ( f ) (double),
double ( fprime ) (double),
double guess,
double tolerance )
{
int count = 0;
while( fabs(f(guess)) > tolerance && count++ < 100 )
guess = guess - f(guess)/fprime(guess);
return( count>=100 ? 0 : guess );
}
The Maple definition is:
Pick an equation and find its derivative.
The external function expects procedure arguments, so turn the above polynomials into procedures.
Call the external function to find the root.
Verify that this is a root.
See Also
COMPILE_OPTIONS, CustomWrapper, define_external, define_external/types, SharedLibrary
Download Help Document