Próbuję użyć Yampy do jakiejś podstawowej symulacji systemu, tak jak robiłbym to w Simulink. W tym przypadku chcę symulować system sprężyn i tłumików, wprowadzony przez this simulink tutorial. Pisałem następujące funkcje sygnałowe do reprezentowania system:Symulowanie systemu sprężyny/amortyzatora w Yampie
system = time >>> force >>> displacement
force = constant (m * g)
displacement = feedback (-) (velocity >>> integral) (gain $ k/m) 0
velocity = feedback (-) integral (gain $ c/m) 0
Jeżeli funkcja feedback
tworzy basic feedback loop i jest realizowany tak:
feedback op a b b0 = loopPre b0 inner
where inner = arr (uncurry op) >>> a >>> (identity &&& b)
Aha, i:
gain x = arr (*x)
Z sensownymi dodatnimi stałymi, otrzymuję szalenie niestabilny system:
Czy jest coś złego w tym oczywiście sposób mam buduje sprzężeń zwrotnych lub stosujące integracji?
Doskonale, dziękuję za to! Zrobiłem kilka prostych testów z 'integral', więc nie sądziłem, że to był problem. "Skala jest wyłączona", masz na myśli oś poziomą? Mój kod nie wyznacza czasu, tylko numer każdego punktu danych. –
chuj, nie martw się o to, kiedy porównywałem matlab i simulink miałem coś z tego, co czyniło różnicę w skali y. – MdxBhmt
Dodanie opóźnienia transportu w Simulink powoduje, że system jest niestabilny podobnie jak ten, który znalazłeś, więc to musi być to. – MdxBhmt