MapleTohfData - Maple Programming Help

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Programming : OpenMaple : C Application Programming Interface : Evaluation and Error Handling : OpenMaple/C/MapleTohfData

MapleTohfData

initialize hfdata structures for use in external code

 

Calling Sequence

Parameters

Description

Examples

Calling Sequence

MapleTohfData(kv, a, hf)

DoubleTohfData(kv, re, im, hf)

ComplexTohfData(kv, re, im, hf)

Parameters

kv

-

kernel handle of type MKernelVector

a

-

Maple PROC or RTABLE object

re

-

the value to use as the real component

im

-

the value to use as the imaginary component

hf

-

a pointer to the hfdata structure to initialize

Description

• 

These functions can be used in external code with OpenMaple or define_external.

• 

MapleTohfData encodes a Maple PROC or an RTABLE of type float[8] into an hfdata structure.  These structures are used to pass arguments into and get results out of EvalhfDataProc.

• 

DoubleTohfData and ComplexTohfData encode a complex number represented as two doubles into an hfdata structure.  They differ in that if the im argument to DoubleTohfData is 0.0 or -0.0 it will be ignored, so the resulting hf structure will be treated as representing a real number, not a real number with zero imaginary part.  These structures are used to pass arguments into and get results out of EvalhfDataProc.

• 

A Maple object encoded in a hfdata structure can be extracted by calling ToMaplehfData.  The real and imaginary parts of a hfdata can be extracted by calling RealhfData and ImaginaryhfData.

• 

All hfdata objects returned by EvalhfDataProc represent real floating point values.

Examples

    #include <math.h>

    #include "maplec.h"

    ALGEB MyNewtonData( MKernelVector kv, ALGEB *args )

    {

    M_INT i;

    FLOAT64 tolerance, newguess, res;

    hfdata guess[2];

    ALGEB f, fprime, x;

    if( 3 != MapleNumArgs(kv,(ALGEB)args) ) {

        MapleRaiseError(kv,"three arguments expected");

        return( NULL );

    }

    if( IsMapleProcedure(kv,args[1]) ) {

        f = args[1];

    }

    else {

        ALGEB indets;

        indets = EvalMapleProc(kv,ToMapleName(kv,"indets",TRUE),1,args[1]);

        if( !IsMapleSet(kv,indets) || MapleNumArgs(kv,indets) != 1 ) {

        MapleRaiseError(kv,"unable to find roots");

        return( NULL );

        }

        i = 1;

        f = EvalMapleProc(kv,ToMapleName(kv,"unapply",TRUE),2,args[1],

             MapleSelectIndexed(kv,indets,1,&i));

        if( !f || !IsMapleProcedure(kv,f) ) {

        MapleRaiseError(kv,"unable to convert first arg to a procedure");

        return( NULL );

        }

    }

    x = ToMapleName(kv,"x",FALSE);

    fprime = EvalMapleProc(kv,ToMapleName(kv,"unapply",TRUE),2,

            EvalMapleProc(kv,ToMapleName(kv,"diff",TRUE),2,

            ToMapleFunction(kv,f,1,x),x),x);

    if( !fprime || !IsMapleProcedure(kv,fprime) ) {

        MapleRaiseError(kv,"unable to compute derivative");

        return( NULL );

    }

    DoubleTohfData( kv, MapleEvalhf( kv, args[2] ), 0, guess+1 );

    tolerance = MapleEvalhf(kv,args[3]);

    res = 0.0;

    for( i=0; i<500; ++i ) {

        res = RealhfData( kv, EvalhfDataProc(kv,f,1,guess) );

        if( fabs( res ) <= tolerance )

        break;

        newguess = RealhfData( kv, guess[1] ) -

        res / RealhfData( kv, EvalhfDataProc(kv,fprime,1,guess) );

        DoubleTohfData( kv, newguess, 0, guess+1 );

    }

    if( i == 500 ) {

        MapleRaiseError(kv,"unable to find root after 500 iterations");

        return( NULL );

    }

    return( ToMapleFloat(kv, RealhfData( kv, guess[1] ) ) );

    }

Execute the external function from Maple.

withExternalCalling&colon;

dllExternalLibraryNameHelpExamples&colon;

newtonDefineExternalMyNewtonData&comma;dll&colon;

fx45x2&plus;6x2&colon;

newtonf&comma;0&comma;0.001

0.731892751250226237

(1)

fx&equals;|fx&equals;

0.000039355

(2)

newtonf&comma;2&comma;0.00001

1.00195003210012135

(3)

fx&equals;|fx&equals;

0.000003833

(4)

newtonf&comma;&pi;&comma;1.10-10

2.73205080756887719

(5)

Digits15&colon;

fx&equals;|fx&equals;

1.510-13

(6)

funapplyf&comma;x&colon;

newtonf&comma;&pi;&comma;1.10-10

2.73205080756887719

(7)

evalhff

7.1054273576010018610-15

(8)

See Also

CustomWrapper

define_external

evalhf

OpenMaple

OpenMaple/C/API

OpenMaple/C/EvalhfDataProc

OpenMaple/C/Examples

OpenMaple/C/ImaginaryhfData

OpenMaple/C/RealhfData

OpenMaple/C/ToMaplehfData

 


Download Help Document

Was this information helpful?



Please add your Comment (Optional)
E-mail Address (Optional)
What is ? This question helps us to combat spam