我有一個模型,它將輸入的根作爲一個matlab函數塊。投入應始終爲正;但是,有時simulink會給出一個負數。原因是我使用隱式解算器(由於系統的其他部分僵硬而導致ode15s),並且simulink具有無效估計。我的問題是:我怎麼能告訴simulink輸入無效,這使得求解器採取更小的步驟(不停止)?我可以返回一個特殊值(例如NaN)還是拋出錯誤(不停止模擬)?Simulink返回無效輸入
0
A
回答
0
我的解決方案是添加另一個輸出isInputValid。如果輸入無效,則爲0;如果輸入有效,則爲1。這個輸出然後被一個新的集成模塊集成。看起來布爾變量產生的不連續性確保積分器採取更小的步驟。
實施例:
if (u<0)
y = -realmax;
isInputValid = 0;
else
y = sqrt(u);
isInputValid = 1;
end
然後積分器附加到isInputValid的輸出。
0
您可以在MATLAB功能塊返回0
如果輸入的是否定的:
if u<=0
y = 0;
else
y = sqrt(u);
end
其中u
是輸入y
函數的輸出。
0
使用Hit Crossing Block強制求解器在信號接近零時花費很少的時間步長。假設你的模型設置正確,強制信號不低於零(即它的作用類似於一個Abs模塊,它將達到零,然後繼續一個正值),這將工作。
相關問題
- 1. 的RegularExpressionValidator返回NULL無效的輸入
- 2. Python:用戶輸入和無效返回
- 3. ssconvert返回無效輸出
- 4. FPGA輸入到Simulink
- 5. 返回無效
- 6. RegularExpressionValidator對於有效輸入返回false
- 7. RegularExpressionValidator對有效輸入返回false
- 8. 如果輸入無效,int函數應該返回什麼?
- 9. 無效字符輸入上的JavaScript返回錯誤消息
- 10. Python - 如果輸入無效,則返回到函數的開頭?
- 11. 谷歌recaptcha由於「無效輸入祕密」返回假
- 12. 返回值無效
- 13. Simulink的輸入信號
- 14. 無效日期返回無效日期
- 15. JavaScript RegExp在每個有效和無效的輸入中返回false
- 16. MBaaS推送服務返回FPWSE0004E儘管輸入有效,但JSON無效
- 17. RSS輸入無效
- 18. res.json返回無意修改的輸入
- 19. 輸入值返回
- 20. Math.atan()返回輸入
- 21. formencode無效返回類型
- 22. accept()返回無效參數
- 23. MKMapPointForCoordinate返回無效座標
- 24. UIViewController返回無效幀?
- 25. GetOpenIdConnect返回憑據無效
- 26. 返回無效的引用
- 27. 收益率返回無效
- 28. NSRegularExpression返回無效範圍
- 29. pthread_mutex_lock返回無效參數
- 30. Waitformultipleobjects返回無效句柄
謝謝,但這將使仿真繼續以假模型。目標是集成商退後一步並採取較小的步驟,以便它不使用無效輸入。 –
我不認爲你可以做你想做的事。我可以建議的唯一的事情是在模擬參數中指定一個較小的'MaxStepSize',但這會使模擬時間更長。 – am304