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