Advertisement
Help Keep Boards Alive. Support us by going ad free today. See here: https://subscriptions.boards.ie/.
If we do not hit our goal we will be forced to close the site.

Current status: https://keepboardsalive.com/

Annual subs are best for most impact. If you are still undecided on going Ad Free - you can also donate using the Paypal Donate option. All contribution helps. Thank you.
https://www.boards.ie/group/1878-subscribers-forum

Private Group for paid up members of Boards.ie. Join the club.

C++ compiler help

  • 14-03-2005 08:05PM
    #1
    Closed Accounts Posts: 2


    Hello all,

    I am sure this error has come across the board before, but could not find it through searching. I am using the borland 5.5 compiler along with a program called admodel builder to run non-linear regression models. When converting my base template file which looks like this:
    DATA_SECTION
    init_int nobs;
    init_matrix data(1,nobs,1,2)
    vector SSB(1,nobs);
    vector R(1,nobs);
    PARAMETER_SECTION
    init_number a;
    init_number b;
    vector pred_R(1,nobs)
    objective_function_value f;
    PRELIMINARY_CALCS_SECTION
    // get the data out of the columns of the data matrix 
    SSB=column(data,1);
    R=column(data,2);
    PROCEDURE_SECTION
    pred_R=((a*SSB)/(1+b*SSB));
    f=regression(R,pred_R);
    

    into a cpp file I get an error saying:

    "operator/ not implemented in type dvar_vector for arguments of the same type in function model_parameters::user function()"
    it is referring to a problem with my division (/) operator in my function? The resulting cpp file looks like this:
    #include <admodel.h>
    
    #include <bh.htp>
    
    model_data::model_data(void)
    {
    nobs.allocate("nobs");
    data.allocate(1,nobs,1,2,"data");
    SSB.allocate(1,nobs);
    R.allocate(1,nobs);
    }
    
    model_parameters::model_parameters(int sz,int argc,char * argv[]) : 
    ad_comm(argc,argv), model_data() , function_minimizer(sz)
    {
    initializationfunction();
    a.allocate("a");
    b.allocate("b");
    pred_R.allocate(1,nobs,"pred_R");
    #ifndef NO_AD_INITIALIZE
    pred_R.initialize();
    #endif
    f.allocate("f");
    }
    
    void model_parameters::preliminary_calculations(void)
    {
    // get the data out of the columns of the data matrix 
    SSB=column(data,1);
    R=column(data,2);
    }
    
    void model_parameters::userfunction(void)
    {
    pred_R=((a*SSB)/(1+b*SSB));
    f=regression(R,pred_R);
    }
    
    model_data::~model_data()
    {}
    
    model_parameters::~model_parameters()
    {}
    
    void model_parameters::report(void){}
    
    void model_parameters::final_calcs(void){}
    
    void model_parameters::set_runtime(void){}
    
    #ifdef _BORLANDC_
    extern unsigned _stklen=10000U;
    #endif
    
    
    #ifdef __ZTC__
    extern unsigned int _stack=10000U;
    #endif
    
    long int arrmblsize=0;
    
    int main(int argc,char * argv[])
    {
    gradient_structure::set_NO_DERIVATIVES();
    gradient_structure::set_YES_SAVE_VARIABLES_VALUES();
    #if defined(__GNUDOS__) || defined(DOS386) || defined(__DPMI32__) || \
    defined(__MSVC32__)
    if (!arrmblsize) arrmblsize=150000;
    #else
    if (!arrmblsize) arrmblsize=25000;
    #endif
    model_parameters mp(arrmblsize,argc,argv);
    mp.iprint=10;
    mp.preliminary_calculations();
    mp.computations(argc,argv);
    return 0;
    }
    

    Thanks for any help offered.

    Mako


Comments

  • Closed Accounts Posts: 423 ✭✭Dizz


    Why don't you split the troublesome line up to confirm your suspicisons?

    from:
    pred_R=((a*SSB)/(1+b*SSB));

    to:
    x = a*SSB;
    y = 1+b*SSB;
    pred_R = x/y

    where x,y are the correct types ;). If x and y are integer types then to have the problems is surprising - if not the operator needs overriding and implementing.

    Dizz


  • Closed Accounts Posts: 2 awood11@mail.co


    I have determined that my / operator needs to be overloaded. Can someone tell me where and what I would insert into my code to do this? Thanks,


  • Closed Accounts Posts: 423 ✭✭Dizz


    Have a look here (courtesy of google ;)) http://gethelp.devx.com/techtips/cpp_pro/10min/2001/august/10min0801.asp
    As for where to do it - you'll prob have to modify the generated code by your backend.

    Dizz


Advertisement