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

9 ビュー (過去 30 日間)
Emily Pendleton
Emily Pendleton 2017 年 12 月 15 日
編集済み: Matthew 2017 年 12 月 15 日
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 件のコメント
Emily Pendleton
Emily Pendleton 2017 年 12 月 15 日
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?
Walter Roberson
Walter Roberson 2017 年 12 月 15 日
Perhaps you just want
A = linspace(0, 1.1, 1000);
Matrix(1,:) = A;

サインインしてコメントする。

採用された回答

Matthew
Matthew 2017 年 12 月 15 日
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 件のコメント
Emily Pendleton
Emily Pendleton 2017 年 12 月 15 日
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 2017 年 12 月 15 日
編集済み: Matthew 2017 年 12 月 15 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSparse Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by