The Origin Forum
File Exchange
Try Origin for Free
The Origin Forum
Home | Profile | Register | Active Topics | Members | Search | FAQ | Send File to Tech support
Username:
Password:
Save Password
Forgot your Password? | Admin Options

 All Forums
 Origin Forum
 Origin Forum
 Calling built-in functions in user-defined fnctns
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic Lock Topic Edit Topic Delete Topic New Topic Reply to Topic

brian0918

USA
6 Posts

Posted - 07/20/2004 :  11:24:23 PM  Show Profile  Edit Topic  Reply with Quote  View user's IP address  Delete Topic
I'm trying to call the built-in Peak function ECS in a user-defined function, as described here:
http://www.originlab.com/www/support/resultstech.aspx?ID=253&language=English


It gives the error "Unable to compile user defined function," even if I simply call the ECS function, without adding anything else:

Parameter Names: y0,xc,A,w,a3,a4
Independent Var.: x
Dependent Var.: y

y = ECS(x,y0,xc,A,w,a3,a4);


This will not even work, giving the error mentioned above, even if I give it initial parameter values that are known to be the actual fit of the data, were I to use the built-in ECS function. (I've tried it with and without the semicolon)

Any suggestions?



Version: Origin 7.5 SR0 v7.5714 (B714)

(The option "Use Origin C" is checked, while "Derivatives" is not)

Mike

USA
357 Posts

Posted - 07/21/2004 :  10:18:18 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Using 7.5 SR0, I created a "user-defined" function using the following expression (no semi-colon):

ecs(x,y0,xc,A,w,a3,a4)

I unchecked the Use Origin C checkbox, set the Form drop down to Expression, and entered the following parameter names: y0,xc,A,w,a3,a4

After entering some parameter estimates, I was able to fit. So, I would start by unchecking the Use Origin C checkbox.

Mike
OriginLab


Go to Top of Page

brian0918

USA
6 Posts

Posted - 07/21/2004 :  10:31:49 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
I noticed that it does seem to work for Expression, but it took about a minute to do just 1 iteration, while the original ECS built-in function could do 100 iterations in about 5 seconds.

Is it normal for Expression to be that much slower, and is there any other way that it could be done?


Thanks.
Go to Top of Page

easwar

USA
1964 Posts

Posted - 07/21/2004 :  2:17:58 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,

When you switch to a function type other than Origin C (such as Y-Script, Expression etc with Origin C check box unchecked), Origin uses LabTalk script for the function. Script is much slower - the function text is repeatedly interpreted etc.

Even though you are only referring to the internal fit function in your script, your function is still defined in script and it will run slower. Typically script is about 20 times slower than Origin C.

Now there was a way to access the built-in functions from Origin C code, which worked in Origin 7 (SR2) but appears to have been not working since. The way was to refer to the function by name, but with "nls" prefixed to the name, such as:
y = nlsECS(x, y0, xc...)

We need to fix this bug. For now you would need to continue use script. Our apologies for the inconvenience.

Easwar
OriginLab



Edited by - easwar on 07/21/2004 2:18:58 PM
Go to Top of Page

brian0918

USA
6 Posts

Posted - 07/21/2004 :  3:06:11 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Do you know what other versions, besides 7, that this feature worked in? I may be able to get ahold of older versions through my school, if necessary. (version 6, for example)
Go to Top of Page

Mike

USA
357 Posts

Posted - 07/21/2004 :  3:48:27 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi brian0918,

I think we have a workaround for you. Since Origin 7, you should have been able to call a built-in function within a user-defined function in the NLSF using the following syntax (as for example):

y=nlfxGauss(x,y0,x0,w,A)


Unfortunately, this was broken sometime subsequent to the 7.0 SR2 release. The problem has something to do with the arguments between the parentheses not being used before they appear when the function is called. So if you add something like line 1 in this example, before calling the function on line 2 ...

double junk = x + y0 + xc + A + w + a3 + a4;// to avoid arg checking bug
y = nlfxECS(x,y0,xc,A,w,a3,a4);


... then, you should be able to compile the function.

Let us know how you do.

Mike
OriginLab

Edited by - Mike on 07/21/2004 4:07:18 PM

Edited by - Mike on 07/21/2004 4:22:48 PM
Go to Top of Page

brian0918

USA
6 Posts

Posted - 07/21/2004 :  4:49:26 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Thanks for the reply. I won't be able to try this for several more hours, but I'll let you know.

What I'm trying to do is add something onto the ECS function to fit a curve better. I'm not sure what will work, but it can only be one parameter, or, at most, two.

I have been trying to create my own functions on Origin, before I knew that built-in functions could be called, and the fitting would never work. I gave it the function, and the partial derivatives, checked "Derivatives," etc... But whenever I would try to do even one iteration, it would always get stuck trying to "compute a curvature matrix" and never get any further, even on the simplest of functions.

So I tried the same thing with ECS, worked out all the partial derivatives (several lines each), and tried putting it in, but it would still get caught at the same spot.

No clue what the problem is, but if I can get this work, I won't have to worry about any of that.

Thanks.
Go to Top of Page

Mike

USA
357 Posts

Posted - 07/21/2004 :  5:14:50 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi brian0918,

It sounds as though you've already done a considerable amount of "head-banging" over this. Rather than do any more, how about sending your .FDF file(s) (they are in your \FitFunc folder) along with a sample data set to tech@originlab.com ? Be sure to refer to this thread in your e-mail. Thanks.

Mike
OriginLab
Go to Top of Page

brian0918

USA
6 Posts

Posted - 07/21/2004 :  10:53:19 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
I tried what you said:

Parameter Names: y0,xc,A,w,a3,a4

Independent Var: x

Dependent Var: y


double junk = x + y0 + xc + A + w + a3 + a4;
y = nlfxECS(x,y0,xc,A,w,a3,a4);


If I edit this in Code Builder, and compile it as is, I get this:



void _nlsfECS_extra(
// Fit Parameter(s):
double y0, double xc, double A, double w, double a3, double a4,
// Independent Variable(s):
double x,
// Dependent Variable(s):
double& y)
{
// Beginning of editable part
double junk = x + y0 + xc + A + w + a3 + a4;
y = nlfxECS(x,y0,xc,A,w,a3,a4);
// End of editable part
}




compiling...
_nlfECS_extra.fit
FEEDBACK macros not defined
Done!




Derivatives is not checked, but Use Origin C is checked.


I gave it initial values, tried 1 iteration, and as always, it just sat there, saying this in the bottom left corner:

"Computing curvature matrix at iteration 1"



Any suggestions?


Go to Top of Page

Mike

USA
357 Posts

Posted - 07/22/2004 :  10:13:33 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Okay, so it compiled (ignore the macros warning), but it is still hanging somehow.

Please see my previous post. If you can send your fitting function and a sample data set, we would be happy to look at it and try to sort out what is happening.

Also.... can I get you to send us your initial parameter estimates?

Thanks.

Mike
OriginLab

Edited by - Mike on 07/22/2004 11:15:25 AM
Go to Top of Page

brian0918

USA
6 Posts

Posted - 07/22/2004 :  1:12:53 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
I have sent an email to tech@originlab.com entitled:

For Michael Genthner: Calling built-in functions in user-defined fnctns
Go to Top of Page
  Previous Topic Topic Next Topic Lock Topic Edit Topic Delete Topic New Topic Reply to Topic
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000