Attempt to plot an piecewise function

1 次查看(过去 30 天)
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?

采纳的回答

Sam Chak
Sam Chak 2024-6-8
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 个)

类别

Help CenterFile Exchange 中查找有关 2-D and 3-D Plots 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by