I have two coupled nonlinear partial differential equations of the form:
$ \begin{align} \dot{u} -f(u,u',u'',v,v',v'')=0 \\ \dot{v} -g(u,u',u'',v,v',v'')=0 \end{align} $
The boundary conditions are such that I know $u$ at time $t=0$ and $v$ at time $t=-\infty$. I also know the values of both functions at the two boundaries of coordinate interval. I need the solution for $x \in [0,1]$ and $t \in (-\infty,0]$ For a specific parameter value I also know an analytical solution and this allows me to tune this parameter little by little and then solve the equations by using as an initial guess for solution my solution for previous parameter value.
I'm solving this by writing $ S \equiv (\dot{u} -f(u,u',u'',v,v',v''))^2 + (\dot{v} -g(u,u',u'',v,v',v''))^2 $ and then finding the minimum of S and verifying that it is approximately zero. Currently I'm doing the minimization by discretizing $u$ and $v$ on my time and coordinate grid and then using conjugate gradient algorithm from SciPy optimization library. This gives me good results, but is terribly slow for larger grids. For a grid with $10^4$ grid points my solver is already not feasible.
My questions:
1) Which minimization algorithm is best for this sort of task? Conjugation gradient seems to require a lot of steps to converge to the solution.
2) What external libraries there are for solving this kind of problem? I'd prefer ones with a Python API. I looked at some finite element libraries and they seem like a bit of an overkill for this problem.