Wpis z mikrobloga

[rewpis xD]
Mireczki #matlab może też #python
Pytam w imieniu mojego zrozpaczonego ziomeczka. Mamy do zrobienia zadanie tyczące się optymalizacji.
Zadanie polega na znalezieniu optymalnego rozwiązania dla parametrów w równianiu różniczkowym.
Kod napisałem w pythonie, działa idealnie. Tymczasem on przepisując to na matlaba na wyjściu funkcji ode45 dostaje wartości zespolone. Model przekopiowany, linspace taki sam, wszystko takie samo w sumie a, moje ode zwraca wartości dodatnie, tymczasem u niego z czasem pojawiają się zespolone przez co optymalizacja traci sens.

Kody dla porównania, jego i mój. Może ktoś wpadnie na pomysł czemu sie tak dzieje? Ja matlaba nie ogarniam i nie czaje obowiązujących w nim zasad, może wy bylibyście w stanie dostrzec z miejsca jakiś błąd.
Python:
www.wklejto.pl/555897
Matlab:
www.wklejto.pl/555922
  • 3
@cl_master: Z tego co pamiętam, to scipy odeint z pythonga i ode45 w Mathlabie wykorzystują zupełnie różne algorytmy do obliczania równań różniczkowych. Może w tym przypadku zadanie jest na tyle skomplikowane, że ta funkcja po prostu nie radzi sobie z problemem. Powiedz ziomeczkowi, żeby spróbował czegoś bardziej "wyrafinowanego", np. ode113.
@cl_master: Tak ogólnie to nie wiem dlaczego, ale się wypowiem. Te kody coś mi nie wyglądają na równoważne.
Brzydkie:

dout = [dh1dt,dh2dt];
dout = dout(:);

To powinno zostać zapisane jako:

dout = [dh1dt;dh2dt];
Po drugie funkcja ode45 może być wywoływana z taką listą parametrów:

[t,y] = ode45(odefun,tspan,y0)
[t,y] = ode45(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)

gdy u Ciebie jest to:

[f,val] = ode45(@model,t,y0,ode_options, parametry,u,t2);
Nie wiem dlaczego Matlab nie protestuje jak podajecie mu