2014-05-23 8 views
0

matlab 함수 블록에서 입력 값의 근원 인 모델을 사용했습니다. 입력은 항상 양수 여야합니다. 그러나 때때로 simulink는 음수를 제공합니다. 그 이유는 내가 암시 적 솔버 (ode15s는 시스템의 다른 부분이 딱딱하기 때문에)를 사용하고 시뮬링크가 잘못된 추정치를 가지고 있기 때문입니다. 내 질문은 : 어떻게 입력이 유효하지 않습니다 시뮬링크를 말할 수있는 솔버가 멈추지 않고 작은 단계를 취할 수 있습니까? 특수 값 (예 : NaN)을 반환하거나 시뮬레이션을 중지하지 않고 오류를 throw 할 수 있습니까? 입력이 음수 인 경우Simulink 반환 값이 잘못되었습니다.

답변

0

내 솔루션은 다른 출력 isInputValid를 추가하는 것이 었습니다. 입력이 유효하지 않은 경우 0이고 입력이 유효한 경우 1입니다. 이 출력은 새로운 통합 블록에 의해 통합됩니다. 부울 변수에 의해 생성 된 불연속성으로 인해 적분기가 더 작은 단계를 거친 것처럼 보입니다.

예 :

if (u<0) 
    y = -realmax; 
    isInputValid = 0; 
else 
    y = sqrt(u); 
    isInputValid = 1; 
end 

그럼 isInputValid의 출력 적분기 첨부.

0

당신은 당신의 MATLAB 기능 블록에 0을 반환 할 수 있습니다 u 입력 및 y 함수의 출력

if u<=0 
    y = 0; 
else 
    y = sqrt(u); 
end 

.

+0

감사합니다.하지만 시뮬레이션을 통해 잘못된 모델이 계속됩니다. 목표는 적분기가 뒤로 물러나 작은 단계를 거쳐 유효하지 않은 입력을 사용하지 않도록하는 것입니다. –

+0

나는 네가 원하는 것을 할 수 있다고 생각하지 않는다. 내가 제안 할 수있는 유일한 것은 시뮬레이션 파라미터에서 더 작은'MaxStepSize'를 지정하는 것이지만, 그것은 더 긴 시뮬레이션 시간을 만들 것입니다. – am304

0

Hit Crossing Block을 사용하면 신호가 0에 가까워지면서 솔버가 강제로 작은 시간 간격을 갖도록 할 수 있습니다. 이는 모델이 올바르게 설정되어 신호가 0보다 작지 않게 설정되었다는 가정하에 작동합니다 (예 : Abs 블록과 같이 작동하여 0을 치고 양수 값을 유지).

관련 문제