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
 Origin Forum
 Non-linear fitting of data as column formula

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
AKazak Posted - 07/01/2022 : 07:53:00 AM
OriginPro 2022b (64-bit) SR1 9.9.5.167
Windows 7 Pro SP1 x64

Greetings!

I have the following data structure:


What is the easiest way to fill columns L, M and Y with non-linear fit parameters for the following relationship?


Can I accomplish this using a formula?

Thank you.

---
Andrey
16   L A T E S T    R E P L I E S    (Newest First)
YimingChen Posted - 07/05/2022 : 3:08:13 PM
If you want the recalculation to be triggered by all the input columns, you need to set all those columns as the arguments of the Python function. Check the updated project file.
https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise2.opju

James
AKazak Posted - 07/05/2022 : 10:23:51 AM
quote:
Originally posted by YimingChen

Yes, you are right. the fitting function is called 3 times. Please see the updated project file. The fitted values are output in one run.

https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise1.opju

James



Dear James,

What is the purpose of passing the col(a) to the function:
py.fit(col(A))


For me it seems that py.fit was designed in such a way that it does not require any inputs, doesn't it?

How do I modify py.fit to depend on the source data columns A:F?

---
Andrey
YimingChen Posted - 07/05/2022 : 09:07:24 AM
Yes, you are right. the fitting function is called 3 times. Please see the updated project file. The fitted values are output in one run.

https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise1.opju

James
AKazak Posted - 07/02/2022 : 01:21:14 AM
quote:
Originally posted by YimingChen

It is not possible in this case as the input columns can vary. So I have to use wks.to_list2() Python function to extract data from each worksheet row.

James



Dear James,

OK, got it.

Another question on Python.
I noticed that column formulas for columns L, M and Y are different in parts of Python scripts since each columns return its own component of popt vector. Does this mean that for each row fit(i, help) function is being called three times?
If this is a case, then it seems like wasting the resources.
Is this possible to fill columns L, M and Y with a single run of fit(i, help) function per each row?

---
Andrey
YimingChen Posted - 07/01/2022 : 3:29:53 PM
It is not possible in this case as the input columns can vary. So I have to use wks.to_list2() Python function to extract data from each worksheet row.

James

AKazak Posted - 07/01/2022 : 2:43:14 PM
quote:
Originally posted by YimingChen

Yes, you can remove help parameter (the input column). It is of not much use in this case as the input columns are not passed by the function arguments.

James



How do I pass the input columns by the function arguments to make the function much more universal?

---
Andrey
YimingChen Posted - 07/01/2022 : 1:43:07 PM
Yes, you can remove help parameter (the input column). It is of not much use in this case as the input columns are not passed by the function arguments.

James

quote:
Originally posted by AKazak

quote:
Originally posted by YimingChen

import originpro as op
import numpy as np
from scipy.optimize import curve_fit

wks = op.find_sheet()

def func(x, a, b, c):
    return a + (1 - a) * (b/x)**(1/c)
    
def fit(i, help):
    '''f:i'''
    x = np.linspace(1, 5, 6)
    y = wks.to_list2(i,i,0,5)
    popt, pcov = curve_fit(func, x, np.transpose(y)[0])
    return popt[0]




Few questions on the code.
1) Is help parameter of fit function redundant and can be removed?

---
Andrey

---
Andrey

AKazak Posted - 07/01/2022 : 12:43:35 PM
quote:
Originally posted by YimingChen

I don't find a way to do so with Labtalk. Looks to me the input of nlbegin has to be columns.

James



nlbegin is a good option, but it does not output the fitting parameters to a worksheet, but to report sheet only.
So I will continue using Python approach.

---
Andrey
AKazak Posted - 07/01/2022 : 12:34:49 PM
quote:
Originally posted by YimingChen

import originpro as op
import numpy as np
from scipy.optimize import curve_fit

wks = op.find_sheet()

def func(x, a, b, c):
    return a + (1 - a) * (b/x)**(1/c)
    
def fit(i, help):
    '''f:i'''
    x = np.linspace(1, 5, 6)
    y = wks.to_list2(i,i,0,5)
    popt, pcov = curve_fit(func, x, np.transpose(y)[0])
    return popt[0]




Few questions on the code.
1) Is help parameter of fit function redundant and can be removed?

---
Andrey
YimingChen Posted - 07/01/2022 : 12:30:22 PM
I don't find a way to do so with Labtalk. Looks to me the input of nlbegin has to be columns.

James

quote:
Originally posted by AKazak

quote:
Originally posted by YimingChen

https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise.opju
James



Dear James,

OK, now I see how it works.

Can I do the same using the built-in Origin's NLF engine via LT and column formula?

---
Andrey

aplotnikov Posted - 07/01/2022 : 12:14:28 PM
quote:
Originally posted by YimingChen

You can set column values with Python function
from scipy.optimize import curve_fit


It seems to be a very promising approach: to use Python libraries instead of Origin "native" features. It gives some users (like me) something to think about...
AKazak Posted - 07/01/2022 : 11:51:19 AM
quote:
Originally posted by YimingChen

https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise.opju
James



Dear James,

OK, now I see how it works.

Can I do the same using the built-in Origin's NLF engine via LT and column formula?

---
Andrey
AKazak Posted - 07/01/2022 : 11:48:40 AM
quote:
Originally posted by YimingChen

import originpro as op
import numpy as np
from scipy.optimize import curve_fit

wks = op.find_sheet()

def func(x, a, b, c):
    return a + (1 - a) * (b/x)**(1/c)
    
def fit(i, help):
    '''f:i'''
    x = np.linspace(1, 5, 6)
    y = wks.to_list2(i,i,0,5)
    popt, pcov = curve_fit(func, x, np.transpose(y)[0])
    return popt[0]




Few questions on the code.
1) Is help parameter of fit function redundant and can be removed?

---
Andrey
YimingChen Posted - 07/01/2022 : 11:47:30 AM
https://my.originlab.com/ftp/forum_and_kbase/Images/fitRowWise.opju

James
AKazak Posted - 07/01/2022 : 11:40:14 AM
quote:
Originally posted by YimingChen

You can set column values with Python function. See the example below:



Haven't got the method.
Can you share a sample project, please?

---
Andrey
YimingChen Posted - 07/01/2022 : 10:15:09 AM
You can set column values with Python function. See the example below:




import originpro as op
import numpy as np
from scipy.optimize import curve_fit

wks = op.find_sheet()

def func(x, a, b, c):
    return a + (1 - a) * (b/x)**(1/c)
    
def fit(i, help):
    '''f:i'''
    x = np.linspace(1, 5, 6)
    y = wks.to_list2(i,i,0,5)
    popt, pcov = curve_fit(func, x, np.transpose(y)[0])
    return popt[0]


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