The sine integral. (This is featured in problem 92 on page 400.) f:=x->int(sin(t)/t,t=0..x); f := proc (x) options operator, arrow; int(sin(t)/t, t = 0 .. x) end proc plot(f(x),x=0..8*Pi); NiYtJStBWEVTTEFCRUxTRzYkUSJ4NiJRITYiLSUnQ1VSVkVTRzYkN1txNyQkIiIhIiIhJCIiISIiITckJCIrJmViJnA4ISM1JCIrWyNIIm84ISM1NyQkIitxNjZSRiEjNSQiKz0oPnhzIyEjNTckJCIrY25tM1QhIzUkIitvJkcuMiUhIzU3JCQiK1RCQXlhISM1JCIrXE5xKFEmISM1NyQkIitOYCcpcG0hIzUkIitBRj8ybCEjNTckJCIrRCQzOid5ISM1JCIrO1hgJ2YoISM1NyQkIis/ODpgISohIzUkIitkKkc0bCkhIzU3JCQiK0olelctIiEiKiQiK0YpNGZtKiEjNTckJCIrW0BcZTYhIiokIitmSV52NSEiKjckJCIrbVtdI0giISIqJCIrL0NSeTYhIio3JCQiKyVlPGxVIiEiKiQiKylvZFpGIiEiKjckJCIrLC5gZzohIiokIit5Xz9rOCEiKjckJCIrI1FLLiQ9ISIqJCIrajIuQTohIio3JCQiK2tXOCtAISIqJCIrL1J2WzshIio3JCQiK0JVbG9CISIqJCIrTVhYVjwhIio3JCQiKyMpUjxQRSEiKiQiKzRiWzI9ISIqNyQkIit4K2xoRiEiKiQiK3giR3MjPSEiKjckJCIrc2g3JylHISIqJCIrczAsVD0hIio3JCQiKz9VT1tIISIqJCIrJWVlZCU9ISIqNyQkIituQWc1SSEiKiQiK249OFw9ISIqNyQkIis5LiVHMiQhIiokIisoKVE8Xj0hIio3JCQiK2kkeV04JCEiKiQiKypHST4mPSEiKjckJCIrYkFfKj4kISIqJCIreCY0OSY9ISIqNyQkIitbaCdSRSQhIiokIisnbzsnXD0hIio3JCQiK1QrVEdMISIqJCIraiczbSU9ISIqNyQkIitNUiZHUiQhIiokIittVldVPSEiKjckJCIrPzx1QE4hIiokIispSCEqMyQ9ISIqNyQkIisyJkgxbCQhIiokIityVlg6PSEiKjckJCIrdDhBPFIhIiokIisib1ZNeCIhIio3JCQiK1JLIlE9JSEiKiQiKz8nPTxzIiEiKjckJCIrVnFHOlohIiokIitjenYyOyEiKjckJCIreUooPkUmISIqJCIrT0RRLjohIio3JCQiKytSdC1iISIqJCIrUFJQbzkhIio3JCQiK0JZXFZkISIqJCIrNjA6VTkhIio3JCQiKyZSOSF6ZSEiKiQiK1E2Yko5ISIqNyQkIitxVGA5ZyEiKiQiK0IlR1NVIiEiKjckJCIrWFIwXWghIiokIitKLGU+OSEiKjckJCIrQVBkJkcnISIqJCIrST86PTkhIio3JCQiK2IqXDtVJyEiKiQiK0ZHbD45ISIqNyQkIismPUV4YichIiokIitZUyVSVSIhIio3JCQiKz9DIVFwJyEiKiQiK1lMJDNWIiEiKjckJCIrXSd5KUhvISIqJCIrSjg0UzkhIio3JCQiKyEpejkjNCghIiokIisrJ0hPWSIhIio3JCQiKzF0VGF0ISIqJCIrKFtiR1wiISIqNyQkIitjJ1syJHkhIiokIitiKG9HYiIhIio3JCQiKy9GOihSKSEiKiQiKz5tXj47ISIqNyQkIitsPjFQJykhIiokIisqKUhuVDshIio3JCQiK0c3KHAoKSkhIiokIis+KDQnZTshIio3JCQiKyEpcF07ISohIiokIitXOXlsOyEiKjckJCIrTkYvYyIqISIqJCIrKWZ6M24iISIqNyQkIismW3liSCohIiokIistJHBRbiIhIio3JCQiK1FVNk4lKiEiKiQiK05odnU7ISIqNyQkIiswKVJAbyohIiokIitWJkg4biIhIio3JCQiK3dgO0gqKiEiKiQiKzItK2k7ISIqNyQkIitlIj4rLSIhIikkIitCQClmayIhIio3JCQiK3k8N1o1ISIpJCIrb2lMRDshIio3JCQiKyYpenQpNCIhIikkIitVWlh6OiEiKjckJCIrIzMlZl82ISIpJCIrQVN2TDohIio3JCQiK09DS3g2ISIpJCIrWVIlcF4iISIqNyQkIisiel0/PyIhIikkIitnKXBTXSIhIio3JCQiK2lPc0c3ISIpJCIrVndHJlwiISIqNyQkIitMbFJiNyEiKSQiK2B0OyNcIiEiKjckJCIrXUA1JEciISIpJCIrYU4qW1wiISIqNyQkIitueCEzSiIhIikkIispcFFLXSIhIio3JCQiKyllRFxMIiEiKSQiK2x3VDk6ISIqNyQkIiszTS9mOCEiKSQiKyczVyVHOiEiKjckJCIrQiNSNlQiISIpJCIrTWQ1azohIio3JCQiKyhIZlxZIiEiKSQiK3M4LCs7ISIqNyQkIis9YkciXCIhIikkIitZdEA5OyEiKjckJCIrUzxoPDohIikkIisicG9caSIhIio3JCQiKzdQM1Y6ISIpJCIrX3BdSjshIio3JCQiKyZvYiZvOiEiKSQiK14pW1JqIiEiKjckJCIrb3okb2YiISIpJCIrXzwlPWoiISIqNyQkIiteLTdEOyEiKSQiK2BcK0Q7ISIqNyQkIitTSmBdOyEiKSQiKzljUjo7ISIqNyQkIitIZyVmbiIhIikkIis9VEIuOyEiKjckJCIrJlI4LXQiISIpJCIrQDJ0czohIio3JCQiKyZwKFF6PCEiKSQiKy8oeWZhIiEiKjckJCIrJT5bSiQ9ISIpJCIrUmA3RDohIio3JCQiKzkvV2U9ISIpJCIrQmIhKj46ISIqNyQkIitMRXQkKT0hIikkIitJei49OiEiKjckJCIrIUhxLCI+ISIpJCIrNm5wPjohIio3JCQiK1p6Z08+ISIpJCIrbTskW18iISIqNyQkIitLS0kpKT4hIikkIitlKlFJYSIhIio3JCQiKy9NVVU/ISIpJCIrajdpbzohIio3JCQiK2l2YSU0IyEiKSQiKy0ieUVmIiEiKjckJCIrVT8meTkjISIpJCIrSCRbLGgiISIqNyQkIitNXnIrQSEiKSQiKylwemdoIiEiKjckJCIrRDNIXEEhIikkIisrUmM1OyEiKjckJCIrXVMnXEkjISIpJCIrcXNnJGYiISIqNyQkIitYKWVaTiMhIikkIiteIyk9dDohIio3JCQiKyRbXXlTIyEiKSQiKypwUT1iIiEiKjckJCIrYWZtZUMhIikkIisocC1xYCIhIio3JCQiKz1URjhEISIpJCIrJkdKNmAiISIqLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVWSUVXRzYkOyQiIiEhIiIkIjEsKytCVEY4RCEjOTskITEsKyt5MCdRcSQhIzwkIjIvKyF5JSopbyopKT0hIzstJSpHUklEU1RZTEVHNiMlLFJFQ1RBTkdVTEFSRw== f(2); Si(2) evalf(Si(2),20); 1.6054129768026948486 Let's say we want to evaluate f(2) to many places. We could just call upon Maple to do the evaluation, and treat it as a black box. evalf(Si(2),100); 1.605412976802694848576720148198588940848583422328499660289006306564529357172666149845344797162787032 Maple knows about the sine integral, and uses the name Si for the function. We could try our own hand at it. Now Riemann sums tend to be slow going. They work. They're reliable. But they're slow. How would that go? A Riemann sum for an integral LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkobXN1YnN1cEdGJDYnLUkjbW9HRiQ2MFErJkludGVncmFsO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmdW5zZXRGJy8lKnNlcGFyYXRvckdGNy8lKXN0cmV0Y2h5R1EldHJ1ZUYnLyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUSQwZW1GJy8lJ3JzcGFjZUdGSi8lKG1pbnNpemVHUSFGJy8lKG1heHNpemVHRk8tSSNtaUdGJDYnUSJhRicvJSdpdGFsaWNHRjwvJStmb3JlZ3JvdW5kR1EsWzIwMCwwLDIwMF1GJy8lLHBsYWNlaG9sZGVyR0Y8L0YzUSdpdGFsaWNGJy1GUzYnUSJiRidGVkZYRmVuRmduLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy8lL3N1YnNjcmlwdHNoaWZ0R0Zeby1GUzYnUSJmRidGVi9GWVErWzAsMTYwLDgwXUYnRmVuRmduLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHUSYwLjVlbUYnLyUmZGVwdGhHRltwLyUqbGluZWJyZWFrR1ElYXV0b0YnLUYvNjBRMCZEaWZmZXJlbnRpYWxEO0YnRjJGNUY4L0Y7RjdGPS9GQEY3RkFGQy9GRkZPL0ZJRk8vRkxGT0ZNRlAtRlM2J1EieEYnRlZGWEZlbkZnbi1GLzYwUSJ+RidGMi9GNlEmZmFsc2VGJy9GOUZjcS9GO0ZjcS9GPkZjcS9GQEZjcS9GQkZjcS9GREZjcUZpcEZIRksvRk5RIjFGJy9GUVEpaW5maW5pdHlGJw==sets a number n, splits the interval into n pieces of equal length, picks a point from each interval at which to evaluate the integrand, and sums the value of the integrand f at that point times the common length of the intervals. That sum is an approximation to the integral, and the error, (difference between sum and actual integral) is no worse than the greatest change in the integrand over any one of the subintervals, times |b-a|, the length of the region of integration. Here, we take 200 intervals, each of length 1/100. We'd have to come up with an estimate for the derivative of sin(x)/x in order to get a rigorous take on the difference between our Riemann sum and the actual value, but here, we neglect that, partly because we trust the graph and it is telling us that our integrand is reasonably smooth, and partly because we will be getting a much better answer shortly by altogether different methods. n:=100;riemannsum:=(1/n)*sum(evalf(sin(j/n)/(j/n)),j=1..200); n := 100 riemannsum := 1.602682595 We could average the Riemann sums got by starting at the left, with that got by starting at the right. Happily, to do that, we need only add half the difference between the last term and what would have been the first, 1/200, in the previous calculation. This would give us a nice bump in accuracy for almost no extra computational work. riemannsum+(1/200)*(1-sin(2)/2); 1.607682595-1/400*sin(2) evalf(%); 1.605409351 We could use the series expansion for sin(x), the one we got in class on Wednesday by running the fact that cos(x)<=1 for all x through the logic mill based on the fact that if f\342\211\244g on the interval [0,x], then JSMlP0c= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUkobXN1YnN1cEdGJDYnLUkjbW9HRiQ2MFErJkludGVncmFsO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmdW5zZXRGJy8lKnNlcGFyYXRvckdGNy8lKXN0cmV0Y2h5R1EldHJ1ZUYnLyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUSQwZW1GJy8lJ3JzcGFjZUdGSi8lKG1pbnNpemVHUSFGJy8lKG1heHNpemVHRk8tRiM2Iy1JI21uR0YkNiRRIjBGJ0YyLUYjNiMtSSNtaUdGJDYlUSJ4RicvJSdpdGFsaWNHRjwvRjNRJ2l0YWxpY0YnLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy8lL3N1YnNjcmlwdHNoaWZ0R0Zeby1GZW42J1EiZkYnRmhuLyUrZm9yZWdyb3VuZEdRK1swLDE2MCw4MF1GJy8lLHBsYWNlaG9sZGVyR0Y8RmpuLUknbXNwYWNlR0YkNiYvJSdoZWlnaHRHUSYwLjBleEYnLyUmd2lkdGhHUSYwLjVlbUYnLyUmZGVwdGhHRl5wLyUqbGluZWJyZWFrR1ElYXV0b0YnLUYvNjBRMCZEaWZmZXJlbnRpYWxEO0YnRjJGNUY4L0Y7RjdGPS9GQEY3RkFGQy9GRkZPL0ZJRk8vRkxGT0ZNRlAtRmVuNiVRInRGJ0ZobkZqbi1GLzYwUSYmbGVxO0YnRjIvRjZRJmZhbHNlRicvRjlGZnEvRjtGZnEvRj5GZnEvRkBGZnEvRkJGZnEvRkRGZnEvRkZRJmluZml4RicvRklRL3RoaWNrbWF0aHNwYWNlRicvRkxGYHIvRk5RIjFGJy9GUVEpaW5maW5pdHlGJ0YrLUZlbjYlUSJnRidGaG5Gam4tRi82MFEifkYnRjJGZXFGZ3FGaHFGaXFGanFGW3JGXHJGXHFGSEZLRmJyRmRyRmdwRl9xLUYvNjBRIi5GJ0YyRmVxRmdxRmhxRmlxRmpxRltyRlxyRl1yRkhGS0ZickZkcg== sin(x)=x-x^3/3!+x^5/5!-x^7/7!...=sum((-1)^k*x^(2*k+1)/(2*k+1)!,k=0..infinity); Of course, we cannot actually do infinitely many terms. We shall have to quit after some number of terms. Now as we showed in class, the actual value rests between the value got by quitting after n terms, and that got by quitting instead after n+1 terms. When the next term, the first one we don't use, is small enough, we know we have an answer that's good enough. The same goes for the sine integral, since the actually integrand lies always between the integrand we'd get by using n terms, and the one we'd get by using n+1. So, here goes, with twenty terms. We use the fact that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYxLUkobXN1YnN1cEdGJDYnLUkjbW9HRiQ2MFErJkludGVncmFsO0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EmdW5zZXRGJy8lKnNlcGFyYXRvckdGNy8lKXN0cmV0Y2h5R1EldHJ1ZUYnLyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGPC8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUSQwZW1GJy8lJ3JzcGFjZUdGSi8lKG1pbnNpemVHUSFGJy8lKG1heHNpemVHRk8tRiM2Iy1JI21uR0YkNiRRIjBGJ0YyLUYjNiMtSSNtaUdGJDYlUSJ4RicvJSdpdGFsaWNHRjwvRjNRJ2l0YWxpY0YnLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy8lL3N1YnNjcmlwdHNoaWZ0R0Zeby1JKG1mZW5jZWRHRiQ2JC1GIzYlLUZVNiRRIjFGJ0YyLUYvNjBRIi9GJ0YyL0Y2USZmYWxzZUYnL0Y5Rl1wRjovRj5GXXAvRkBGXXAvRkJGXXAvRkRGXXAvRkZRJmluZml4RicvRklRLnRoaW5tYXRoc3BhY2VGJy9GTEZmcC9GTkZoby9GUVEpaW5maW5pdHlGJy1GZW42JVEidEYnRmhuRmpuRjItRi82MFEnJnNkb3Q7RidGMkZccEZecC9GO0ZdcEZfcEZgcEZhcEZicEZjcEZIRktGaHBGaXBGW3EtRi82MFEiXkYnRjJGXHBGXnBGYXFGX3BGYHBGYXBGYnBGY3AvRklRMnZlcnl0aGlubWF0aHNwYWNlRicvRkxGZnFGaHBGaXAtRmJvNiQtRiM2Ji1GVTYkUSIyRidGMi1GZW42JVEia0YnRmhuRmpuLUYvNjBRIitGJ0YyRlxwRl5wRmFxRl9wRmBwRmFwRmJwRmNwL0ZJUTBtZWRpdW1tYXRoc3BhY2VGJy9GTEZmckZocEZpcEZmb0YyRmlvRmhxLUYvNjBRIiFGJ0YyRlxwRl5wRmFxRl9wRmBwRmFwRmJwRmNwRmVxRmdxRmhwRmlwLUYvNjBRIn5GJ0YyRlxwRl5wRmFxRl9wRmBwRmFwRmJwL0ZGRk9GSEZLRmhwRmlwLUYvNjBRMCZEaWZmZXJlbnRpYWxEO0YnRjJGNUY4L0Y7RjdGPS9GQEY3RkFGQ0Zecy9GSUZPL0ZMRk9GTUZQRltxLUYvNjBRIj1GJ0YyRlxwRl5wRmFxRl9wRmBwRmFwRmJwRmNwL0ZJUS90aGlja21hdGhzcGFjZUYnL0ZMRmpzRmhwRmlwLUkmbWZyYWNHRiQ2KC1GIzYjLUklbXN1cEdGJDYlRlotRiM2I0ZocUZcby1GIzYjLUZibzYkLUYjNiZGaHFGaHJGXnFGaHFGMi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYXUvJSliZXZlbGxlZEdGXXAtRi82MFEiLkYnRjJGXHBGXnBGYXFGX3BGYHBGYXBGYnBGY3BGSEZLRmhwRmlw Here, x=2 because we're evaluating Si(2). a:=2;for k from 1 to 20 do a:=a+(-1)^k*2^(2*k+1)/((2*k+1)!*(2*k+1)) od:a; a := 2 18403664163421157775530071933187868316598450550122/11463507788552631660702214986713028771039193359375 evalf(a,40); 1.605412976802694848576720148198588940849 The next term, the one we didn't use, is k=21st, and would have given -2^(43)/(43!*43) evalf(-2^(43)/(43!*43)); -0.3385904364e-41 That's an error of about 3 times 10^(-42). This shows that taking the first 20 terms was good enough to get us 40 places. With today's machinery, it is no problem at all to take 20 terms, or even 200. a:=2;for k from 1 to 200 do a:=a+(-1)^k*2^(2*k+1)/((2*k+1)!*(2*k+1)) od: a := 2 evalf(a,400); 1.605412976802694848576720148198588940848583422328499660289006306564529357172666149845344797162787031607580347173686144762015629884312975752888513611557574310444884963174318530108686914748783734213526817328039824444296114374596608926282214653488902888150740988624102295975619188813087388874160842783472521433465964089914520895019805715608399850976870742032789740255942070910412702856362882408542593566 evalf(Si(2),400); 1.605412976802694848576720148198588940848583422328499660289006306564529357172666149845344797162787031607580347173686144762015629884312975752888513611557574310444884963174318530108686914748783734213526817328039824444296114374596608926282214653488902888150740988624102295975619188813087388874160842783472521433465964089914520895019805715608399850976870742032789740255942070910412702856362882408542593566 We didn't really need to know the value of this integral to 4 places, much less 400. On the other hand, this tends to drive home the point that these series methods are really powerful, and permit us to say, in many cases, that our approximate answers are so good that they may as well be exact.