I occasionally get to think about fun math problems while I’m doing work in applied science. The most recent example of this came up in a conference call. We are concerned about how a satellite measurement will respond to surface pressure changes. Theoretically, the measurement is an integral of the amount of a trace gas in the column, multiplied by an instrument specific kernel:
Note that the Fundamental Theorem of Calculus tells us that the sensitivity of this quantity with respect to surface pressure should exactly be the integrand evaluated at
. One of my collaborators asked me to verify that this was also true for our model approximation, which is a simple numerical calculation of this integral. I thought it would be a piece of cake. In our model coordinate system, the vertical coordinate is specified as a function of the surface pressure so that the model levels follow the terrain. This means that the knots on which we compute the numerical approximation also depend on the surface pressure. More specifically, we have vectors
and
, so that the vertical coordinate is
. For simplicity, let
A simple right hand approximation (since the surface pressure occurs at the right end of the integration domain) would be
Now, the right hand side is a function of only, and is easily differentiable using the product rule. After taking a derivative, one would expect that some nice math tricks would lead us to canceling of terms, so that we end up with only
, but try as I might, I couldn’t get it to come out. This could easily be due to my own lack of cleverness, but a bit of time searching via Google turned up no results for the problem either. I’m hopeful that a clever mathematician out there can figure out some conditions on
and
that would force this to be true, but I’ve had to put it aside for now, after trying multiple approximations (left hand, trapezoid, Gaussian quadrature).
Numerical evidence suggests that in fact the statement is not true. I ran the (Enthought Distribution) Python script:
x = linspace(0,1,11)
y = x**2
for i in arange(10):
xn = linspace(0,1.+10.**(-i),11)
yn = xn**2
dquad = (trapz(xn,yn)-trapz(x,y))/(10.0**(-i))
print dquad
In this case, the surface pressure would be 1. An important facet of the problem is keeping the number of knots (11) fixed as we take the limit (as ) . Running the script, you’ll note that the limit appears to be in the neighborhood of 2 (before roundoff kills the computation), even though it ought to be 1. Further experimentation with different degrees of polynomials points to a what may be an interesting math result, which I’ll let you discover for yourself.
I am posting this in the hope that someone will think the problem is interesting enough to have a whack at it. It seems unsatisfying that our tried and true numerical methods would fail such a simple test.