ImaginaryhfData - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


RealhfData

extract the real and imaginary parts from an hfdata structure

 

Calling Sequence

Parameters

Description

Examples

Calling Sequence

RealhfData(kv, hf)

ImaginaryhfData(kv, hf)

Parameters

kv

-

kernel handle of type MKernelVector

hf

-

an hfdata structure

Description

• 

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

• 

The RealhfData function returns the real part of an hfdata structure that represents a real or complex number.  The ImaginaryhfData function returns the imaginary part of an hfdata structure that represents a real or complex number.  If the hfdata represents a real number that ImaginaryhfData returns 0.

• 

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+6x2&colon;

newtonf&comma;0&comma;0.001

0.731892751250226237

(1)

evalf&comma;x=

−0.000039355

(2)

newtonf&comma;sqrt2&comma;0.00001

1.00195003210012135

(3)

evalf&comma;x=

3.833×10−6

(4)

newtonf&comma;π&comma;1.×10−10

−2.73205080756887719

(5)

Digits15&colon;

evalf&comma;x=

1.5×10−13

(6)

funapplyf&comma;x&colon;

newtonf&comma;π&comma;1.×10−10

−2.73205080756887719

(7)

evalhff

−7.10542735760100186×10−15

(8)

See Also

CustomWrapper

define_external

evalhf

OpenMaple

OpenMaple/C/API

OpenMaple/C/DoubleTohfData

OpenMaple/C/ToMaplehfData

OpenMaple/C/EvalhfDataProc

OpenMaple/C/MapleTohfData

OpenMaple/C/Examples