Short version: Do the methods (or other things the function uses to solve the equations like time steps or error estimates) that NDSolveValue uses by default depend on the types and quantity of equations passed to it? If so, is there an easy way to see what is automatically being used in different cases? I really just need to be more aware of the ways I can look under the hood at how Mathematica is solving my equations. Below is more background and specifics if needed.
EDIT The answer by MichaelE2 below gives good things I can edit in NDSolve, but what if I want to look at what NDSolve is doing automatically in each case? How can I see what methods, time steps, errors, etc. are being used at specific points in the time integration?
I am attempting to solve multiple coupled, first order, ordinary differential equations using NDSolveValue. Here is the background. I am modeling some processes that take place in a biological cell. I have a set of 11 coupled differential equations representing various quantities for a single cell. I am then looking at a "grid" of cells (a cell tissue). Currently, each cell is independent from all other cells, but each cell does differ with respect to a single parameter that depends on the location of the cell in the tissue. Since we have independent cells, what I have been doing is just using NDSolveValue to solve the set of 22 equations (11 deqs and 11 initial conditions) multiple times, once for each cell. Currently I am looking at about 250 cells, so I am calling NDSolve 250 times, each time giving it 22 equations.
I now want to include a term in one of the differential equations that actually couples certain cells together. The basic form of the term just looks like
where fluxIP3 is what is coupling the cells together, and gjPerm is just a parameter that sets the strength of this coupling. Because of this new term, I now have to specify 11 separate dependent variables for each cell. Therefore, the new way I am using NDSolveValue is giving it 250*22 equations (number of cells*number of equations) all at once, but only calling it one time. To check that my new code is the same as the old code, I have set the gjPerm parameter to 0. So the only difference between the old and new methods is that I am solving the equations for all of the cells at once rather than solving the equations multiple times for each cell.
The issue I am having is that some (not all) of the solutions for a cell are different between the old and new methods. Below are three examples. One where the solutions match, and two where they do not. The plots are a signal value with respect to time (the independent variable in the differential equations).
Plotting the maximum difference between the new and old solutions for each cell shows how some solutions match and some do not. The parameter that differentiates one cell from another is determined randomly, so there is nothing to be gained from looking at which cells are messing up just in terms of the cell number on the horizontal axis.
I have tried making the new code from the old code multiple ways, but I have gotten the same results. Therefore, I do not believe that I have made a mistake in the code. The next thought I am having is that Mathematica is solving the equations differently since the old way only involves solving 22 equations whereas the new version solves 250*22 equations. As evident from the examples, it seems like differences arise in cells where this signal is too high for too long. How can I check how Mathematica is treating these equations, and does anyone have any advice as to solving multiple differential equations? I just need a good way to "look under the hood" I guess. But maybe I am approaching this all wrong, so really anything is appreciated.
I am also wondering which numeric solution is closer to the actual solution. I am guessing that the solution where I pass fewer equations to NDSolve is better, but if someone thinks otherwise let me know.