How can I plot an impulse (sech(x)) consisting of 2002 points, where last 1001 point are zeros?
Mostra commenti meno recenti
So, I've got 2 sech(x) impulses, 1-st consisting of 1001 points, and 2-nd, consisting of 2002 points. For the 2-nd one I need to set last (right) 1001 points as zeros. How can I do that?
Thank you!
Risposta accettata
Più risposte (2)
Hi @Anna
Mathieu has shown you how to do that in MATLAB. This is the standard approach in MATLAB computing. However, if you are looking for a math function to include in your thesis or journal paper, you might consider solving the following puzzle:
What input to the hyperbolic secant function will yield
when
and output zero otherwise?
ub = 10; % upper bound
x = linspace(-ub, ub, 2001); % domain
figure(1)
plot(x, sech(x)), grid on
xlabel('x'), ylabel('sech(x)')
title('Standard Hyperbolic Secant function')
ylim([-0.2, 1.2])
From the plot, since we know that
converges to zero at
, or
for
, we can design an intermediate function
for the input to the hyperbolic secant such that
produces the desired output values within the domain. One approach is to use the signum function to create a step at
such that
for
.
f = x + ub/2*sign(x) + ub/2;
y = sech(f);
figure(2)
subplot(211)
plot(x, f), grid on
xlabel('x'), ylabel('f(x)')
title('Intermediate function, f(x)')
subplot(212)
plot(x, y), grid on
xlabel('x'), ylabel('y')
title('Desired Output')
ylim([-0.2, 1.2])
4 Commenti
Anna_P
il 25 Giu 2025
Mathieu NOE
il 25 Giu 2025
Modificato: Mathieu NOE
il 25 Giu 2025
it is for sure a great idea (and I have to recognize it's not what I would have found all by myself !)
NB nevertheless that the y data for x>0 is not truly zero , so it depends if its just for plotting or if you will be using this data later in another computation.
just my 2 cents
ub = 10; % upper bound
x = linspace(-ub, ub, 2001); % domain
f = x + ub/2*sign(x) + ub/2;
y = sech(f);
xmin = 0;
plot(x(x>xmin),y(x>xmin))
Anna_P
il 26 Giu 2025
Mathieu NOE
il 26 Giu 2025
my pleasure !
Hi @Anna_P
@Mathieu NOE indeed has a point. My proposed approach does not give an absolute zero. If you require absolute zero for
, then you should consider using this alternative approach, which also reflects my mathematical interpretation of the MATLAB indexing trick:
Note: You can imagine that
acts like a lowpass filter but allows all
signals pass for
. For your info, "Lowpass" is an engineering term, typically used in E&E Engineering and Audio Engineering.
ub = 10; % upper bound
x = linspace(-ub, ub, 2001); % domain
f1 = 1 - heaviside(x); % function 1: Unit Step down
f2 = sech(x); % function 2: Hyperbolic Secant
y = f1.*f2;
subplot(211)
plot(x, f1), grid on
xlabel('x')
title('Unit Step down function (Heaviside)')
ylim([-0.2, 1.2])
subplot(212)
plot(x, y), grid on
xlabel('x')
title('Semi-Hyperbolic Secant function')
ylim([-0.2, 1.2])
1 Commento
Anna_P
il 26 Giu 2025
Categorie
Scopri di più su MATLAB in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





