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
 Par. Init. Code in User-Defined F(x)
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic Lock Topic Edit Topic Delete Topic New Topic Reply to Topic

palmieri2

5 Posts

Posted - 01/04/2018 :  2:15:05 PM  Show Profile  Edit Topic  Reply with Quote  View user's IP address  Delete Topic
Hello!

I am trying to create a parameter initialization code for my user-defined function (aka the Avrami equation):

y=1-e^((-k*x)^n)

I converted the equation to the linear form:

ln(ln(1/(1-y))) = ln(k) + nln(x)

Then, following the PI help guide, created the following code:

{

sort( x_y_curve );
Dataset dx;
x_y_curve.AttachX(dx);
dx = ln(x);
x_y_curve = ln(ln(1/(1- x_y_curve ));
vector coeff(2);
fitpoly(x_data, y_data, 1, coeff);
k = exp( coeff[0] );
n = coeff[1];

}

The code compiles without any errors, but I think the 1 in my y definition is causing some issues with the definition of the parameters. Help appreciated!

Edited by - palmieri2 on 01/05/2018 09:23:22 AM

yuki_wu

896 Posts

Posted - 01/04/2018 :  9:48:55 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,
I am sorry that I cannot understand your question fully.
You said the code compiles without any errors, so anything else wrong? Are the fit results not good?

Regards,
Yuki
OriginLab
Go to Top of Page

palmieri2

5 Posts

Posted - 01/05/2018 :  09:20:46 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi Yuki,

I'm sorry for the lack of clarity.

The fit does not converge with my dataset and the code's output values for k and n are not what I'd expect (looking for n ~ 3 and k ~ 0.015 but I'm getting n ~ 0.66 and k ~ 7*10^-7).
Go to Top of Page

yuki_wu

896 Posts

Posted - 01/08/2018 :  01:16:41 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,

I just found you made a mistake in the transformation:
The equation should be transformed as:
ln(ln(1-y)) = n ln(-k) + n ln(x)
So the code should be modified:

{
sort( x_y_curve );
Dataset dx;
x_y_curve.AttachX(dx);
dx = ln(dx);
x_y_curve = ln(ln(1- x_y_curve));
vector coeff(2);
fitpoly(x_data, y_data, 1, coeff);
n = coeff[1];
k = -exp( coeff[0]/n );
}


Regards,
Yuki
OriginLab

Edited by - yuki_wu on 01/08/2018 01:17:05 AM
Go to Top of Page

palmieri2

5 Posts

Posted - 01/08/2018 :  1:48:57 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,

I'm sorry, I don't think that is correct. All of the sources I can find say the linear form should be as I've listed it. Plus, you cannot have a log of a negative number as you have in your transformation.

Could you please tell me more about the coeff and fitpoly commands in my code? I'm not sure that I have built that part of the code properly for my particular function.


Best,
Paige
Go to Top of Page

Castiel

343 Posts

Posted - 01/08/2018 :  8:45:20 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
quote:
Originally posted by palmieri2


I am trying to create a parameter initialization code for my user-defined function (aka the Avrami equation):

y=1-e^((-k*x)^n)



That is NOT Avrami equation. Have a try of this:
y = 1 - e^(-k * x^n)



     #####
    #### _\_  ________
    ##=-[.].]| \      
    #(    _\ |  |------|
     #   __| |  ||||||||
      \  _/  |  ||||||||
   .--'--'-. |  | ____ |
  / __      `|__|[o__o]|
_(____nm_______ /____\____ 
Go to Top of Page

yuki_wu

896 Posts

Posted - 01/08/2018 :  9:23:17 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi Paige,

You better check which equation is the user-defined function you desired at first. Is the original equation you posted or the one Castiel mentioned? If it is the original one, you can set a bound to make sure k < 0.

More info about fitpoly function:
https://www.originlab.com/doc/OriginC/ref/Fitpoly-GlobalFunction

Regards,
Yuki
OriginLab
Go to Top of Page

palmieri2

5 Posts

Posted - 01/09/2018 :  3:16:11 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,

The equation is the one Castiel mentioned.

I do have one additional question: I would like to add a parameter A so my new equation is y=A*(1-exp(-k*x^n)) where A = y when x approaches infinity.

I think my best bet is to use the initialization function Curve_yfromX to extrapolate a value for A given a very large value of x (say 10,000), but I am having issues initializing this parameter.

My code for that step is: A = Curve_yfromX( x_y_curve ,10000);

Advice here? Thank you again for your help! I apologize for that silly mistake and the extra work you did because of it.

-Paige
Go to Top of Page

snowli

USA
1379 Posts

Posted - 01/09/2018 :  4:32:23 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello Paige,

Which version of Origin are you using?
Since Origin 2017, we provide some pre-defined formula for parameter initialization so user doesn't have to write code.
E.g. When defining a fitting function, i can choose "Y at X Max" to initialize parameter A to be Y value at max X.



Also see this blog
http://blog.originlab.com/data-analysis/use-initial-formula-to-better-guess-fitting-parameter-values-from-data

Thanks, Snow

quote:
Originally posted by palmieri2

Hi,

The equation is the one Castiel mentioned.

I do have one additional question: I would like to add a parameter A so my new equation is y=A*(1-exp(-k*x^n)) where A = y when x approaches infinity.

I think my best bet is to use the initialization function Curve_yfromX to extrapolate a value for A given a very large value of x (say 10,000), but I am having issues initializing this parameter.

My code for that step is: A = Curve_yfromX( x_y_curve ,10000);

Advice here? Thank you again for your help! I apologize for that silly mistake and the extra work you did because of it.

-Paige
Go to Top of Page

palmieri2

5 Posts

Posted - 01/10/2018 :  12:44:38 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello,

I have been working in Origin 8, but have access to Origin 2017. The problem I am having in Origin 2017 is that I cannot use both the code I have already generated for initializing n and k while also using a built-in function to determine A. I may be wrong, but I do not think the built-in functions can help me determine n and k which are derived from the linear form of my model equation. This would then require that I define A using code.

Additionally, the yatxmax function isn't quite what I'm looking for. I need the extrapolated y value of the horizontal asymptote that my curve approaches at very large values of x. It is impractical for me to acquire data at these extremes, so I need to extrapolate the value.

Thank you for your continued help everyone!

-Paige
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