f=@(x) function handle with range + conv
6 次查看(过去 30 天)
显示 更早的评论
Dear all,
I have these functions with the code that aims to plot the two signals - x(t) and h(t) - alongside their time range then find the convolution of the two signals.
x=@(t) 2.*((-2<=t&&t<=1)+2).^2.*18.*(2<=t&&t<=3).*-9.*((4<=t&&t<=5)-5);
tx=-2:0.01:5;
h=@(t) 3*(0<=t&&t<=2) -6*((4<=t&&t<=4)-3);
th=0:0.01:4;
c=conv(x(tx),h(th));
tc=(tx(1)+th(1)):0.01:(tx(end)+th(end));
figure(1)
subplot(3,1,1); plot(tx,x(tx));
subplot(3,1,2); plot(th,h(th));
subplot(3,1,3); plot(tc,c);
However, I got this error.
Operands to the || and && operators must be convertible to logical scalar values.
Error in @(t)2.*((-2<=t&&t<=1)+2).^2.*18.*(2<=t&&t<=3).*-9.*((4<=t&&t<=5)-5)
I want to use function handle to plot them.
Is there a way to fix this problem?
Thanks in advance for your answers.
0 个评论
采纳的回答
Deepak Gupta
2020-5-2
Hi Aqeel,
Piecewise function is very helpful in writing conditional functions. Check it out:
As i see multiple errors in your code so providing a piece of code for your reference to solve this problem.
x = @(t) piecewise(t<-2, 0, -2<=t<1, 2*(t+2)^2, 1<=t<3, 18, 3<=t<5, -9*(t-5), t>5, 0);
h = @(t) piecewise(t<0, 0, 0<=t<2, 3*(t+2), 2<=t<4, -6*(t-3), t>4, 0);
tx=-2:0.01:5;
th=0:0.01:4;
xVec = double(subs(x, tx));
hVec = double(subs(h, th));
c = conv(xVec, hVec);
tc = (tx(1)+th(1)):0.01:(tx(end)+th(end));
figure(1)
subplot(3,1,1); plot(tx,xVec);
subplot(3,1,2); plot(th,hVec);
subplot(3,1,3); plot(tc,c);
Cheers.
2 个评论
Deepak Gupta
2020-5-2
编辑:Deepak Gupta
2020-5-2
Extra Note: As your function x is not defined at tx = 5 and h at th = 4, hence matlab returns function values NaN at these time instants. To me it seems like a problem with the question. Because of this you don't see convolution plot from -2 to 9 as expected.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Subplots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!