2016-05-31 5 views
0

ode45을 사용하는 방법에 의문을 가지고 있습니다. 내부 가변 단계 크기를 사용한다는 것을 알고 있기 때문입니다. 예를 들어, 나는 ODE의 모델을 가지고 있으며 샘플링 시간은 5 분입니다. 따라서, 내 주요 시뮬레이션 루프 내에서 I는 ode45 사용하여 풀어 내 모델의 출력을 얻기 위해 다음 라인을 가지고 Matlab ode45 내부 단계

[T,X] = ode45(@(t,x) model(t,x,u,data),[t t+scenario.Ts],x0); 
u 모델의 입력이다

data 파라미터와 구조

, x0가있다 현재 시간 단계의 초기 조건 및 [t t+scenario.Ts]이 초기 및 최종 시간입니다. 내 의심의 여지가 tt+scenario.Ts ode45 - 솔버 사이에 가변 시간 단계를 사용하므로 내 입력 작업을 소개합니다 u 영향을받을 수 있습니다. 따라서 특정 입력 값 u[t t+scenario.Ts] 사이의 내부 시간 간격을 통해 일정하게 유지된다는 것을 알고 있습니다. 그런 다음, 예를 들어 탱크로 플럭스, 즉 물이 있다면, 시간 단계는이 u에 직접적인 영향을줍니다.

예를 들어 좀 더 설명해 드리겠습니다. [t t+scenario.Ts] 이상인 경우 나는 u(1) = 10을 알고 있습니다. 그렇다면 내가 사용해야하는 실제 입력은 u(1)=10/(# of time steps between [t0 tend])입니다. 그러나, 내부 단계가 가변적이어서 어떤 입력을 사용해야합니까?

내 문제를 이해하고 나를 도울 수 있기를 바랍니다.

+0

@ykaragol [제안 된 수정] (http://stackoverflow.com/review/suggested-edits/12534423)의 코드를 포맷하는 경우 다음 번에 모두 포맷하십시오. 그렇지 않으면 당신의 편집은 아무런 개선없이 거부 될 수 있습니다 ... – Matt

+0

'model' (또는 대표적인 실행 가능한 예)의 코드를 보지 않고 말하기가 어렵습니다. 시간과 관련하여 매개 변수를 변경하려는 것 같습니다. 비효율적이고 부정확 한 결과를 초래할 수있는 딱딱한 시스템을 만들 수 있습니다. 'model' 함수는 시간 간격의 함수가되어서는 안됩니다. 'u'는't' 또는 상태 벡터'x'의 함수 여야합니다. – horchler

답변

0

입력을 공식화하여 시간 이산 화와 관계가 없도록해야합니다. 연속 방정식을 공식화하면 문제가되지 않습니다. 제어 변수가 상수가 아니면 t에 명시 적으로 종속되도록하고 함수 u(t)을 작성해야합니다.

내 대답으로는 충분하지 않은 경우 응용 프로그램, 특히 시뮬레이션중인 동적 모델에 대한 자세한 정보를 추가하십시오. 그럼 우리가 더 당신을 도울 수 있습니다.