how to enter equation into matrix column and refer to adjacent column.

2 views (last 30 days)
Hi all. I am a Matlab beginner trying to find full width half max. Below is my code. I start with my .csv file, identify x- and y-values, fit a gaussian curve, and find half max. Next, I added x-values at evenly spaced small increments to a column in a matrix (defined as A). I want the second column (B) to find the y-values at the given x-values using the equation found with the gaussian fit (in other words, the x-value at a given row will be used in the equation to find the y-value in the adjacent column). I am stuck on the for loop here. Then, I think I can use the "find" command to find my 2 x-values to find the full width, but this may need some help too. Thank you for your help!
data = load ('Practice.csv');
datax = data(:,2);
datay = data(:,5);
f = fit(datax, datay,'gauss1')
plot(f,datax,datay)
yfitted = feval(f,datax);
hold on
[ypk] = findpeaks(yfitted)
HalfMax = 0.5*ypk
Matrix = zeros(2,1000);
A = Matrix(1,:);
for A =1:1000;
x1= 0;
x2= 1.1;
n = 1000;
A = linspace(x1, x2, n);
end;
B = Matrix(2,:); %%this is where I need help with a for loop please!
index1 = find(B <= HalfMax, 1, 'first');
index2 = find(B >= HalfMax, 1, 'last')
fwhm = index2-index1
  3 Comments
Emily Pendleton
Emily Pendleton on 15 Dec 2017
With the first column in the matrix (1000 rows), I am just trying to give values to x at small, evenly spaced increment. Here, my first 5 rows of A (x-values) are: 0, 0.0011, 0.0022, 0.0033, 0.0044, 0.0055. This continues to my last 5 rows: 1.0956, 1.0967, 1.0978, 1.0989, 1.1000. I'm sorry if this code is redundant and the loop is not needed. I am attempting to have evenly spaced increases in x-value to find FWHM; is there a better way to increment x-values? Even if my code is repetitive, does my question make sense?

Sign in to comment.

Accepted Answer

Matthew
Matthew on 15 Dec 2017
If I understand what you're attempting to do, you can replace the 'A' for loop with one line
A = linspace(0, 1.1, 1000);
B can then be calculated as
B= feval(f,A);
  2 Comments
Emily Pendleton
Emily Pendleton on 15 Dec 2017
Yes. That worked for finding the correspoinding y-values. This line is now wrong and returns a value of 1.
index1 = find(B <= HalfMax, 1, 'first')
I'm just trying to locate the row at which B is <= Halfmax. I can then use that location to find the value of A in the same row. I will do this for when B <= Halfmax too and find the difference between the x-values. Any suggestions on how to get this done?
Matthew
Matthew on 15 Dec 2017
Edited: Matthew on 15 Dec 2017
You probably want to reverse the sign of your inequality.
i.e.
index1 = find(B >= HalfMax, 1, 'first')
The current code will most likely always return 1 because the first point of B is the first point less than the HalfMax.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!