An optional argument is when a function may use more than the positional arguments but this left to the caller. But what I want is the caller somewhere in the middle of the call chain not to know or care about the optional arguments.

I have a function that solves equations of a certain form without needing to know all about it in an attempt to keep it generic. This can be achieved by requiring all equations that need solving to specify args even if they don't use it, but I think this is a bit hacky. Is there a better way to handle this?

Yes, later figured too to just check args and pass it or not depending on the test result, but I don't think the code duplication is worth it.

I still think though that a class would clean this code up.

I will consider this option and see if I can do it in a way that makes sense.

Plus your non-meaningful variable names makes it hard to read.

Yes you are right, but these are the typical variable names you see everywhere in Runge-Kutta descriptions and implementations and I'm not sure what else to call them. This is only for a first order differential equation, for a second order DE it's even worse ...