Введение: довольно новое для Matlab, происходящее из среды Mathematica.
Вопрос: Мне нужно рассчитать на основе (x, y) 2D-данных и построить то же самое с ответом из расчета, показанным на каждом графике. Предполагая, что у меня есть 10 2D-массивов, для которых требуется вычисление FWHM, и ответ FWHM записан для всех из них и сохранен.
Код ниже для функции FWHM:
function width = fwhm(x,y)% Define function for FWHM at 50% y = y / max(y); % Normalize to 1 so that half max=0.5 N = length(y); % Max length of Y MicroscopeMag=10; % Magnification of objective PixelWidth=7.8; % Pixel Pitch is 7.8 Microns - Hamamatsu. %------- identifies the centre of the peak ---------------% [~,centerindex] = max(y);% Find center peak and coordinate %------- Identifies the last index position before half-maximum ------% %----- Have a range containing the leading edge of the signal -----% i = 2; while sign(y(i)-0.5) == sign(y(i-1)-0.5) %trying to see the curve raise i = i+1; end %-----Interpolate the exact point(s) where the signal's value would be 0.5-----% %----- The next 2 lines are an attempt to determine in fractions of an %Index exactly where the line would cross the 0.5 value. %Simple linear interpolation -----% interp = (0.5-y(i-1)) / (y(i)-y(i-1)); %(gives us the delta_y between the two values either side)/(shortfall) %=linearly interpolate how far between the two index positions we should go to hit exactly 0.5 tlead = x(i-1) + interp*(x(i)-x(i-1)); % Works out the corresponding delta_x, which gives you the actual distance in terms of the timebase. i=centerindex+1; %------- start search for next crossing at center--------------------% %------- Repeat process for trailing edge --------------------% while ((sign(y(i)-0.5) == sign(y(i-1)-0.5)) && (i <= N-1)) i = i+1; end if i ~= N interp = (0.5-y(i-1)) / (y(i)-y(i-1)); ttrail = x(i-1) + interp*(x(i)-x(i-1)); % Lateral Magnification x Pixel pitch of 7.8 microns. width=((ttrail - tlead)/MicroscopeMag)*PixelWidth; end</pre.
Код для расчета FWHM для каждого двумерного массива
clear all; a=1; while a<=10; filename=strcat('S',num2str(a),'.csv'); Array=csvread(filename,15,0); x = Array(:, 1); y = Array(:, 2); fwhm(x,y) a = a+1; end
ПРИМЕЧАНИЕ.
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
for a = 1 : 10 filename = sprintf('S%d.csv', a); Array=csvread(filename,15,0); x = Array(:, 1); y = Array(:, 2); width = fwhm(x,y); outputs = [num2cell(x), num2cell(y)]; outputs{3,1} = width; newfilename = sprintf('Snew%d.csv', a); xlswrite(newfilename, outputs); end
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ