Home | 18.013A | Chapter 26 |
||
|
We seek the solution of a first order differential equation of the form
and we will assume that we know y(a) and wish to find y(x) for arguments between a and b, and in particular want to find y(b).
We consider the example
below with a = 0, b = 1 or 2 and y(0) = 1, to illustrate the methods discussed.
We want to break up the interval [a, b] into small subintervals, each of length d and for each subinterval approximate the change in y by an estimate of in it, multiplied by d.
With ordinary integration we had many different ways of estimating f, a left rule, right rule, trapezoid rule, or Simpson rule, and others as well, based upon using the values of f at various arguments within the subinterval.
The complication here is that we do not know the value of y anywhere but at the point a, or more generally, we can only expect to have an approximate value for y at the left hand side of our subinterval based upon our computations on previous subintervals. In fact the purpose of our treatment of that subinterval is to extend our estimate of y on its left end to an estimate of y on its right end.
In consequence of this fact, we have to use some procedure for estimating y
in the subinterval in order to apply any of the previous techniques other than
the left hand rule.
This complication does not affect the left hand rule; so we first ask,
how can we apply that rule? And then: is it possible to get an accurate
numerical solution by use of the left hand rule?
The left hand rule discovered by Euler and others, consists of making the
estimate for the change in y over the interval x to x + d
y(x + d) - y(x) = f(x, y(x))*d
and successively applying it to each subinterval between a and b to compute y(a + j*d) successively for each j and compute ultimately y(b). It involves computing the change in y over each interval by using the value of x and y obtained previously at the left end of the interval in f(x, y).
This method has the virtue that it is extremely easy to implement on a spreadsheet. It has the defect that it is not very accurate. It is asymmetric between the endpoints of each subinterval, and as a result, if you decrease d by a factor of two, the leading error term goes down by a factor of two. As a consequence, to improve accuracy by a factor of 1000 you have to reduce d by a factor of 1000, and that is not an efficient way to solve such differential equations.
The following instructions implement this rule for f(x, y) when the last row here is copied or filled down N - 1 rows. These are columns A, B, C and D and rows 1-9.
To switch to a different differential equation you need only change the D9 entry appropriately and copy the results down.
A |
B |
C |
D |
1=row number |
Left Hand Rule |
f(x,y)=x+y |
2 |
||
enter a |
0 |
3 |
||
enter b |
1 |
4 |
||
enter N |
64 |
5 |
||
enter y(a) |
1 |
6 |
||
d |
=(B4-B3)/B5 |
|
7 |
|
interval index |
X |
Y |
f(x,y) |
8 |
0 |
=B3 |
=B6 |
=B9+C9 |
9 |
=A9+1 |
=B9+$B$7 |
=C9+(B10-B9)*D9 |
=B10+C10 |
10 |
The interval index plays no role here and is included only to allow convenient checking that you have enough rows for your computation. (You could omit it.)
We can use extrapolation to improve performance here, just as we used it for numerical differentiation in Chapter 7 and for numerical integration in the last previous chapter.
Suppose we characterize our subdivision of the interval [a, b] by the number of subintervals N. Let us refer to the result of applying the left hand rule here as just described as L(N). To compute L(N/2) given your computation of L(N) you need only copy the whole thing over elsewhere, switch the entry in B10 by multiplying the second term by 2, and copy that entry down. The answer will appear after half as many steps.
We can then define an extrapolated left hand rule, L2(N) whose accuracy should improve by a factor of 4 when N is replaced by 2N, by
L2(2N) = 2L(2N) - L(N)
This rule should then have behavior not far from that of the trapezoid rule. And we can do better by extrapolating this rule, to form L3:
L3(2N) = (4*L2(2N) - L2(N))/3
This should cause errors to decrease by a factor of 8 on doubling the number of intervals, and we can extrapolate again, to form L4, and so on, according to the rule
Lj(2N) = ((2j-1)* Lj-1(2N) - Lj-1(N))/(2j - 1-1)
Surprisingly enough, you can achieve considerable accuracy this way. L(32) is not very accurate, and L(1), L(2), L(4), ..., L(16) are worse, but they permit computation of L6(32) which is much better.
Exercise 26.1 Set up a spreadsheet to compute these for f(x, y) = x + y, a = 0, b = 1 with y(a) = 1 and compute L6(64) for the value of y at x = 1.
The results obtained for y(2) for this problem are as follows. The proportional error is described in the second table
N |
L |
L2 |
L3 |
L4 |
L5 |
L6 |
L7 |
L8 |
1 |
3 |
|||||||
2 |
5 |
7 |
exact answer |
= |
11.7781122 |
|||
4 |
7.125 |
9.25 |
10 |
|||||
8 |
8.921 |
10.71686 |
11.20581 |
11.37807 |
||||
16 |
10.17 |
11.41207 |
11.64381 |
11.70638 |
11.728268 |
|||
32 |
10.92 |
11.66817 |
11.75353 |
11.76921 |
11.773395 |
11.77485027 |
||
64 |
11.33 |
11.74777 |
11.77431 |
11.77727 |
11.777811 |
11.77795396 |
11.77800322 |
|
128 |
11.55 |
11.77013 |
11.77758 |
11.77805 |
11.778098 |
11.7781071 |
11.77810953 |
11.77811037 |
It is quite remarkable, but even going back to the one interval approximation improves the final answer, by allowing one more extrapolation
N\L index |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
-0.7453 |
|||||||
2 |
-0.5755 |
-0.405677 |
-1 |
|
|
|
|
|
4 |
-0.3951 |
-0.214645 |
-0.15097 |
|
|
|
|
|
8 |
-0.2426 |
-0.090104 |
-0.04859 |
-0.03396 |
|
|
|
|
16 |
-0.1368 |
-0.031078 |
-0.0114 |
-0.00609 |
-0.00423 |
|
|
|
32 |
-0.0731 |
-0.009335 |
-0.00209 |
-0.00076 |
-0.0004 |
-0.000277 |
|
|
64 |
-0.0378 |
-0.002576 |
-0.00032 |
-7.1E-05 |
-2.6E-05 |
-1.34E-05 |
-9.25E-06 |
|
128 |
-0.0193 |
-0.000678 |
-4.5E-05 |
-5.6E-06 |
-1.2E-06 |
-4.33E-07 |
-2.27E-07 |
-1.56E-07 |
Proportional Error for Left Hand Rule y' = y + z, y(0) = 1, finding y(2) |
It can be seen by these results that using the simplest possible numerical method and extrapolating the hell out of it, can actually give accurate results.
Note here that all extrapolation was done with the final answers at x = 2 obtained using the left hand rule. You could obtain slightly better results by applying the extrapolations at intermediate x values, as soon as they become available to improve all the computations.
Thus the first extrapolation could be applied to update y after two intervals, the second after each set of four intervals, etc. This reduces the effect of errors in y compounding, which is only slightly helpful here.
Obviously you do better the smaller you make d, that is, the large you make
N.
But here extrapolating using smaller values of N is much more effective than
doubling N in improving the answer.
|