Frequency and phase response of various filters
The normal way to solve these problems is as stevenvh described.  LaPlace transforms and complex analysis are used because such problems are easier to solve by humans in that space.

However, this was all before there were computers with essentially unlimited and free compute cycles.  It is possible to get meaningful answers from purely time domain analysis.  It will take the computer way more cycles, but so what?  Nowadays what you want to conserve are your time and effort.

Of course everything can be solved in the time domain somehow.  After all, the real signals exist there.  Imaginary components are, well, imaginary.  They are useful mathematical aids in understanding and manipulating signals where both the frequency and phase are relevant.  Using such mathematical abstractions greatly reduces the computation, but they are not neccessary.

Programs like Spice do pretty much everything in the time domain, I think.  They look at the voltages and currents at any one time, then use that to decide what the voltages and currents are a little tiny step further in time.  The computer does this a few million times in a row and now you've got real signals as a function of time.  The tricky part here is to decide how long those computational time steps are.  Too long, and the computation will miss details and get the wrong answer.  Too short, and intermediate increments will be so small they will be lost when added to the existing values.  This latter part depends on the number precision used inside the computer.  For example, with normal IEEE 32 bit floating point, if increments are 65000 times smaller than the thing they are adding to, the increment is effectively limited to 8 bits resolution.  To get around this, the simple answer is to use the highest precision floating point the computer has.  This is usually called something like "double precision" in most languages.  That may take a little more time in the computer to manipulate the wider numbers, but again that's pretty much irrelevant.

If you try this path, you need to model the various resistors, capacitors, and inductors in incremental form inside the computer.  Or you can model the whole filter incrementally in some cases.  For example, the algorithm for a single pole RC low pass filter is:

&nbsp;&nbsp;FILT &lt;-- FILT + FF(NEW - FILT)

This is very common inside microcontrollers where it is applied to real world readings with some noise on them, for example.

Once you have code that models the filter of interest, you create a higher level that successively sends it sine waves of different frequencies.  After waiting to make sure the filter has reached steady state for each frequency, you look at the amplitude and phase of a output cycle relative to the input cycle.

To be clear, I actually agree with stevenvh that using complex impedance is the best way to analyze such things.  My main intent was to point out that you don't need complex math to solve this problem, or any problem in electronics for that matter, only that it can make it much simpler.  I also wanted to point out that in today's world trying to conserve computation is wrong headed.  That may have applied 20 years ago, or perhaps even 10 years ago, but not today.

Another point is that you need to learn complex math.  You've got no business trying to be a electrical engineer, or pretty much any type of engineer, without it.  So instead of finding ways to avoid complex analysis, dig in and learn it.  This is a important tool every EE must have at his disposal.