Advertisement
asidesi

DMD algo

Mar 13th, 2021
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.17 KB | None | 0 0
  1. clear all, close all, clc
  2.  
  3. xi=linspace(-10,10,400);
  4. t=linspace(0,100*pi,200);
  5. dt=t(2)-t(1);
  6. [Xgrid,T]=meshgrid(xi,t);
  7.  
  8. %create two spatio-temporal patterns
  9. f1=sech(Xgrid+3).*(1*exp(i*2.3*T));
  10. f2=(sech(Xgrid).*tanh(Xgrid)).*(2*exp(i*2.8*T));
  11. f=f1+f2;
  12. [u,s,v]=svd(f.');
  13. subplot(2,2,1), surfl(Xgrid,T,real(f1)); shading interp, colormap(gray)
  14. subplot(2,2,2), surfl(Xgrid,T,real(f2)); shading interp, colormap(gray)
  15. subplot(2,2,3), surfl(Xgrid,T,real(f2)); shading interp, colormap(gray)
  16.  
  17. figure(2)
  18. plot(diag(s)/(sum(diag(s))),'ro');
  19.  
  20. figure(3)
  21. subplot(2,1,1), plot(real(u(:,1:2)))
  22. subplot(2,1,2), plot(real(v(:,1:2)))
  23.  
  24. %% DMD ALGORITHM
  25. X=f.';
  26. X1=X(:,1:end-1);
  27. X2=X(:,2:end);
  28. r=2;
  29. [U,S,V]=svd(X1,'econ');
  30. Ur=U(:,1:r);
  31. Sr=S(1:r,1:r);
  32. Vr=V(:,1:r);
  33.  
  34. Atilde=Ur'*X2*Vr/Sr;
  35.  
  36. [W,D]=eig(Atilde);
  37. Phi=X2*Vr/Sr*W; %DMD modes
  38.  
  39. lambda=diag(D);
  40. omega=log(lambda)/dt;
  41. figure(3),
  42. subplot(2,1,1),hold on,plot(real(Phi))
  43.  
  44. x1=X(:,1);
  45. b=Phi\x1;
  46. time_dynamics=zeros(r,length(t));
  47. for iter=1:length(t)
  48.     time_dynamics(:,iter)=(b.*exp(omega*t(iter)));
  49. end
  50. X_dmd=Phi*time_dynamics;
  51. figure(1)
  52. subplot(2,2,4),surfl(Xgrid,T,real(X_dmd).'); shading interp, colormap(gray)
  53.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement