필터 지우기
필터 지우기

Making ramp and unit step function in MATLAB

조회 수: 98 (최근 30일)
Steven Franzkowiak
Steven Franzkowiak 2017년 10월 2일
답변: Sajib Biswas Shuvo 2021년 7월 26일
I am having trouble writing the code for these step functions. I would appreciate any help. I am using MATLAB version 9.3.0.701794 (R2017b)

답변 (2개)

Robert U
Robert U 2017년 10월 5일
편집: Robert U 2017년 10월 5일
Hello Steven Franzkowiak,
one solution is to write a function that behaves as the plotted function. One can argue about the points at t = 4 and t = 8 since they are not defined uniquely. I suppose f(t=4) = 0 and f(t=8) = -2.
The function can look like the following code. Matlab 2017b supports piecewise definition as can be found in one of the links posted by Ramnarayan Krishnamurthy.
function [ vec_out ] = hw_piecewise_R2014b( vec_in )
% support column/row vectors
if size(vec_in,1) > 1
vec_in = vec_in';
transpose_vec = 1;
else
transpose_vec = 0;
end
% everywhere else function returns zero
vec_out = zeros(1,size(vec_in,2));
% defined sections of function as seen from chart
vec_out(vec_in >= -6 & vec_in <= 0) = 5/6 * vec_in(vec_in >= -6 & vec_in <= 0) + 5;
vec_out(vec_in > 0 & vec_in <= 4) = -5/4 * vec_in(vec_in > 0 & vec_in <= 4) + 5;
vec_out(vec_in > 4 & vec_in <= 8) = -2;
% return vector according to input
if transpose_vec
vec_out = vec_out';
end
end
Having that function you must define a vector t and call the four versions:
t = -10:0.01:10;
f1 = hw_piecewise_R2014b(t);
figure; plot(t,f1)
f2 = hw_piecewise_R2014b(-t);
figure; plot(t,f2)
f3 = hw_piecewise_R2014b(t-4);
figure; plot(t,f3)
f4 = hw_piecewise_R2014b(2*t - 4)
figure; plot(t,f4)
f5 = hw_piecewise_R2014b(-t/2 - 4)
figure; plot(t,f5)
Kind regards,
Robert
  댓글 수: 2
Jan
Jan 2017년 10월 5일
Posting full solutions of homework question has the drawback, that the OP cannot deliver this as his own solution anymore. Steven did not show, what he has tried so far and did not ask a specific question. Your solution is fine and according to the quality I would vote for it. But I'm afraid, it is a short-term help only for Steven.
Robert U
Robert U 2017년 10월 5일
Thank you for your comment, Jan Simon. I decided to post my solution despite the drawback you describe.
In my opinion, the implicit link to logical indexing and functions are valuable for other readers as well and outweigh the drawback that Steven could accomplish his homework by copying the full solution.
Kind regards,
Robert

댓글을 달려면 로그인하십시오.


Sajib Biswas Shuvo
Sajib Biswas Shuvo 2021년 7월 26일
This code does the job too. It uses the Symbolic Math toolbox.
syms t;
f_negative_t = 5*heaviside(-t) -5/6 * (-t) * heaviside(-t ) ...
+ 5/6 * (-t-6) * heaviside(-t -6);
f_positive_t = +5*heaviside(t) - 5/4 *t* heaviside(t) ...
- 2*heaviside(t-4) + 5/4*(t-4)*heaviside(t-4)...
+ 2*heaviside(t-8);
f = f_positive_t + f_negative_t;
fplot(f,[-7,10]);
xline(0), yline(0);
plot of the code

카테고리

Help CenterFile Exchange에서 Number Theory에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by