Efficiently evaluating ODE event that depends on only some variables
    조회 수: 4 (최근 30일)
  
       이전 댓글 표시
    
I'm simulating an N-body problem in the plane.
I want to know when the three particles that are closest to each other are collinear. (Supposing I have a MATLAB function that identifies the "three closest particles.")
Suppose that I have a function f(z1,z2,z3) that vanishes when the particles z1, z2, z3 are collinear.
Right now my simulation evaluates a vector containing all  triples of particles and records all the times any triple is collinear.
triples of particles and records all the times any triple is collinear.
 triples of particles and records all the times any triple is collinear.
triples of particles and records all the times any triple is collinear.Then at the end of the run, I sort through all the events and throw away all the ones where the particles are not "the three closest." 
I would rather compute this during the ODE simulation and not afterward. I'd like to construct a new event g that gets triggered whenever f(z1,z2,z3)=0 and z1, z2, and z3. are the closest.
The events construct doesn't seem well-suited to this situation, since it detects zero crossings and the second half of my event is just a boolean. Is there a workaround?
댓글 수: 0
답변 (1개)
  Torsten
      
      
 2023년 12월 4일
        
      편집: Torsten
      
      
 2023년 12월 4일
  
      Use OutputFcn to check your condition after each successful time step.
But I think it will be difficult to check for complanarity for a time-dependent system. It's like checking if a variable equals 0 - floating point arithmetic and the discrete time stepping will hinder to correctly detect such events. 
참고 항목
카테고리
				Help Center 및 File Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




