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
 All Forums
 Origin Forum for Programming
 Forum for Origin C
 Parameter Initialization Functions and Curve-Fit ?

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

Screensize:
UserName:
Password:
Anti-Spam Code:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkUpload FileInsert Image Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
Outboard Bayou Posted - 03/22/2009 : 10:00:49 PM
Origin Ver. and Service Release (Select Help-->About Origin): 8
Operating System: MS Vista

I have some questions regarding parameter initialization functions when creating user-defined curve fitting functions. I should clarify that I have a student license copy of OriginPro 8. According to the Tips tab, "Functions commonly used for parameter initialization are defined in file <Origin Installation Folder>\OriginC\System\data.h." Apparently my copy of Origin did not come with this file, which would have been useful.

My next question then is how do I set up a parameter initialization for a function of the following form:

y = A*(.15*x+7)^b*exp(C*(.15*x+7)^d*x^e)

I am obviously doing something very wrong because it fails to compile every time. Currently the 'incorrect' parameter initialization appears like this:

sort( x_y_curve );
//smooth( x_y_curve, 2 );
Dataset dx;
x_y_curve.AttachX(dx);
dx = ln(dx);
x_y_curve = ln( x_y_curve );
double coeff[2];
fitpoly( x_y_curve, 1, coeff);
A = exp( coeff[0] );
b = coeff[1];
int sign;
C = get_exponent(x_data, y_data, NULL, &A, &sign);
A = sign * exp(a);
sort( x_y_curve );
//smooth( x_y_curve, 2 );
Dataset dx;
x_y_curve.AttachX(dx);
dx = ln(dx);
x_y_curve = ln( x_y_curve );
double coeff[3];
fitpoly( x_y_curve, 2, coeff);
C = exp( coeff[0] );
d = coeff[1];
e = coeff[2];

The error is probably because the 'd' and 'e' terms should be represented by the A term as well, but I will defer to those who have a more expert opinion.

I was wondering whether the curve-fitting function has to be defined always as y = .... or if it could be defined as ln(y)=... or ln(a*y)=...

Finally, I have a multiple curve data set and would like to share the b, d, and e terms but have individual values of A and C calculated for each curve. Is this possible using the global fit option and how does one actually get a larger version of the small function preview after the data is actually fit? All I obtain is individual curve fits for each set of data but I would prefer to have all the curves superimposed on the same plot just as in the preview plot.
1   L A T E S T    R E P L I E S    (Newest First)
greg Posted - 03/23/2009 : 10:25:05 AM
There are a few corrections to make ..

One is that case sensitivity is important so
A = sign * exp(a);
should be
A = sign * exp(A);

Also Dataset dx is declared twice.

Another problem is that dynamically declaring double array does not work. Just declare a Dataset and size as needed as in:

sort( x_y_curve );
//smooth( x_y_curve, 2 );
Dataset dx;
x_y_curve.AttachX(dx);
dx = ln(dx);
x_y_curve = ln( x_y_curve );
//double coeff[2]; This does not work so use following
Dataset coeff;
coeff.SetSize(2);
fitpoly( x_y_curve, 1, coeff);
A = exp( coeff[0] );
b = coeff[1];
int sign;
C = get_exponent(x_data, y_data, NULL, &A, &sign);
A = sign * exp(A);
sort( x_y_curve );
//smooth( x_y_curve, 2 );
// Dataset dx; Duplicate
x_y_curve.AttachX(dx);
dx = ln(dx);
x_y_curve = ln( x_y_curve );
//double coeff[3]; This does not work, just resize
coeff.SetSize(3);
fitpoly( x_y_curve, 2, coeff);
C = exp( coeff[0] );
d = coeff[1];
e = coeff[2];

The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000