| Author | 
                
                  Topic   | 
                
                
                 
                 
                 
                 
                 
                                 | 
               
              
                | 
                 tongwei 
                 
                
                China 
                2 Posts  | 
                
                  
                    
                      
                       Posted - 10/16/2010 :  11:17:38 AM
                        
                        
                        
                        
                        
                      
  | 
                     
                    
                       Origin Ver.8.1 and Service Release SR3(Select Help-->About Origin):  Operating System:Windows 7 pro(64)
 
   I wish to fit the above funtion to data.  By reading the thread http://www.originlab.com/forum/topic.asp?TOPIC_ID=7802 and the linked tutorial on Origin wiki.
  I wrote the fowlling Orgin C code. But when I compiled it, the following error mesages comes out: "Linking... Done! compiling... _nlfnag_integration_fitting.fit D:\WeiTong\tools\Origin81func\OriginC\NLSF\_nlfnag_integration_fitting.fit(17) :Error, Function argument x is not used inside the function body D:\WeiTong\tools\Origin81func\OriginC\NLSF\_nlfnag_integration_fitting.fit(16) :Error, error(s) found in compiling function f_callback Compile Failed!"
  Please help on this fitting. Thanks.
  Origin C code
 
  #pragma warning(error : 15618) #include <origin.h>
  // Add your special include files here. // For example, if you want to fit with functions from the NAG library,  // add the header file for the NAG functions here. #include <oc_nag8.h> // Add code here for other Origin C functions that you want to define in this file, // and access in your fitting function. struct user   // parameters in the integrand { 	double thR,fitX;   }; // Function supplied by user, return the value of the integrand at a given x. static double NAG_CALL f_callback(double x, Nag_User *comm)  {         struct user *sp = (struct user *)(comm->p);           double thR,fitX;    // temp variable to accept the parameters in the Nag_User communication struct         thR = sp->thR;         fitX = sp->fitX;           	return fitX^5/(exp(fitX)-1)/(1-exp(-fitX)); }  
  // You can access C functions defined in other files, if those files are loaded and compiled  // in your workspace, and the functions have been prototyped in a header file that you have // included above. 
  // You can access NLSF object methods and properties directly in your function code.
  // You should follow C-language syntax in defining your function.  // For instance, if your parameter name is P1, you cannot use p1 in your function code.  // When using fractions, remember that integer division such as 1/2 is equal to 0, and not 0.5 // Use 0.5 or 1/2.0 to get the correct value.
  // For more information and examples, please refer to the "User-Defined Fitting Function"  // section of the Origin Help file.
 
  //---------------------------------------------------------- //  void _nlsfnag_integration_fitting( // Fit Parameter(s): double r0, double A, double B, double thetaR, // Independent Variable(s): double x, // Dependent Variable(s): double& y) { 	// Beginning of editable part     double epsabs = 0.00001, epsrel = 0.0000001, result, abserr; 	Integer max_num_subint = 500; 	// you may use epsabs and epsrel and this quantity to enhance your desired precision      // when not enough precision encountered   	Nag_QuadProgress qp; 	static NagError fail;   	// the parameters parameterize the integrand can be input to the call_back function     // through the Nag_User communication struct 
  	// Parameters passed to integrand by Nag_User communication struct         Nag_User comm;         struct user s; 	    s.thR = thetaR; 	    s.fitX = x;         comm.p = (Pointer)&s;       	d01sjc(f_callback, 0, thetaR/x, epsabs, epsrel, max_num_subint, &result, &abserr, &qp, &comm, &fail);  
                // you may want to exam the error by printing out error message, just uncomment the following lines 	 // if (fail.code != NE_NOERROR)      // printf("%s\n", fail.message);   	// For the error other than the following three errors which are due to bad input parameters  	// or allocation failure  NE_INT_ARG_LT  NE_BAD_PARAM   NE_ALLOC_FAIL 	// You will need to free the memory allocation before calling the integration routine again to avoid memory leakage 	if (fail.code != NE_INT_ARG_LT && fail.code != NE_BAD_PARAM && fail.code != NE_ALLOC_FAIL) 	{ 		NAG_FREE(qp.sub_int_beg_pts); 		NAG_FREE(qp.sub_int_end_pts); 		NAG_FREE(qp.sub_int_result); 		NAG_FREE(qp.sub_int_error); 	}   	// Calculate the fitted value 	y=r0+A*x^2+B*x^5*result
  	// End of editable part } | 
                     
                   
                 | 
               
              
                | 
                 larry_lan 
                 
                
                China 
                 Posts  | 
                
                  
                    
                      
                       Posted - 10/17/2010 :  9:31:37 PM
                        
                        
                        
                        
                        
                      
  | 
                     
                    
                       You need to use the parameter, x, which you have defined, in the callback function, static double NAG_CALL f_callback.
  Thanks Larry | 
                     
                    
                       Edited by - larry_lan on 10/17/2010  9:32:02 PM | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 tongwei 
                 
                
                China 
                2 Posts  | 
                
                  
                    
                      
                       Posted - 10/18/2010 :  02:36:20 AM
                        
                        
                        
                        
                        
                      
  | 
                     
                    
                       Where or How to use the x? (Actually I used x in some places) Please indicate it exactly. Thanks.
  WT
 
 quote: Originally posted by larry_lan
  You need to use the parameter, x, which you have defined, in the callback function, static double NAG_CALL f_callback.
  Thanks Larry
 
   | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                |   | 
                
                  Topic   | 
                
                
                 
                 
                 
                 
                 
                 | 
               
             
           | 
         
       
     |