Since this is an unbuffered RC ladder, every stage will be influenced both by the previous, and the next stage, which means what you want to do is not exactly precise; it's an approximation, at best. it might get more accurate if the input stage has an output impedance, seen by the next stage's input impedance, much cgeater (10x or more), but it's unpractical.
For 100 stages or so, you may as well forget about solving this symbolically, but you could do it numerically. In doing so, you should get all the intermediary transfer functions, and then you should be able to get their impulse responses.
For example, a 3-stage RC ladder with no load (for simplicity) can be solved like this (I'll use wxMaxima since I am more familiar with it):
n:3$ /* number of stages */
v:makelist('V[k],k,1,n+1)$ /* voltage placeholders */
r:makelist('R[k],k,1,n)$ /* resistors */
c:makelist('C[k],k,1,n)$ /* capacitors */
/* construct the equations */
eq:makelist(v[k+1]*(s*c[k]+1/r[k]+(if k<n then 1/r[k+1] else 0))
=v[k]/r[k]+(if k<n then v[k+2]/r[k+1] else 0),k,1,n);
[V[2]*(C[1]*s+1/R[2]+1/R[1])=V[3]/R[2]+V[1]/R[1],V[3]*(C[2]*s+1/R[3]+1/R[2])=V[4]/R[3]+V[2]/R[2],V[4]*(C[3]*s+1/R[3])=V[3]/R[3]]
solve(eq,rest(v))[1][n]/v[1];
[V[2]/V[1]=(C[2]*R[2]*C[3]*R[3]*s^2+(C[3]*R[3]+R[2]*(C[3]+C[2]))*s+1)/(C[1]*R[1]*C[2]*R[2]*C[3]*R[3]*s^3+(R[1]*(C[2]*C[3]*R[3]+C[1]*C[3]*R[3])+R[2]*(C[2]*C[3]*R[3]+C[1]*R[1]*(C[3]+C[2])))*s^2+(C[3]*R[3]+R[1]*(C[3]+C[2]+C[1])+R[2]*(C[3]+C[2]))*s+1),
V[3]/V[1]=(C[3]*R[3]*s+1)/(C[1]*R[1]*C[2]*R[2]*C[3]*R[3]*s^3+(R[1]*(C[2]*C[3]*R[3]+C[1]*C[3]*R[3])+R[2]*(C[2]*C[3]*R[3]+C[1]*R[1]*(C[3]+C[2])))*s^2+(C[3]*R[3]+R[1]*(C[3]+C[2]+C[1])+R[2]*(C[3]+C[2]))*s+1),
V[4]/V[1]=1/(C[1]*R[1]*C[2]*R[2]*C[3]*R[3]*s^3+(R[1]*(C[2]*C[3]*R[3]+C[1]*C[3]*R[3])+R[2]*(C[2]*C[3]*R[3]+C[1]*R[1]*(C[3]+C[2])))*s^2+(C[3]*R[3]+R[1]*(C[3]+C[2]+C[1])+R[2]*(C[3]+C[2]))*s+1)]
subst(flatten(makelist([r[k]=R,c[k]=C],k,1,n)),%);
[V[2]/V[1]=(C^2*R^2*s^2+3*C*R*s+1)/(C^3*R^3*s^3+5*C^2*R^2*s^2+6*C*R*s+1),
V[3]/V[1]=(C*R*s+1)/(C^3*R^3*s^3+5*C^2*R^2*s^2+6*C*R*s+1),
V[4]/V[1]=1/(C^3*R^3*s^3+5*C^2*R^2*s^2+6*C*R*s+1)]
subst([R=1,C=1],%);
[V[2]/V[1]=(s^2+3*s+1)/(s^3+5*s^2+6*s+1),
V[3]/V[1]=(s+1)/(s^3+5*s^2+6*s+1),
V[4]/V[1]=1/(s^3+5*s^2+6*s+1)]
V[1]
is the input and V[n]
(=V[4]
here) is the output. The last two subst()
are only there for comparison: the first to show simplifications when all resistors are R
and all capacitors are C
, and the second when R=1, C=1
.
For 100 stages, the symbolic solver will, no doubt, both take a lot of time (if it will even have memory), and take a very large display, which means that, prior to running solve()
you will need numeric substitution. it's still not guaranteed you'll be able to solve it, given the exponentially increase in numerical errors (see the Wilkinson's polynomial, for example).
The same goes for finding out the impulse response, since it relies on partial fraction expansion (you said you don't want to use a simulator) to find out the poles and the residues, after which the formula would be:
$$h(t)=\sum_{k=1}^N{\text{e}^{\Re(p_k)t}[\Re(r_k)\cos(\Im(p_k)t)-\Im(r_k)\sin(\Im(p_k)t)]}$$
Since it's an RC network, the poles will all be real, so the root finding algorithms should have less of a hassle.