matlab卷积动画实现

为了完成学校布置的卷积动画任务,匆匆学了下matlab的相关操作,写的代码也是很烂,最后实现了相关功能,分享一下。

直接上代码

clc 
subplot(2,1,2)

t1=[0 0.1]; %同时输入两个点,两点一线
m1=0.5*t1;
p = plot(t1,m1,'-b','MarkerSize',5);   

axis([0 5 0 1.5]);
grid on;
x=-3:0.01:6; 
y=zeros(1,length(x));  % x,y 的初始化
n=1;
j=1;  %定义两个计数变量

%定义一个函数h(x)
ft=f(x,0,1);  
subplot(2,1,1)

h=plot(x,ft);
txt=text (1,1.06,'h(x)');
axis([x(1),x(end),0,1.5]);
grid on;
hold on;  %在同一个figure下绘制g(x)

%绘制g(x)
plot(x,f(x,0,0.5),'m');
L=text (1,0.56,'g(x)');
pause(2);

%把x变为τ,反褶h(τ)
k=plot(x,f(-x,0,1),'r');
axis([x(1),x(end),0,1.5]);
txt2=text(-1,1.06,'h(-τ)');
grid on;
pause(1);
delete(h);  %清除h(x)的图像
delete(L);
text (1,0.56,'g(τ)');
delete (txt)
pause(0.5);

%令h(x-τ)动态右移
delete(k);  
delete (txt2)
for i=0:0.01:4
    subplot(2,1,1) 
    m=plot(x,f(-x,-i,1),'r')
     axis([x(1),x(end),0,1.5]);
     grid on;
     txt=text (-1+i,1.06,'h(x-τ)');
     if i<2
     y=0.5*(x==i)  
    u(n)= plot(x,y,'k')  %用直线填充函数交汇的地方
    n=n+1;
     elseif j<=200 
         delete (u(j))  %删除不交汇区域的直线
         j=j+1      
     end
    pause(0.01);
    delete(m);
    delete(txt);  %删除前一个函数绘制后一个函数实现动态移动
    subplot(2,1,2)
    hold on
     t1=t1+0.01; %下一段线
     if i<1.9
         m1=0.5*t1;
          p = plot(t1,m1,'-b','MarkerSize',5); 
     elseif i>1.97
         m1=-0.5*t1+2
          p = plot(t1,m1,'-b','MarkerSize',5); 
     end
       

    axis([0 5 0 1.5]);
    pause(0.0001);   
    
end
 subplot(2,1,1) 
plot(x,f(-x,-4,1),'r')
text (4,1.06,'h(x-τ)'); 



%绘制宽度为2,位置随i变化,高度随q变化的脉冲子函数
function[y]=f(x,i,q)
y=zeros(1,length(x));
x_pos=find((x>=(0+i))&(x<(2+i)));
y(x_pos)=q;
end

响应的响应的动画效果如图。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐