2013-03-28 2 views
2

많은 다른 매개 변수 (이 매개 변수는 미분 방정식의 계수)에 대해 ode45를 사용하여 ODE 시스템을 해결하고 있으며 솔루션의 크기가 더 작은 매개 변수를 찾고 싶습니다. 주어진 값보다 크지 않다. 수 나는 시스템 및 정지 추가 단계에 대한 해결을 해결하면서 (이러한 매개 변수 중 일부에 대한) 솔루션이 그 (주어진) 값 보다 큰 얻는 경우 자동으로 "검색"을, ode45에 조건을 설정하는 방법MATLAB ode45 결과에 대한 조건 설정 (실행 중일 때)

?

1 월에 다음과 같은 조건을 입력 함수의 정의에 넣어서 int로 제안했습니다. 나는 이것을 시도했지만 작동하지 않는다. 몇 가지 단계를 거친 후에 (그리고 조건이 맞지는 않지만) 결과가 일정하게 유지되면서 반복이 끝나고 곧 종료된다. (잘못된 출력)

(QM, U, V, 등이다 상수와 X가 4 열)

[T,X]=ode45(@acceleration,tspan,x0); 


function xprime=acceleration(T,X) 
    size_X=length(X); 
    xprime=zeros (4,1); 
     if X(size_X,1)>threshold 

    xprime(1)=0; 
    xprime(2)=0; 
    xprime(3)=0; 
    xprime(4)=0; 

     else 

    xprime(1)=X(3); 
    xprime(2)=X(4); 
    xprime(3)=X(1)*X(4)^2 - 2*qm*(U+V*(cos(w*T)))*F1(num,X(1),X(2)); 
    xprime(4)= -2*X(3)*X(4)/X(1) - qm*((U+V*(cos(w*T)))/(X(1)))*F2(num,X(1),X(2)); 

     end 
    end 
  • 위의 코드의 문제점은 무엇입니까?
  • 누군가가 모니터링 기능을 ode45에 연결하도록 제안했습니다. (here). 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사합니다

답변

1

Matlab ODE 해결사에 내장 된 옵션이 보이지 않습니다.이 옵션은 용도에 맞게 사용할 수 있습니다.

그러나 y' = f(t,y)에서 오른쪽면을 수정할 수 있습니다. 나는

  • IF y > threshold THEN f(t,y) = 0의 생각 -이 방법 확실하지 않음 (단 현재 반복을 취소하는 것이, ODE45
  • 또는 예외를 발생으로 인해 스텝 크기 제어의 반복의 빠른 끝에 연결되어야합니다 do);
+0

도움 주셔서 감사합니다. scicomp.stackexchange에서이 질문을하기 전에 누군가가 ode45에 모니터링 기능을 부착 할 것을 제안했습니다. 여기 [link] (http://scicomp.stackexchange.com/questions/5383/setting-a-condition-on-matlab-ode45-output?noredirect=1#comment10331_5383). 어떻게해야할까요? –

+0

나는 당신의 제안을 시험해 보았다. 하지만 작동하지 않습니다. (위에서 언급했듯이) 그 문제는 무엇입니까? –

+0

동작이 예상대로입니다. 어쩌면 당신의 스위칭 상태가 옳지 않을 수도 있습니다. 네 번째 구성 요소를 확인 하시겠습니까? size_X가 원하는대로 작동하는지 확인해보십시오. – Jan

0

시간이 지남에 따라 방정식 세트를 풀어 주시겠습니까? fsolve 또는 fmincon을 사용해야하는 것처럼 더 많은 정보가 없다면 어떻게 될까요?

실제로 통합하는 경우 이벤트 기능을 사용하여 중지하려는 ode45를 나타낼 수 있다고 생각합니다. ballode 예제가 도움이 될 수 있습니다.

관련 문제