Как ускорить NDSolve?

Форум пользователей пакета Mathematica

Модератор: Admin

kostey
Сообщения: 2
Зарегистрирован: Пт ноя 02, 2012 1:54 pm

Как ускорить NDSolve?

Сообщение kostey » Пт ноя 02, 2012 2:08 pm

Доброго дня.
Столкнулся с проблемой невероятно медленного решения системы дифференциальных уравнений при помощи NDSolve.
Была идея создать начальные условия близкие к решению, но результатов эта попытка не принесла.
Предложите, пожалуйста, способ ускорить решение.

Заранее благодарен за помощь.

Вот кусок кода, ответственный за это дело:

var = Flatten[Join[Table[pw[s][i][t], {s, 1, npw}, {i, 0, n}]]]; (*список переменных, npw = 5, n=101*)
IC = Flatten[Join[Table[pw[s][i][0] == cbw[s], {s, 1, npw}, {i, 0, n}]]]; (*начальные условия, npw = 5, n=101*)

PDEd := D[pw[s][i][t], t] == diffd[s][i][t] + bioI[s][i][t] - advpw[s][i][t] + Rpw[s][i][t];

ODEsys = Flatten[Join[
Table[PDEd, {s, 1, npw}, {i, 1, n - 1}],
Table[(pw[s][n]')[t] == diffdL[s][t] + bioI[s][n][t] - advpwL[s][t] + Rpw[s][n][t], {s,1, npw}],
Table[ D[pw[s][0][t], t] == diffd[s][0][t] + bioI[s][0][t] + Rpw[s][0][t]/. Solve[-porx[0]*difs[s][0]*dcdxpw[s][0][t] == difc[s]/zdbl*(cbw[s]-pw[s][0][t]),pw[s][-1][t]] [[1,1]], {s, 1, npw}]
]];

lines = NDSolve[Flatten[Join[ODEsys, IC]],Flatten[Join[{var}]], {t, 0, tmax}, MaxSteps -> Infinity, AccuracyGoal -> 8, PrecisionGoal -> 6, (*Method->"StiffnessSwitching",*)StepMonitor :> Print[t]];