Attempt to plot an piecewise function

1 vue (au cours des 30 derniers jours)
Eduardo Fornazieri
Eduardo Fornazieri le 8 Juin 2024
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?

Réponse acceptée

Sam Chak
Sam Chak le 8 Juin 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;

Plus de réponses (0)

Catégories

En savoir plus sur Scatter Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by