2014-11-02 3 views
0

Я пытаюсь решить следующую нелинейную систему дифференциальных уравнений , но я не понимаю, где проблема в коде, который я написал. Система нелинейна с комплексными коэффициентами и комплексной областью.Нелинейная система дифференциальных уравнений

from pylab import * 
from scipy.integrate import ode 

#------initial parameters------ 
c = 3 * 10 ** 8 
h = 6.626/(2 * pi) * 10 ** -34 
kb = 1.3806 * 10 ** -23 
TT = 0.1 
mm = 1.50 * 10 ** -10 
wM = 2 * pi * 10 ** 6 
gM = 2 * pi * 10 ** 2 
ll = 1064 * 10 ** -9 
PL = 100 * 10 ** -4 
L = 0.025 
k = 1.340 * 10 ** 7 
D0 = wM 
Ns = 2083 
wL = 2 * pi * c/ll 
wC = D0 + wL 
aL = sqrt((2 * k * PL)/(h * wL)) 
G0 = wC/L * sqrt(h/(mm * wM)) 
tau = 1/k 

tciclo = 3 * pi/wM 
tauP = 0.5 * pi/wM 
tauNP = tciclo - tauP 
dtau = 1/(10 * k) 


def fun(t, y, wM,gM,G0,k,D0,aL): 
    return [wM * y[1], 
      -wM * y[0] - gM * y[1] + G0 * y[2]*y[2].conjugate(), 
      -(k + 1j * D0) * y[2] + 1j * G0 * y[0] * y[2]+aL] 


y0 = [0.0, 0.0, 0.0] 

r = ode(f).set_integrator('zvode', method='bdf') 
r.set_initial_value(y0, 0).set_f_params(2.0) 

tt = [] 
yy = [] 
while r.successful() and r.t < tauP: 
    r.integrate(r.t + dtau) 
    tt.append(r.t) 
    yy.append(r.y) 

plot(tt, yy) 
show() 
+4

traceback или любые сообщения об ошибках? – najjarammar

+1

Вы опечатали 'ode (f)', когда вам нужно «ode (fun)». 'f' исходит из' from pylab import * 'и является функцией, которая вычисляет случайную переменную из f-распределения ... Вторая проблема заключается в том, что' def fun (t, y, ...) 'включает большой список дополнительных аргументов, но вы даете только одно значение в 'set_f_params'. –

ответ

0

Всегда включайте сообщение об ошибке в свой вопрос. Если у вас нет ошибок, включите вывод, который у вас есть, и объясните, почему это не то, что вы ожидали.

Сказав это ... Я вижу по крайней мере одну проблему с вашим кодом. fun имеет стандартные аргументы t и y, за которыми следуют параметры wM,gM,G0,k,D0,aL. Вы должны указать значение для каждого из этих параметров при вызове set_f_params(). В настоящее время у вас есть set_f_params(2.0), но для этого вызова требуется шесть аргументов для соответствия дополнительным параметрам fun.

В комментарии, @pv. указал на вторую проблему: ode(f) должен быть ode(fun).

+0

Благодарим вас за ответ так быстро. Я заметил опечатку, как только я разместил вопрос. Я установил параметры, и теперь все правильно. – Kowalski

+0

У меня есть другой вопрос: как я могу решить систему выше в случае aL, определенного как функция периодического шага? – Kowalski

+0

Комментарии не подходят для решения этого вопроса. Вместо этого создайте новый вопрос. –

Смежные вопросы