Lesson 30: Fibonacci numbers restart;
<Text-field style="Heading 1" layout="Heading 1">Fourier series again</Text-field> Last time I said I didn't know a nice formula for these integrals, which were coefficients in the Fourier series of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIjFGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictRiM2KC1GLzYkUSIyRidGMi1JI21vR0YkNi1RIitGJ0YyLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZALyUpc3RyZXRjaHlHRkAvJSpzeW1tZXRyaWNHRkAvJShsYXJnZW9wR0ZALyUubW92YWJsZWxpbWl0c0dGQC8lJ2FjY2VudEdGQC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRk8tSSNtaUdGJDYlUSRjb3NGJy8lJ2l0YWxpY0dGQEYyLUkobWZlbmNlZEdGJDYkLUYjNiUtRlM2JVEieEYnL0ZXUSV0cnVlRicvRjNRJ2l0YWxpY0YnRmpuRlxvRjJGam5GXG8vJS5saW5ldGhpY2tuZXNzR0YxLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmJvLyUpYmV2ZWxsZWRHRkAtRjs2LVEiLkYnRjJGPkZBRkNGRUZHRklGSy9GTlEmMC4wZW1GJy9GUUZbcEYy J:= 1/Pi * int(cos(k*t)/(2+cos(t)),t=0..2*Pi) assuming k::posint; Well, now I do (and I should have remembered it, because it's a standard Math 300 calculation). The answer should be LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkmbWZyYWNHRiQ2KC1GIzYmLUkjbW5HRiQ2JFEiMkYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RIn5GJ0Y0LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkwtSSVtc3VwR0YkNiUtSShtZmVuY2VkR0YkNiQtRiM2Ji1JJm1zcXJ0R0YkNiMtRjE2JFEiM0YnRjQtRjg2LVEoJm1pbnVzO0YnRjRGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZbb0YwRjRGNC1GIzYlLUkjbWlHRiQ2JVEia0YnLyUnaXRhbGljR1EldHJ1ZUYnL0Y1USdpdGFsaWNGJ0Zjb0Zmby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGNC1GIzYmRlctRmBvNiNRIUYnRmNvRmZvLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZlcC8lKWJldmVsbGVkR0Y9RjdGNA==for any positive integer LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEia0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= (that's why I assumed k is a posint, short for positive integer, rather than just integer: that formula wouldn't work for negative k). seq(simplify(J-2/sqrt(3)*(sqrt(3)-2)^k),k=0..10); It's interesting that Maple can do the calculation for any particular LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEia0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= but can't do it in general.
<Text-field style="Heading 1" layout="Heading 1">Efficient matrix powers</Text-field> Last time we saw a way to calculate Fibonacci numbers using linear algebra. M := <<0,1>|<1,1>>; fib3:= proc(n) option remember; (M^(n-1))[2,2] end proc; Doing it this way hides the details of the calculation in the inner workings of Maple's linear algebra machinery (which may be a good thing, because that machinery is usually quite efficient and fast). Still, it's worthwhile seeing what we can learn from thinking about how these things could be done. What's an efficient way to calculate the LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVEibkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic='th power of a matrix? The most straightforward way is to multiply that many copies of the matrix together, but that's far from efficient: to get LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEiTUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRIm5GJ0YyRjVGMkY1LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy9GNlEnbm9ybWFsRic= you would need LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEibkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKCZtaW51cztGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGTC1JI21uR0YkNiRRIjFGJ0Y5Rjk= matrix multiplications. A better idea is called "repeated squaring". Thus to calculate LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEjNjRGJy9GO1Enbm9ybWFsRicvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRkFGK0ZB, we would first calculate LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEiMkYnL0Y7USdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGQUYrRkE=, then square that to get LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEiNEYnL0Y7USdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGQUYrRkE=, then square that to get LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEiOEYnL0Y7USdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGQUYrRkE=, then LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEjMTZGJy9GO1Enbm9ybWFsRicvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRkFGK0ZB, LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEjMzJGJy9GO1Enbm9ybWFsRicvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRkFGK0ZB, and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEjNjRGJy9GO1Enbm9ybWFsRicvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRkFGK0ZB. It only required 6 squarings. To calculate LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW5HRiQ2JFEkMTk5RicvRjtRJ25vcm1hbEYnLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZBRitGQQ==, we write 199 as a sum of powers of 2 (this is the base-2 representation of 199): 199 = 1 + 2 + 4 + 64 + 128 so LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2KEYrLUYjNiQtSSVtc3VwR0YkNiUtRiw2JVEiTUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21uR0YkNiRRJDE5OUYnL0Y9USdub3JtYWxGJy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGQy1JI21vR0YkNi1RIj1GJ0ZDLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZOLyUpc3RyZXRjaHlHRk4vJSpzeW1tZXRyaWNHRk4vJShsYXJnZW9wR0ZOLyUubW92YWJsZWxpbWl0c0dGTi8lJ2FjY2VudEdGTi8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmduLUYjNixGNi1GSTYtUTEmSW52aXNpYmxlVGltZXM7RidGQ0ZMRk9GUUZTRlVGV0ZZL0ZmblEmMC4wZW1GJy9GaW5GYG8tRiM2JC1GNDYlRjYtRkA2JFEiMkYnRkNGRUZDRlxvLUY0NiVGNi1GQDYkUSI0RidGQ0ZFRlxvLUY0NiVGNi1GQDYkUSM2NEYnRkNGRUZcby1GNDYlRjYtRkA2JFEkMTI4RidGQ0ZFRkNGK0ZDRitGQw==. To calculate LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEiTUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRIm5GJ0YyRjVGMkY1LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy9GNlEnbm9ybWFsRic= this way needs at most LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbW5HRiQ2JFEiMkYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RIn5GJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y4LyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkctSSVtc3ViR0YkNiUtSSNtaUdGJDYlUSRsb2dGJy8lJ2l0YWxpY0dGOEYvLUYjNiVGKy9GUlEldHJ1ZUYnL0YwUSdpdGFsaWNGJy8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUkobWZlbmNlZEdGJDYkLUYjNiQtRk42JVEibkYnRlVGV0YvRi9GLw== matrix multiplications. A convenient way to program it is the following: mpow:= proc(n) option remember; if type(n,even) then mpow(n/2)^2 elif type(n,odd) then mpow((n-1)/2)^2 . M end if; end proc: mpow(0) := <<1,0>|<0,1>>: mpow(1) := M: mpow(20) = M^20; mpow(n); (the symbolic variable n is neither even nor odd, so nothing is returned). fib4:= n -> mpow(n-1)[2,2]; fib4(300); fib4(300)-fib3(300); ti:= time(): fib3(10^7): time()-ti; fib3(10^7); ti:= time(): fib4(10^7): time()-ti; length(fib4(10^7));
<Text-field style="Heading 1" layout="Heading 1">Fibonacci identities</Text-field> So far our Fibonacci functions work only for positive integers. I'd like something that works also for symbolic expressions, e.g. I'd like to be able to get LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYmLUYvNiNRIUYnLUYjNidGOi1GIzYmLUkjbW5HRiQ2JFEiMkYnL0Y2USdub3JtYWxGJy1JI21vR0YkNi1RMSZJbnZpc2libGVUaW1lcztGJ0ZFLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZNLyUpc3RyZXRjaHlHRk0vJSpzeW1tZXRyaWNHRk0vJShsYXJnZW9wR0ZNLyUubW92YWJsZWxpbWl0c0dGTS8lJ2FjY2VudEdGTS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRmZuLUYvNiVRIm5GJ0YyRjVGRS1GSDYtUSIrRidGRUZLRk5GUEZSRlRGVkZYL0ZlblEsMC4yMjIyMjIyZW1GJy9GaG5GYG8tRkI2JFEiM0YnRkVGRUY6RkUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJ0ZF as an expression in terms of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYkLUYvNiVRIm5GJ0YyRjUvRjZRJ25vcm1hbEYnLyUvc3Vic2NyaXB0c2hpZnRHUSIwRidGPQ== and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYmLUYvNiNRIUYnLUYjNiYtRi82JVEibkYnRjJGNS1JI21vR0YkNi1RKCZtaW51cztGJy9GNlEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkovJSlzdHJldGNoeUdGSi8lKnN5bW1ldHJpY0dGSi8lKGxhcmdlb3BHRkovJS5tb3ZhYmxlbGltaXRzR0ZKLyUnYWNjZW50R0ZKLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGWS1JI21uR0YkNiRRIjFGJ0ZGRkZGOkZGLyUvc3Vic2NyaXB0c2hpZnRHUSIwRidGRg==. We can get this by a change in mpow. Note that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYsNiVRIm5GJ0Y3RjovJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUkjbW9HRiQ2LVEiPUYnL0Y7USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSy8lKXN0cmV0Y2h5R0ZLLyUqc3ltbWV0cmljR0ZLLyUobGFyZ2VvcEdGSy8lLm1vdmFibGVsaW1pdHNHRksvJSdhY2NlbnRHRksvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZaLUkobWZlbmNlZEdGJDYmLUYjNiZGKy1JJ210YWJsZUdGJDY2LUkkbXRyR0YkNictSSRtdGRHRiQ2KC1JJW1zdWJHRiQ2JS1GLDYlUSJGRidGN0Y6LUYjNiZGKy1GIzYmRj0tRkQ2LVEoJm1pbnVzO0YnRkdGSUZMRk5GUEZSRlRGVi9GWVEsMC4yMjIyMjIyZW1GJy9GZm5GY3AtSSNtbkdGJDYkUSIxRidGR0ZHRitGRy8lL3N1YnNjcmlwdHNoaWZ0R0ZCLyUpcm93YWxpZ25HRi4vJSxjb2x1bW5hbGlnbkdGLi8lK2dyb3VwYWxpZ25HRi4vJShyb3dzcGFuR0ZocC8lK2NvbHVtbnNwYW5HRmhwLUZjbzYoLUZmbzYlRmhvLUYjNiRGPUZHRmlwRltxRl1xRl9xRmFxRmNxRltxRl1xRl9xLUZgbzYnRmVxLUZjbzYoLUZmbzYlRmhvLUYjNiZGKy1GIzYmRj0tRkQ2LVEiK0YnRkdGSUZMRk5GUEZSRlRGVkZicEZkcEZlcEZHRitGR0ZpcEZbcUZdcUZfcUZhcUZjcUZbcUZdcUZfcS8lJmFsaWduR1ElYXhpc0YnL0ZccVEpYmFzZWxpbmVGJy9GXnFRJ2NlbnRlckYnL0ZgcVEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjkvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zlcy8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZgdC8lJmZyYW1lR0ZgdC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRksvJS1lcXVhbGNvbHVtbnNHRksvJS1kaXNwbGF5c3R5bGVHRksvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGXXRGK0ZHRkcvJSVvcGVuR1EiW0YnLyUmY2xvc2VHUSJdRidGR0YrRkc= M^4; mpow := proc(n) option remember; if type(n, posint) then if type(n,even) then mpow(n/2)^2 else M . mpow((n-1)/2)^2 end if elif type(n, negint) then mpow(-n)^(-1) elif type(n,`+`) then mpow(op(1,n)) . mpow(n-op(1,n)) elif type(n,`*`) then mpow(n/op(1,n))^op(1,n) else <<F[n-1],F[n]>|<F[n],F[n]+F[n-1]>> end if end proc: mpow(0) := <<1,0>|<0,1>>: mpow(1) := M: To describe what this does in words: If n is a positive integer, type(n, posint) is true (posint means "positive integer") and mpow will do what the previous version did. If n is a negative integer, type(n, negint) is true (negint means "negative integer"), and mpow will use LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiUtSSNtb0dGJDYtUSomdW1pbnVzMDtGJy9GO1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkcvJSlzdHJldGNoeUdGRy8lKnN5bW1ldHJpY0dGRy8lKGxhcmdlb3BHRkcvJS5tb3ZhYmxlbGltaXRzR0ZHLyUnYWNjZW50R0ZHLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGVi1GLDYlUSJuRidGN0Y6RkMvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUZANi1RIj1GJ0ZDRkVGSEZKRkxGTkZQRlIvRlVRLDAuMjc3Nzc3OGVtRicvRlhGXW8tRjI2JS1JKG1mZW5jZWRHRiQ2JC1GMjYlRjRGWUZmbkZDLUYjNiVGPy1JI21uR0YkNiRRIjFGJ0ZDRkNGZm5GQ0YrRkM=. If n is a sum of terms, say LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1GLDYlUSJhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEiK0YnL0Y4USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGQi8lKXN0cmV0Y2h5R0ZCLyUqc3ltbWV0cmljR0ZCLyUobGFyZ2VvcEdGQi8lLm1vdmFibGVsaW1pdHNHRkIvJSdhY2NlbnRHRkIvJSdsc3BhY2VHUSwwLjIyMjIyMjJlbUYnLyUncnNwYWNlR0ZRLUYsNiVRImJGJ0Y0RjdGPkYrRj4=, op(1,n) will be the first one and n - op(1,n) will be the rest. Maple will use LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Jy1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiYtRiw2JVEiYUYnRjdGOi1JI21vR0YkNi1RIitGJy9GO1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkovJSlzdHJldGNoeUdGSi8lKnN5bW1ldHJpY0dGSi8lKGxhcmdlb3BHRkovJS5tb3ZhYmxlbGltaXRzR0ZKLyUnYWNjZW50R0ZKLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGWS1GLDYlUSJiRidGN0Y6RkYvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUZDNi1RIj1GJ0ZGRkhGS0ZNRk9GUUZTRlUvRlhRLDAuMjc3Nzc3OGVtRicvRmVuRmBvLUYjNiYtRjI2JUY0Rj9GaW4tRkM2LVExJkludmlzaWJsZVRpbWVzO0YnRkZGSEZLRk1GT0ZRRlNGVS9GWFEmMC4wZW1GJy9GZW5Gam8tRjI2JUY0RmZuRmluRkZGK0ZGRitGRg==. If n is a product of terms, say LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1GLDYlUSJhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVExJkludmlzaWJsZVRpbWVzO0YnL0Y4USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGQi8lKXN0cmV0Y2h5R0ZCLyUqc3ltbWV0cmljR0ZCLyUobGFyZ2VvcEdGQi8lLm1vdmFibGVsaW1pdHNHRkIvJSdhY2NlbnRHRkIvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZRLUYsNiVRImJGJ0Y0RjdGPkYrRj4=, op(1,n) will be the first one and n/op(1,n) will be the rest. Maple will use LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1JJW1zdXBHRiQ2JS1GLDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiYtRiw2JVEiYUYnRjdGOi1JI21vR0YkNi1RMSZJbnZpc2libGVUaW1lcztGJy9GO1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkovJSlzdHJldGNoeUdGSi8lKnN5bW1ldHJpY0dGSi8lKGxhcmdlb3BHRkovJS5tb3ZhYmxlbGltaXRzR0ZKLyUnYWNjZW50R0ZKLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGWS1GLDYlUSJiRidGN0Y6RkYvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUZDNi1RIj1GJ0ZGRkhGS0ZNRk9GUUZTRlUvRlhRLDAuMjc3Nzc3OGVtRicvRmVuRmBvLUYyNiUtSShtZmVuY2VkR0YkNiQtRjI2JUY0RmZuRmluRkZGP0ZpbkZGRitGRg==. I'll do it this way instead of LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYsNiUtSSNtaUdGJDYlUSJNRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUY0NiVRImFGJ0Y3RjovJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnL0Y7USdub3JtYWxGJy1GNDYlUSJiRidGN0Y6RkBGQw== because integers usually come first in a product, and I'd rather do LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2JC1JJW1zdXBHRiQ2JS1JKG1mZW5jZWRHRiQ2JC1GMjYlLUYsNiVRIk1GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictRiw2JVEibkYnRjxGPy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRicvRkBRJ25vcm1hbEYnLUkjbW5HRiQ2JFEiMkYnRkhGRUZIRitGSA== than LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNiQtRiw2JS1JI21pR0YkNiVRIk1GJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSSNtbkdGJDYkUSIyRicvRj1RJ25vcm1hbEYnLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZDRkMtRjY2JVEibkYnRjlGPEZFRkM=. If n is none of those (e.g. if it is a name), Maple will return the matrix LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkobWZlbmNlZEdGJDYmLUYjNiYtSSNtaUdGJDYjUSFGJy1JJ210YWJsZUdGJDY2LUkkbXRyR0YkNictSSRtdGRHRiQ2KC1JJW1zdWJHRiQ2JS1GMTYlUSJGRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiZGMC1GIzYmLUYxNiVRIm5GJ0ZDRkYtSSNtb0dGJDYtUSgmbWludXM7RicvRkdRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZYLyUpc3RyZXRjaHlHRlgvJSpzeW1tZXRyaWNHRlgvJShsYXJnZW9wR0ZYLyUubW92YWJsZWxpbWl0c0dGWC8lJ2FjY2VudEdGWC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRmFvLUkjbW5HRiQ2JFEiMUYnRlRGVEYwRlQvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lKXJvd2FsaWduR0YzLyUsY29sdW1uYWxpZ25HRjMvJStncm91cGFsaWduR0YzLyUocm93c3BhbkdGZ28vJStjb2x1bW5zcGFuR0Znby1GOzYoLUY+NiVGQC1GIzYkRk1GVEZob0ZbcEZdcEZfcEZhcEZjcEZbcEZdcEZfcC1GODYnRmVwLUY7NigtRiM2JkY9LUZRNi1RIitGJ0ZURlZGWUZlbkZnbkZpbkZbb0Zdb0Zfb0Zib0ZncEZURltwRl1wRl9wRmFwRmNwRltwRl1wRl9wLyUmYWxpZ25HUSVheGlzRicvRlxwUSliYXNlbGluZUYnL0ZecFEnY2VudGVyRicvRmBwUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGRS8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmFyLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRlxzLyUmZnJhbWVHRlxzLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGWC8lLWVxdWFsY29sdW1uc0dGWC8lLWRpc3BsYXlzdHlsZUdGWC8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0ZpckYwRlRGVC8lJW9wZW5HUSJbRicvJSZjbG9zZUdRIl1GJ0ZU . mpow(2*n); mpow(-1)= M^(-1); fib4(n); fib4(n+3); fib4(n+m); This could also be written as LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Jy1JJW1zdWJHRiQ2JS1GLDYlUSJGRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiZGKy1GIzYmLUYsNiVRIm5GJ0Y3RjotSSNtb0dGJDYtUSIrRicvRjtRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZMLyUpc3RyZXRjaHlHRkwvJSpzeW1tZXRyaWNHRkwvJShsYXJnZW9wR0ZMLyUubW92YWJsZWxpbWl0c0dGTC8lJ2FjY2VudEdGTC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRmVuLUYsNiVRIm1GJ0Y3RjpGSEYrRkgvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1GRTYtUSI9RidGSEZKRk1GT0ZRRlNGVUZXL0ZaUSwwLjI3Nzc3NzhlbUYnL0ZnbkZiby1GIzYoRistRiM2Ji1GMjYlRjQtRiM2JEZBRkhGW28tRkU2LVExJkludmlzaWJsZVRpbWVzO0YnRkhGSkZNRk9GUUZTRlVGVy9GWlEmMC4wZW1GJy9GZ25GYHAtRjI2JUY0LUYjNiZGKy1GIzYmRmhuLUZFNi1RKCZtaW51cztGJ0ZIRkpGTUZPRlFGU0ZVRldGWUZmbi1JI21uR0YkNiRRIjFGJ0ZIRkhGK0ZIRltvRkhGRC1GIzYmLUYyNiVGNC1GIzYmRistRiM2JkZBRkRGW3FGSEYrRkhGW29GXHAtRjI2JUY0LUYjNiRGaG5GSEZbb0ZIRitGSEYrRkhGK0ZI. It's an important and useful identity for Fibonacci numbers. Where does this come from? mpow(n), mpow(m), mpow(m+n);
<Text-field style="Heading 1" layout="Heading 1">Saving and reading</Text-field> We've made some complicated definitions that might be useful in other worksheets. You could use copy-and-paste from this worksheet, but there's a much more convenient way. We can save the definitions (and values of whatever variables we want) to a text file, and then read this in to Maple whenever we want to use them. (I'm commenting out this command with # so it won't actually execute - see below) # save mpow, fib4, M, "fibonacci.txt"; That will create a file named "fibonacci.txt" on your computer containing Maple statements defining mpow and fib4 and M. It will put it in the "current folder". You can see which one that is with the currentdir command. currentdir(); You can also use currentdir to change to a different folder. currentdir("d:/m210"); currentdir(); If you prefer a different folder, you can put in the path together with the file name, e.g. # save mpow, fib4, M, "d:/m210/fibonacci.txt"; Note that the forward slash "/" is used instead of the backslash "\134". Then in any Maple session where you want to use these definitions: read "d:/m210/fibonacci.txt"; Unfortunately there's a bug that causes an incorrect definition of mpow to be saved. The problem was in the line else mpow((n-1)/2)^2 . M where save left out the space between the 2 and the ., which caused Maple to interpret 2. as a number when read read that line. FF:= x -> x^2 . M; save FF, "d:/test/FF.txt"; read "d:/test/FF.txt"; I've put a corrected copy of "fibonacci.txt" (containing these definitions and a few more from the next couple of lessons) on our web page, so you can download it.
<Text-field style="Heading 1" layout="Heading 1">Some Fibonacci puzzles</Text-field> LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Jy1JJW1zdWJHRiQ2JS1GLDYlUSJGRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiZGKy1GIzYmLUYsNiVRIm5GJ0Y3RjotSSNtb0dGJDYtUSIrRicvRjtRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZMLyUpc3RyZXRjaHlHRkwvJSpzeW1tZXRyaWNHRkwvJShsYXJnZW9wR0ZMLyUubW92YWJsZWxpbWl0c0dGTC8lJ2FjY2VudEdGTC8lJ2xzcGFjZUdRLDAuMjIyMjIyMmVtRicvJSdyc3BhY2VHRmVuLUYsNiVRIm1GJ0Y3RjpGSEYrRkgvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1GRTYtUSI9RidGSEZKRk1GT0ZRRlNGVUZXL0ZaUSwwLjI3Nzc3NzhlbUYnL0ZnbkZiby1GIzYoRistRiM2Ji1GMjYlRjQtRiM2JEZBRkhGW28tRkU2LVExJkludmlzaWJsZVRpbWVzO0YnRkhGSkZNRk9GUUZTRlVGVy9GWlEmMC4wZW1GJy9GZ25GYHAtRjI2JUY0LUYjNiZGKy1GIzYmRmhuLUZFNi1RKCZtaW51cztGJ0ZIRkpGTUZPRlFGU0ZVRldGWUZmbi1JI21uR0YkNiRRIjFGJ0ZIRkhGK0ZIRltvRkhGRC1GIzYmLUYyNiVGNC1GIzYmRistRiM2JkZBRkRGW3FGSEYrRkhGW29GXHAtRjI2JUY0LUYjNiRGaG5GSEZbb0ZIRitGSEYrRkhGK0ZI was only one of many interesting identities involving the Fibonacci numbers. There is a whole journal, the Fibonacci Quarterly, devoted to Fibonacci numbers and related recurrence relations. Near the back of each issue is a problem section, containing problems at various levels of difficulty contributed by readers. Many of the problems in the elementary section can be solved quite readily using mpow and fib. Here are a few examples. (1) Let LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiSEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYkLUYvNiVRIm5GJ0YyRjUvRjZRJ25vcm1hbEYnLyUvc3Vic2NyaXB0c2hpZnRHUSIwRidGPQ== be any solution (in integers) of the recurrence LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Jy1JJW1zdWJHRiQ2JS1GLDYlUSJIRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUYjNiQtRiw2JVEibkYnRjdGOi9GO1Enbm9ybWFsRicvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1JI21vR0YkNi1RIj1GJ0ZCLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0ZNLyUpc3RyZXRjaHlHRk0vJSpzeW1tZXRyaWNHRk0vJShsYXJnZW9wR0ZNLyUubW92YWJsZWxpbWl0c0dGTS8lJ2FjY2VudEdGTS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmZuLUYjNiYtRjI2JUY0LUYjNiZGKy1GIzYmRj8tRkg2LVEoJm1pbnVzO0YnRkJGS0ZORlBGUkZURlZGWC9GZW5RLDAuMjIyMjIyMmVtRicvRmhuRmVvLUkjbW5HRiQ2JFEiMUYnRkJGQkYrRkJGRC1GSDYtUSIrRidGQkZLRk5GUEZSRlRGVkZYRmRvRmZvLUYyNiVGNC1GIzYmRistRiM2JkY/RmFvLUZobzYkUSIyRidGQkZCRitGQkZERkJGK0ZCRitGQg==. Show that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYtLUkjbW5HRiQ2JFEiN0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RMSZJbnZpc2libGVUaW1lcztGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y4LyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHRkctSSVtc3ViR0YkNiUtSSNtaUdGJDYlUSJIRicvJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLUYjNiQtRk42JVEibkYnRlFGVEYvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRictRjM2LVEsJkNvbmdydWVudDtGJ0YvRjZGOUY7Rj1GP0ZBRkMvRkZRLDAuMjc3Nzc3OGVtRicvRklGXG8tRks2JUZNLUYjNiYtRk42I1EhRictRiM2JkZYLUYzNi1RIitGJ0YvRjZGOUY7Rj1GP0ZBRkMvRkZRLDAuMjIyMjIyMmVtRicvRklGW3AtRiw2JFEjMTVGJ0YvRi9GYm9GL0ZlbkZiby1JJ21zcGFjZUdGJDYmLyUnaGVpZ2h0R1EmMC4wZXhGJy8lJndpZHRoR1EmMC41ZW1GJy8lJmRlcHRoR0ZlcC8lKmxpbmVicmVha0dRJWF1dG9GJy1GMzYvUSRtb2RGJy8lJWJvbGRHRlMvRjBRJWJvbGRGJy8lK2ZvbnR3ZWlnaHRHRmRxRjZGOUY7Rj1GP0ZBRkNGRUZIRmBwLUYsNiRRIzEwRidGL0Yv. This means that LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2I1EhRictRiM2Ji1JI21uR0YkNiRRIjdGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSSNtb0dGJDYtUTEmSW52aXNpYmxlVGltZXM7RidGNS8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPi8lKXN0cmV0Y2h5R0Y+LyUqc3ltbWV0cmljR0Y+LyUobGFyZ2VvcEdGPi8lLm1vdmFibGVsaW1pdHNHRj4vJSdhY2NlbnRHRj4vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZNLUklbXN1YkdGJDYlLUYsNiVRIkhGJy8lJ2l0YWxpY0dRJXRydWVGJy9GNlEnaXRhbGljRictRiM2JC1GLDYlUSJuRidGVkZZRjUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJ0Y1RitGNQ== and LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiSEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYmLUYvNiNRIUYnLUYjNiYtRi82JVEibkYnRjJGNS1JI21vR0YkNi1RIitGJy9GNlEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkovJSlzdHJldGNoeUdGSi8lKnN5bW1ldHJpY0dGSi8lKGxhcmdlb3BHRkovJS5tb3ZhYmxlbGltaXRzR0ZKLyUnYWNjZW50R0ZKLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGWS1JI21uR0YkNiRRIzE1RidGRkZGRjpGRi8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnRkY= have the same remainder when divided by 10, i.e. the same last digit in the decimal representation. Maple has a mod function, which returns the least nonnegative integer with the same remainder. For example: 37 mod 5; -37 mod 5; It will also work on rational expressions or equations, in which case it operates on the coefficients. 37 * x^23 + 42 mod 5; ((23 * x+17)/(12*x+7) = 23) mod 5; 23/(5*x+15) mod 5; 15/5 mod 5;
<Text-field style="Heading 1" layout="Heading 1">Maple commands introduced in this lesson:</Text-field> type(..., odd) type(..., even) type(..., posint) type(..., negint) save read mod LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic=
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2I1EhRic=