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
 LabTalk Forum
 labtalk two dependent one independent not working

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
smtanner Posted - 07/26/2006 : 4:20:11 PM
Origin Version (Select Help-->About Origin): 7.5
Operating System:windows

I am having a problem fitting two dependant variables to one independant variable in labtalk. I have a function defined in the advanced curve fitter which works fine and looks similar to this:

independant: x
dependent: y1,y2
parameters:a,b,c

y1=ax+bx^2
y2=ax+cx^2

As you can see the equations share one parameter. The problem I have is if I run the advanced curve fitter if will fit both equations just fine but if I try to use labtalk, it will fit y1 fine but the fit to y2 is off a little. My labtalk code is:

nlsf.cleanupfitdata();
nlsf.func$="resonancefirst";
nlsf.y1$=a$(i)fit_real;
nlsf.y2$=a$(i)fit_imag;
nlsf.x$=a$(i)fit_frequency;

*\initialize the parameters\*
sum(a$(i)fit_frequency);
resfreq=sum.mean;
resmin=sum.min;
resmax=sum.max;
xoff=0;
yoff=0;
amp=.05;
gamma=30000;
xslp=0;
yslp=0;
theta=0;

nlsf.derivStep = 0.0001;
nlsf.chiSqrErr=1;
nlsf.wType=3;
nlsf.w1$=a$(i)fit_error;
nlsf.w2$=a$(i)fit_error;
nlsf.tolerance=1E-13;
nlsf.v5=0;
nlsf.v6=0;
nlsf.v3=0;
nlsf.v4=0;
nlsf.v1=1;
nlsf.v2=1;
nlsf.v7=1;
nlsf.v8=1;
nlsf.iterate(10);




nlsf.v5=1;
nlsf.v6=0;
nlsf.v3=1;
nlsf.v4=1;
nlsf.v1=1;
nlsf.v2=1;
nlsf.v7=1;
nlsf.v8=1;
nlsf.iterate(20);



nlsf.v5=1;
nlsf.v6=1;
nlsf.v3=1;
nlsf.v4=1;
nlsf.v1=1;
nlsf.v2=1;
nlsf.v7=1;
nlsf.v8=1;
nlsf.constraints=1;
nlsf.constr$="gamma>10000;resfreq>resmin;resfreq<resmax";
nlsf.fit(200);


Is there something wrong with this code?

Edited by - smtanner on 07/26/2006 5:22:09 PM
8   L A T E S T    R E P L I E S    (Newest First)
smtanner Posted - 07/28/2006 : 10:42:17 AM
Great, that fixed it.

thanks
zachary_origin Posted - 07/28/2006 : 02:27:03 AM
Hi Shawn,

If it is really the matter as you mentioned, you can change the lines to :

nlsf.wType1=3;
nlsf.wType2=3;
nlsf.w1$=a$(i)fit_error;
nlsf.w2$=a$(i)fit_error;

Zachary
OriginLab GZ Office
smtanner Posted - 07/27/2006 : 4:35:49 PM
Ok, after some thought, I understand what is happening (I think). The code I am executing for the weighting:

nlsf.wType=3;
nlsf.w1$=a$(i)fit_error;
nlsf.w2$=a$(i)fit_error;

is not setting the weight for the second dependent variable y2. Instead it is weighting y1 only and that is why y1 is being preferentialy fit and why if I take out the weighting, I get the correct fit (since right now I am just just using a constant value for the weight). In fact if I go into the advanced curve fitter and apply the weight to y1 only, it produces the same poor fit of y2 as seen using the labtalk script.

So the question is what is wrong with the three lines of code above?
smtanner Posted - 07/27/2006 : 1:52:04 PM
This doesn't help with automating in labtalk though. It already works correctly in the advanced curve fitter. What I need to know is how to assign weighting columns in labtalk.


thanks
shawn
fzimnoch Posted - 07/27/2006 : 1:24:19 PM
Hello Shawn:
quote:


If not, ....... what command does the advanced curve fitter use for this? thanks shawn




If you set up the Advanced Curve Fitter with two dependent variables that each have an associated set of errors then when you go to the Advanced Curve Fitter complete the information in Action>Datasets then Options>Control will have show the two dependent datasets in the Dependent Variable window. Click on them individually to choose the appropriate weighting method.

To do this from the GUI it’s best to have Y errors immediatley to the right of the Y values.

FRED
smtanner Posted - 07/27/2006 : 10:56:41 AM
Ok, this seems to be a problem with the way I am defining the weighting method. I am using a data column as an arbritrary dataset weighting for each dependent variable. The three lines in my code:

nlsf.wType=3;
nlsf.w1$=a$(i)fit_error;
nlsf.w2$=a$(i)fit_error;

are for this purpose. If I remove these lines, the fitting works as it should. Is this the correct syntax for this. If not, what is the correct syntax, or what command does the advanced curve fitter use for this?

thanks
shawn

Edited by - smtanner on 07/27/2006 11:23:10 AM

Edited by - smtanner on 07/27/2006 1:03:10 PM
Deanna Posted - 07/26/2006 : 11:26:36 PM
I wonder if the problem is related to not setting the first parameter as shared.

Would you please send us your data via tech@originlab.com? It might help us in finding a solution.

Deanna
OriginLab GZ Office
smtanner Posted - 07/26/2006 : 6:03:30 PM
After looking at it closer, it looks like the labtalk code is optimizing the shared variable using y1 only. This provides an ok fit to y2 but it should be optimized for y1 and y2 both.

The advanced curve fitter is fitting much better than the labtalk code but I have way to many datasets to do this by hand.

thanks
shawn

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