Hello,
I want find the zero-crossings of a smoothing spline function that I got using the Curve Fitting toolbox and plot the points were this occurs. The function code is the following:
%% Fit: 'Jan 2012'.
[xData, yData] = prepareCurveData( x_jan_12_s, Price_jan_12_s );% Set up fittype and options.
ft = fittype( 'smoothingspline' );excludedPoints = excludedata( xData, yData, 'Indices', [2 276] );opts = fitoptions( 'Method', 'SmoothingSpline' );opts.SmoothingParam = 8.24530273269464e-08;opts.Exclude = excludedPoints;% Fit model to data.
[fitresult{2}, gof(2)] = fit( xData, yData, ft, opts );% Plot fit with data.
figure( 'Name', 'Jan 2012 Supply France Peak' );plot( fitresult{2}, 'k');% Label axes
xlabel( 'Volume [MWh]', 'Interpreter', 'none' );ylabel( 'Price', 'Interpreter', 'none' );
I found the link where @Star Strider answers a similar question https://www.mathworks.com/matlabcentral/answers/267222-easy-way-of-finding-zero-crossing-of-a-function
However with his code, you need to define the y, which is not available for my fit curve (y is contained in fitresult{2}):
t = [1:0.01:5]; % Time Vector
y = sin(2*pi*t); % Signal
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Zero-Crossing Indices Of Argument Vector
zx = zci(y); % Approximate Zero-Crossing Indices
figure(1)plot(t, y, '-r')hold onplot(t(zx), y(zx), 'bp')hold offgridlegend('Signal', 'Approximate Zero-Crossings')
How can I solve the problem?
Thanks in advance!
Best Answer