SciML / DifferentialEquations.jl

Multi-language suite for high-performance solvers of differential equations and scientific machine learning (SciML) components. Ordinary differential equations (ODEs), stochastic differential equations (SDEs), delay differential equations (DDEs), differential-algebraic equations (DAEs), and more in Julia.
https://docs.sciml.ai/DiffEqDocs/stable/
Other
2.87k stars 230 forks source link

Dynamic Mode Decomposition #517

Closed ChrisRackauckas closed 4 years ago

ChrisRackauckas commented 5 years ago

Not entirely sure where to put this one, so I'm just storing some links here.

https://arxiv.org/pdf/1905.09266.pdf

AlCap23 commented 5 years ago

If you're planning on implementing this, I would love to help. I have a crude implementation of the DMD , EDMD and DMDc algorithms, which I can put up in a repo on the weekend.

The EDMD implementation could in general use some advanced stuff ( like function signatures etc. ) for the lifting onto the space of koopman observeables, but other than that its a more or less straightforward linear algebra problem. Also, there is other work by Rowley, Kutz, Proctor, Brunton et.al. on this e.g. multiresolution decomposition and how to efficiently implement rank 1 updates.

Maybe this can be used as a DiffEqOperator?

ChrisRackauckas commented 5 years ago

I won't have time to implement it over the next few months, so I was planning to at least make a JuliaDiffEq repo for it with some basics, and maybe make a GSoC project around it. Any contributions are more than welcome. I'd hope that we could formalize some kind of automatic equation discovery interface that could get integrated into the main docs as a standard feature of DiffEq. 


Applied Mathematics Instructor, Massachusetts Institute of Technology Senior Research Analyst, University of Maryland, Baltimore, School of Pharmacy, Center for Translational Medicine On 10/22/2019 2:40:57 PM, JuliusMartensen notifications@github.com wrote: If you're planning on implementing this, I would love to help. I have a crude implementation of the DMD [http://cwrowley.princeton.edu/papers/Tu-DMD.pdf] , EDMD [https://arxiv.org/pdf/1408.4408.pdf] and DMDc [https://arxiv.org/abs/1409.6358] algorithms, which I can put up in a repo on the weekend. The EDMD implementation could in general use some advanced stuff ( like function signatures etc. ) for the lifting onto the space of koopman observeables, but other than that its a more or less straightforward linear algebra problem. Also, there is other work by Rowley, Kutz, Proctor, Brunton et.al. on this e.g. multiresolution decomposition and how to efficiently implement rank 1 updates. Maybe this can be used as a DiffEqOperator? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub [https://github.com/JuliaDiffEq/DifferentialEquations.jl/issues/517?email_source=notifications&email_token=AAN25HQQKGETS446GWIXVILQP5CLRA5CNFSM4JBDJK42YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEB6YUBA#issuecomment-545098244], or unsubscribe [https://github.com/notifications/unsubscribe-auth/AAN25HX7WSYVQOMHIRSVKODQP5CLRANCNFSM4JBDJK4Q].

AlCap23 commented 5 years ago

The early prototypes can be found here with simple examples.

Also, if you want to other methods for generating "readable" ( non neural network ) equations you should check out SInDy and symbolic regression. The SInDy algorithm works fine within "simple" models and measured tangent states. Here "simple" refers to no double pendulum since the dynamics are not traceable given the complexity of the acting constraints.

ChrisRackauckas commented 5 years ago

yeah SInDY is another one I was looking at. That example repo looks pretty awesome! The ModelingToolkit version makes it look surprisingly easy to use.

ChrisRackauckas commented 5 years ago

After a few more modifications (I assume you want to finish up the ModelingToolkit branch), I'd be willing to migrate it into DiffEq to setup a bunch of maintenance features, and then make a doc page in the main documentation for this feature.

AlCap23 commented 5 years ago

Thanks that would be awesome! Glad you like it. I probably will have another run by friday. Most likely - depends on how well the Modeling Toolkit integration goes - I can also implement SInDy.

I am also thinking about possible uses of DiffEqFlux in this domain, since this would really add a nice take on real world problems with uncertain or unknown measurements and is connected to my current research as well.

ChrisRackauckas commented 5 years ago

I am also thinking about possible uses of DiffEqFlux in this domain, since this would really add a nice take on real world problems with uncertain or unknown measurements and is connected to my current research as well.

Hehe, I'm publishing on this quite soon

AlCap23 commented 5 years ago

@ChrisRackauckas you can have another look.

I wrapped ModelingToolkit inside the basis for further use and implemented DMD, EDMD and SInDy with some tests ( all passing currently ). I still have to think about a continuous version of EDMD, but this is stuff for another branch.

There are still some things to do, e.g. provide NLOpt interfaces for SInDy , add some other DMD flavors and Implicit SInDy. And design discussion about interfaces :smile: .

ChrisRackauckas commented 5 years ago

Wow, looks like it's coming along quite well! The only other thing I was looking for was https://ieeexplore.ieee.org/document/7809160 , and that is what I was going to release as a DiffEq package. If you would like, we could pull this into the DiffEq domain and I will start adding the necessary stuff to get this registered and start generating the documentation pages. I'll message you privately about the research project.

AlCap23 commented 5 years ago

I started working on the ADMinitvary of the original repo and the related paper but this will probably take a few days to complete. I somehow think that this could be done via NLopt a little more reliable than my current implementation. But this has to be tested.

I would be happy if this work gets part of the DiffEq family! Looking forward to your message.

gabrevaya commented 4 years ago

Hi! I'm also interested in implementing SINDy on Julia. Specifically, I was thinking of trying to implement its SR3 version since it seems to be more robust and flexible to add features or variations. Afterward, I'd like to implement its autoencoder version. for jointly discovering a proper coordinate system.

I would be happy to collaborate on this, just let me know :)

AlCap23 commented 4 years ago

Hey! That would be awesome 😊. The Repo has moved here. The SInDy implementation should be easy to tweak. I did not have time to look into the SR3 paper on details. Also, the autoencoder option extends the loosely defined plan for a neural basis. If you have any questions, feel free to write me an email or on slack.

gabrevaya commented 4 years ago

Great! Thanks!! I didn't realized you already converted it in a JuliaDiffEq package 😃 I'll keep in touch via slack or email.

By the way, I've just noticed that the documentation link is broken.

AlCap23 commented 4 years ago

It's not up right now, but the examples should give you a good overview.

ChrisRackauckas commented 4 years ago

Implemented by DataDrivenDiffEq

Michaelhess17 commented 1 year ago

Has anyone implemented the Sindy Autoencoder version in Julia? I would prefer to keep my work in Julia and not Python/Tensorflow 1.X :)

ChrisRackauckas commented 1 year ago

The autoencoder version? No, that would be a good thing to add. @Vaibhavdixit02 make note (open an issue?)