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
 x-intercept and integrate

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
robuiuc Posted - 06/03/2012 : 9:04:43 PM
Origin Ver. and Service Release (Select Help-->About Origin): 8.6.0 64bit, b70
Operating System: win7

I have a relatively simple problem, and I haven't been able to find (what I'm assuming should be) concise code to solve it.

I have a sinusoidal data set and I'm trying to find the first x-intercept, and then integrate the data from 0 to that value. The code I've attempted is below. I tried to specify a certain data range, but I always get the 3rd (last) x-intercept. Also, the integrate command (when it works), integrates the entire data set. What modifications do I need to make to the code? If it simplifies things, the x-intercept for all data sets is always in between x = 0.5-1. Thanks much.

range r1 = col(1)[0:2250]; //attempting to limit data to 1st x intercept
range r2 = col(2)[0:2250];
r2(0);
r1(0, r2)=;
s1 = r1(0, r2); //attempting to set s1 = x intercept
int ix1=xindex(0,%c);
int ix2=xindex(s1,%c); //integrate from 0-s1?
range rr=(%c)[$(ix1): $(ix2)];
integ1 rr;
integ1.=;
9   L A T E S T    R E P L I E S    (Newest First)
Kathy_Wang Posted - 06/21/2012 : 01:48:38 AM
quote:
Originally posted by couturier

quote:
range r1 = 1;
range r2 = 2;
double ix2 = r1(0, r2);

This is the first time I see a notation such as last line and I can't understand how it works.

Can anyone explain ?



Hi, the notation r1(0) is used as interpolation through range notation.

Such expression as r1(0,r2) returns to the interpolated X value when the Y value in r2 is equal to 0, and the data set in r1 is used as the X value in this case.


Kathy
Originlab
couturier Posted - 06/07/2012 : 3:14:26 PM
quote:
range r1 = 1;
range r2 = 2;
double ix2 = r1(0, r2);

This is the first time I see a notation such as last line and I can't understand how it works.

Can anyone explain ?
Laurie Posted - 06/05/2012 : 5:59:21 PM
My apologies....

I think using an xy range for interpolation only works when the X dataset is monotonically increasing or decreasing.

We will email you too...

OriginLab Technical Support
robuiuc Posted - 06/04/2012 : 2:39:30 PM
I emailed the raw data to Support with reference to this thread. For the time being I am simply using the code provided above. Once I hear back, I will post the response here. I'm not quite sure why restricting the data to the first half cycle does not work.
Laurie Posted - 06/04/2012 : 11:16:14 AM
We can simplify it further, to just three lines:

range rxy = (2,1);
double ix2 = rxy(0);
integ1 (r1,r2)[x0:$(ix2)];

It doesn't make sense to me that the second line of code above, for you, is finding the last intercept; it should find the first instance of 0.

Please paste your new code here so I can take alook.

Thank you.

OriginLab Technical Support
robuiuc Posted - 06/04/2012 : 10:31:28 AM
Thanks once again. The integration magnitude is now correct. However, the signal is sinusoidal-- there are three x-intercepts, and this is integrating to the last one. Using the code above, is there a way to either: restrict the input data or somehow specify the first intercept (which always occurs somewhere between x = 0.5-1?
Laurie Posted - 06/04/2012 : 10:13:11 AM
Your script can be simplified to the following 4 lines:

range r1 = 1;
range r2 = 2;
double ix2 = r1(0, r2);
integ1 (r1,r2)[x0:$(ix2)];

Let me know if this works for you.

OriginLab Technical Support
robuiuc Posted - 06/04/2012 : 08:01:18 AM
Thank you very much for your quick response. This is a little closer, but I still have two issues:
1. The first two lines of the code do not appear to be working; the range is not restricted to the specified range (first 2250 rows) and it is still finding the last (third) x-intercept.

2. The integration is indeed calculating from the 'correct' data range, but it is not using the right x-values. For my data, x=0 corresponds to row 1000. In the in results log, the integration does not start at 0 (x1 =0), but rather x1 =1000. This is resulting in erroneous integrated areas (vs. when I manually use the GUI). Any suggestions? Thanks.
Kathy_Wang Posted - 06/04/2012 : 05:51:17 AM
Hi
The problem with your script is mostly that you used invalid range notation, there are three parts in the script you will need to modify for this reason.

1. When you define range r1 and r2, the row index starts from 1 rather than 0;

2. When you define integrals ix1 and ix2, instead of "%c", you should use "r2" as the range, also it is recommended that you introduce the control variable 2 to find values both from left and right, otherwise the script won’t work when you starting value is not 0;

3. When you define range rr for integration, instead of using
(%c)[$(ix1): $(ix2)];
use
1[$(ix1)]:2[$(ix2)];
here I assumed your XY range is column 1 and 2, if not, you will need to modify the script accordingly.

In addition, an equal mark is missing after "r2(0)".

Here I helped to modify the script as following, which you might try:
range r1 = col(1)[1:2250]; //attempting to limit data to 1st x intercept
range r2 = col(2)[1:2250];
r2(0)=;
r1(0, r2)=;
s1 = r1(0, r2);
int ix1=xindex(0,r2,2);
int ix2=xindex(s1,r2,2); //integrate from 0-s1
range rr=1[$(ix1)]:2[$(ix2)];
integ1 rr;
integ1.=;


Hope this information helps!

Kathy
Originlab

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