Attempt to plot an piecewise function
3 views (last 30 days)
Show older comments
I am trying to implemment an algorithm for Rayleigh-Ritz method using B-Spline basis ( see Burden, numerical analysis, 9th ed. section 11.5). The fuction S is the following:

my attempt is:
S = @(x) ( (x <= -2) ) .* 0 + ...
( (x > -2) & (x <= -1) ) .* (1/4 * (2 + x).^3) + ...
( (x > -1) & (x <= 0) ) .* (1/4 * (2 + x).^3 - 4 * (1 + x).^3) + ...
( (x > 0) & (x <= 1) ) .* (1/4 * (2 - x).^3 - 4 * (1 - x).^3) + ...
( (x > 1) & (x <= 2) ) .* (1/4 * (2 - x).^3) + ...
( (x > 2) ) .* 0;
% Plotting the function
y_v = linspace(-3, 3, 100); % Extend the range a bit to see behavior around boundaries
s_valores = arrayfun(S, y_v);
plot(y_v, s_valores);
xlabel('x');
ylabel('S(x)');
title('Piecewise Function S(x)');
grid on;
I was expecting the graph to be like

I run it in Octave, but it is very similar to Matlab. Can you point what I am missing?
0 Comments
Accepted Answer
Sam Chak
on 8 Jun 2024
S = @(x) ( (x <= -2) ) .* 0 + ...
( (x > -2) & (x <= -1) ) .* (1/4 * (2 + x).^3) + ...
( (x > -1) & (x <= 0) ) .* (1/4 *((2 + x).^3 - 4 * (1 + x).^3)) + ...
( (x > 0) & (x <= 1) ) .* (1/4 *((2 - x).^3 - 4 * (1 - x).^3)) + ...
( (x > 1) & (x <= 2) ) .* (1/4 * (2 - x).^3) + ...
( (x > 2) ) .* 0;
% Plotting the function
y_v = linspace(-3, 3, 100); % Extend the range a bit to see behavior around boundaries
s_valores = arrayfun(S, y_v);
plot(y_v, s_valores);
xlabel('x');
ylabel('S(x)');
title('Piecewise Function S(x)');
grid on;
0 Comments
More Answers (0)
See Also
Categories
Find more on Scatter Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
