On Thu, Jun 26, 2008 at 11:18 AM, Mathieu Bouchard <[EMAIL PROTECTED]> wrote: > I fucked up here. To get a C2 curve you may need to solve an equation system > covering the whole table (!). Anyhow, a C1 system is fine enough for most > uses, and it would be already much better than pd's. > > The thing is that you can only match the 2nd derivatives if you let the 1st > derivatives just match but freely float. Then there will be one curve going > through all points of the whole table supposing that the 2nd derivative is > zero at the beginning and end of the table. Clearly this is a wholly > different game because you need to compute a 2nd table to remember what the > 1st derivatives are supposed to be and then you can't change anything in the > 1st table without recomputing the 2nd table from scratch, or something.
I get what you're saying now. I had to read it a couple times through to see :) You're referring to piecewise cubic polynomials, right? We would wind up with an overdetermined system of equations if we didn't float the 1st *and* 2nd derivatives, which would come out as a linear algebra problem of the size of the table. but I think it gets even worse. There could be a non-zero null space to the problem. There are infinite solutions to interpolate a table full of zeros, with these conditions. What a mess :) >> or we could set x[0],x[1] and x'[0]=(x[1]-x[-1])/2 and x'[1]=(x[2]-x[0])/2 >> again, 4 constraints, cubic polynomial, etc... > > Seems reasonable. What I want has to have constraints on x'[0] and x'[1]. > Those would be a possibility. The problem is that it uses a gap of 2 samples > instead of one, so it uses a "blurry" derivative, but the alternative is to > have to pick between forward-difference and backwards-difference. The > "blurry" derivative happens to be the average of the 1-sample > forward-difference and backward-difference. By expanding it out to more points, we could use a more accurate calculation of the derivative. There's always a frequency dependent effect on the accuracy of 1st derivative approximations. For example, backwards difference: x' ~= x[n] - x[n-1] X'[z] = X[z] ( 1 - z^-1) Which has spectrum, X'[w]=1-e^(-j*w) |X'[w]|^2=(1-cos(w))^2+sin(w)^2, phase (X'[w])=arctan( sin(w)/(1-cos(w)) ) our ideal system has X'[w]=j*w Central divided difference x' ~= (x[n+1] - x[n-1])/2 X'[z] = X[z] ( z - z^-1)/2 Which has spectrum, X'[w]=(e^(j*w)-e^(-j*w))/2 X'[w]=j*sin(w) It still has trouble with the high frequencies. So there might be some value in expanding the number of points to include better approximations. >> and x''[0]=x[1]-2*x[0]+x[-1] and x''[1]=x[2]-2*x[1]+x[0] >> 6 constraints, 5th degree polynomial > > I think that the replacement for tabread4~ should be another cubic, so that > it takes almost the same time to compute it. What I said about C2 was based > on a mistaken reading of webpages trying to refresh myself on splines. I > should've been more careful. Yeah, a cubic polynomial makes the most sense for small changes. I haven't ever heard of people interpolating 4 points with a 5th degree polynomial.... but I think I could make it work.... > The "blurry" derivative above seems to be fine... I'd have to try it, but I > should be working on other things now. I suppose that Cyrille already has > everything figured out anyway. I just feel like talking about math > sometimes... ;) It's all good by me :) Chuck _______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
