How to use algebra_solver

Hello,

I am trying to use algebra_solver, but couldn’t get the code right. Any help on the issue is greatly appreciated!

Here is my function and then try to solve it.

  vector algebra_system(vector effpi,vector theta, real[] x_r, int[] x_i){
                 vector[1] rslt;
                 rslt[1]=(theta[1]+theta[2]/effpi[1]+theta[3]/effpi[1]^2) - (theta[4]+theta[5]*effpi[1]);
                 return rslt;
               } 
  real desrfunc (real effpi, 
             real toxpi, 
             vector param,
             real[] x_r,
             int[] x_i){
               real a = param[1];
               real b = param[2];
               real c = param[3];

               real rhop;
               real rhoq;
               real desr;
               
               vector[1] effpi0;
               real toxpi0;
               
               vector[1] effpi_guess=[0.5]';
               vector[5] param_ex=append_row(append_row(param, -toxpi/(effpi-1)), toxpi/(effpi-1));
               
               effpi0 = algebra_solver(algebra_system, effpi_guess, param_ex, x_r, x_i);
               toxpi0 = a + b/effpi0[1] + c/effpi0[1]^2;
               
               rhop=sqrt(effpi0[1]^2+toxpi0^2);
               rhoq=sqrt(effpi^2+toxpi^2);
               desr =(rhop>0)? rhoq/rhop-1: -500;
               return desr;
   }

The algebra solver needs to know that x_r and x_i are data. You must mark them in the function signature

real desrfunc (real effpi, 
           real toxpi, 
           vector param,
           data real[] x_r,
           data int[] x_i){
1 Like

This solves the problem! Thank you!