Attempt to plot an piecewise function

조회 수: 1 (최근 30일)
Eduardo Fornazieri
Eduardo Fornazieri 2024년 6월 8일
답변: Sam Chak 2024년 6월 8일
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