필터 지우기
필터 지우기

How do I make a function for running/potting "smoothing spline" on all my y plots? I can do it for one y plot, but can't figure out how to do the rest..thanks!

조회 수: 1 (최근 30일)
How do run the code under "%Preparing /showing Curve data" on all my y plots?
if true
% code
end
delimiter = ',';
startRow = 2;
fmt=[repmat('%f',1,5) '%*[^\n]'];
pn = uigetdir(pwd,'matlab');
d=dir(fullfile(pn, '*.csv'));
L=length(d)
for i=1:L
msg='';
[fid,msg]=fopen(fullfile(pn,d(i).name),'r');
error(msg) % should never fail here w/ above check
dataArray=cell2mat(textscan(fid, fmt, ...
'Delimiter', delimiter, ...
'headerlines', startRow, 'collectoutput',1));
fid=fclose(fid); %closing the file
% if no data, abort, tell user
if isempty(dataArray),error(['No data from ' fullfile(pn,d(i).name)])
end
end
Time_Hrs=dataArray(:,1);
x1=Time_Hrs(1:end-1);
Control=dataArray(:,2);
dy1=diff(Control)./diff(Time_Hrs);
alphaCT1i=dataArray(:,3);
dy2=diff(alphaCT1i)./diff(Time_Hrs);
alphaCT1=dataArray(:,4);
ANT=dataArray(:,5);
dy3=diff(ANT)./diff(Time_Hrs);
ANT=dataArray(:,5);
dy4=diff(ANT)./diff(Time_Hrs);
%Plot Derivative
x2=x1(1:end-1);
plot(x1,dy1,x1,dy2,x1,dy3,x1,dy4);
%PREPARING /SHOWING CURVE DATA
[xData, yData1] = prepareCurveData( x1, dy1);
% Set up fittype and options.
% smooth curve applied ot a set of noisy observations
% my guess is that it marks the point where derivative is highest.
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 0.787025547534865;
% Fit model to data.
[fitresult,~] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult);
legend( h, 'dy1 vs. x2', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes
xlabel Time(hrs)
ylabel 1stDerivative
grid on
deriv=h

답변 (1개)

Dimitris Iliou
Dimitris Iliou 2017년 5월 19일
If I understand correctly you want to get all the code that is below
%PREPARING/SHOWING CURVE DATA
and make it into a function in order for you to calculate all of your y plots.
You can easily turn that code into a function by doing the following:
function prepareData(x1,dy,FigureName)
%PREPARING /SHOWING CURVE DATA
[xData, yData1] = prepareCurveData( x1, dy);
% Set up fittype and options.
% smooth curve applied ot a set of noisy observations
% my guess is that it marks the point where derivative is highest.
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 0.787025547534865;
% Fit model to data.
[fitresult,~] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', FigureName );
h = plot( fitresult);
legend( h, 'dy1 vs. x2', FigureName, 'Location', 'NorthEast' );
% Label axes
xlabel Time(hrs)
ylabel 1stDerivative
grid on
deriv=h
and you can call this function for each of your y's individually:
prepareData(x1,dy1,'Figure1')
prepareData(x1,dy2,'Figure2')
prepareData(x1,dy3,'Figure3')
prepareData(x1,dy4,'Figure4')
In case you want to plot everything in the same figure, you could use the figure handle to do it.

카테고리

Help CenterFile Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by