Compare commits

...

420 Commits

Author SHA1 Message Date
Adrian e179a4b664 Merge Eigenmath modules
All eigenmath modules were imported using:

	git cvsimport -vik -C /tmp/eigenmath/modules/$MODULE -A /tmp/cvsuser.txt \
	-d :pserver:anonymous@eigenmath.cvs.sourceforge.net:/cvsroot/eigenmath $MODULE

/tmp/cvsuser.txt contained:

	gweigt=George Weigt <gweigt@users.sourceforge.net> Etc/GMT+7

The files are copied into subdirectories and the commits
manually added as parents.

George Weigt's last commits of the individual modules:

7fea6f26a2 c
44e026d257 eigenmath
29403fc655 lisp
f053a059fe man
74a1f5ec30 ross
804bd98a9c tex
2015-11-18 15:31:00 +01:00
Adrian d9ad2db2f2 Move into src subdirectory 2015-11-18 15:30:00 +01:00
Adrian f3c507bf24 Move into lisp subdirectory 2015-11-18 15:30:00 +01:00
Adrian 6cea4afdf2 Move into doc/manual subdirectory 2015-11-18 15:30:00 +01:00
Adrian e516c9a7aa Move into doc/ross subdirectory 2015-11-18 15:30:00 +01:00
George Weigt 804bd98a9c *** empty log message *** 2009-01-09 19:24:14 -07:00
George Weigt d51f235057 *** empty log message *** 2009-01-09 19:11:05 -07:00
George Weigt 7fea6f26a2 *** empty log message *** 2009-01-09 18:59:36 -07:00
George Weigt f053a059fe *** empty log message *** 2009-01-01 16:58:36 -07:00
George Weigt b69526d918 *** empty log message *** 2009-01-01 16:54:29 -07:00
George Weigt 9d04176891 *** empty log message *** 2009-01-01 14:39:28 -07:00
George Weigt b0ce964e93 *** empty log message *** 2009-01-01 13:36:38 -07:00
George Weigt feb6bae8b5 *** empty log message *** 2008-12-29 17:07:04 -07:00
George Weigt feb87c5fb1 *** empty log message *** 2008-12-29 16:39:29 -07:00
George Weigt 58fc9fa078 *** empty log message *** 2008-12-29 15:26:12 -07:00
George Weigt 5a0c641209 *** empty log message *** 2008-12-29 15:26:12 -07:00
George Weigt 68a2c56fb5 *** empty log message *** 2008-12-29 15:06:56 -07:00
George Weigt 212317fe87 *** empty log message *** 2008-12-29 14:07:43 -07:00
George Weigt a2eb5c794f *** empty log message *** 2008-12-28 19:42:58 -07:00
George Weigt 05f2a64838 *** empty log message *** 2008-12-23 18:10:52 -07:00
George Weigt 7904d77a29 *** empty log message *** 2008-12-20 16:31:51 -07:00
George Weigt 78eeff4500 *** empty log message *** 2008-12-19 18:30:31 -07:00
George Weigt bbf310f8f9 *** empty log message *** 2008-12-19 16:49:30 -07:00
George Weigt 2cda2479cb *** empty log message *** 2008-12-19 16:27:51 -07:00
George Weigt 0954123de2 *** empty log message *** 2008-12-15 19:56:10 -07:00
George Weigt 64f5827b4a *** empty log message *** 2008-12-15 19:03:38 -07:00
George Weigt 931958964e *** empty log message *** 2008-12-14 15:50:24 -07:00
George Weigt e587568e76 *** empty log message *** 2008-12-14 11:58:02 -07:00
George Weigt 20cb017a5d *** empty log message *** 2008-12-14 10:35:21 -07:00
George Weigt 3a744b39af *** empty log message *** 2008-12-13 21:41:56 -07:00
George Weigt 001abc3223 *** empty log message *** 2008-12-13 20:58:49 -07:00
George Weigt e77326447c *** empty log message *** 2008-12-13 20:51:59 -07:00
George Weigt fcc137a9df *** empty log message *** 2008-12-13 20:31:06 -07:00
George Weigt c3a60a79e7 *** empty log message *** 2008-12-13 19:52:55 -07:00
George Weigt ea3fbacda1 *** empty log message *** 2008-12-13 18:55:45 -07:00
George Weigt 6aa9068a17 *** empty log message *** 2008-12-13 08:37:13 -07:00
George Weigt f06d829f40 *** empty log message *** 2008-12-07 17:01:09 -07:00
George Weigt 67a70be627 *** empty log message *** 2008-12-07 06:16:15 -07:00
George Weigt 3b8c7fd353 *** empty log message *** 2008-12-05 17:44:55 -07:00
George Weigt f8962d8ea6 *** empty log message *** 2008-12-05 17:35:39 -07:00
George Weigt 5a76edd601 *** empty log message *** 2008-12-05 16:30:01 -07:00
George Weigt f446498c62 *** empty log message *** 2008-12-05 16:22:36 -07:00
George Weigt 1adea76740 *** empty log message *** 2008-12-05 16:10:44 -07:00
George Weigt 3844009d80 *** empty log message *** 2008-12-05 15:58:54 -07:00
George Weigt 676fd95e57 *** empty log message *** 2008-11-28 15:35:14 -07:00
George Weigt c35b74ce57 *** empty log message *** 2008-11-13 21:09:10 -07:00
George Weigt 877acf2a4e *** empty log message *** 2008-11-08 14:43:35 -07:00
George Weigt 81e1e9be5a *** empty log message *** 2008-10-31 08:31:44 -07:00
George Weigt e51632851b *** empty log message *** 2008-10-31 06:39:20 -07:00
George Weigt 98ebb99bb1 *** empty log message *** 2008-10-19 14:06:14 -07:00
George Weigt bcdd368ffd *** empty log message *** 2008-10-05 10:08:12 -07:00
George Weigt e3cdf2be2b *** empty log message *** 2008-09-03 21:02:07 -07:00
George Weigt c73c1b6485 *** empty log message *** 2008-09-01 17:57:43 -07:00
George Weigt 7d1e64de4b *** empty log message *** 2008-09-01 16:43:46 -07:00
George Weigt 988048e765 *** empty log message *** 2008-09-01 16:42:15 -07:00
George Weigt 137ba42920 *** empty log message *** 2008-08-30 13:09:30 -07:00
George Weigt 0229b49ad7 *** empty log message *** 2008-08-30 12:51:12 -07:00
George Weigt f94e74dccb *** empty log message *** 2008-08-28 09:28:38 -07:00
George Weigt 302082d3d5 *** empty log message *** 2008-08-27 16:22:21 -07:00
George Weigt c4c6743f12 *** empty log message *** 2008-08-25 18:30:55 -07:00
George Weigt 58a46b72a5 *** empty log message *** 2008-08-24 18:24:03 -07:00
George Weigt 751a6155a6 *** empty log message *** 2008-08-24 17:07:15 -07:00
George Weigt 4f11ef8851 *** empty log message *** 2008-08-24 10:57:07 -07:00
George Weigt ddd4bbc888 *** empty log message *** 2008-08-24 10:35:47 -07:00
George Weigt a0972e4b8e *** empty log message *** 2008-08-23 09:42:00 -07:00
George Weigt 70a1436226 *** empty log message *** 2008-08-23 08:46:19 -07:00
George Weigt 6c77acecdd *** empty log message *** 2008-08-23 08:28:33 -07:00
George Weigt 3c02078a0a *** empty log message *** 2008-08-23 08:18:15 -07:00
George Weigt 7655af6b59 *** empty log message *** 2008-08-17 15:28:37 -07:00
George Weigt 693e4d44a8 *** empty log message *** 2008-08-17 15:16:40 -07:00
George Weigt 960e190f08 *** empty log message *** 2008-08-16 15:53:12 -07:00
George Weigt 06ec518d32 *** empty log message *** 2008-08-15 15:50:41 -07:00
George Weigt fcf8dd4410 *** empty log message *** 2008-08-15 15:27:55 -07:00
George Weigt 4e935ea221 *** empty log message *** 2008-08-10 14:17:12 -07:00
George Weigt 1c57dd7fe9 *** empty log message *** 2008-08-10 14:05:27 -07:00
George Weigt 5424d26739 *** empty log message *** 2008-08-10 13:15:55 -07:00
George Weigt d6a5de944c *** empty log message *** 2008-08-10 12:40:11 -07:00
George Weigt 58113e0e52 *** empty log message *** 2008-08-09 13:36:42 -07:00
George Weigt ab7d08a441 *** empty log message *** 2008-08-08 21:18:40 -07:00
George Weigt 633c4b3c19 *** empty log message *** 2008-08-08 21:06:28 -07:00
George Weigt 4922833b68 *** empty log message *** 2008-06-20 21:34:54 -07:00
George Weigt 90df23db8b *** empty log message *** 2008-06-14 15:52:00 -07:00
George Weigt 131d442681 *** empty log message *** 2008-04-19 15:20:27 -07:00
George Weigt e05e959b0f *** empty log message *** 2008-04-19 14:36:59 -07:00
George Weigt c5486d0cab *** empty log message *** 2008-04-12 16:27:04 -07:00
George Weigt 2eb4f261b2 *** empty log message *** 2008-04-12 09:57:15 -07:00
George Weigt f54fbca1af *** empty log message *** 2008-04-07 20:09:47 -07:00
George Weigt cba41ac535 *** empty log message *** 2008-04-07 20:02:35 -07:00
George Weigt bdba3fa0e2 *** empty log message *** 2008-03-15 19:06:43 -07:00
George Weigt 422703972e *** empty log message *** 2008-03-15 18:55:09 -07:00
George Weigt 0114a6ee47 *** empty log message *** 2008-03-15 15:47:52 -07:00
George Weigt 805f6b4dad *** empty log message *** 2008-03-14 16:36:09 -07:00
George Weigt cda78fa1e5 *** empty log message *** 2008-03-14 16:17:28 -07:00
George Weigt 9bb0f82d25 *** empty log message *** 2008-02-03 12:09:26 -07:00
George Weigt 8af689cd55 *** empty log message *** 2008-02-03 11:51:13 -07:00
George Weigt bca4f824af *** empty log message *** 2008-02-03 11:51:13 -07:00
George Weigt 9fd5605860 *** empty log message *** 2008-02-03 11:31:24 -07:00
George Weigt 728e767106 *** empty log message *** 2008-02-03 11:25:28 -07:00
George Weigt ee24570325 *** empty log message *** 2008-02-03 09:42:34 -07:00
George Weigt ae7051519e *** empty log message *** 2008-02-02 17:03:18 -07:00
George Weigt 08d380b767 *** empty log message *** 2008-02-02 16:49:47 -07:00
George Weigt 05a79f161a *** empty log message *** 2008-02-02 16:37:47 -07:00
George Weigt 92cb43d553 *** empty log message *** 2008-02-02 16:37:47 -07:00
George Weigt bb98625224 *** empty log message *** 2008-02-02 12:11:06 -07:00
George Weigt 4e4492b6ad *** empty log message *** 2008-02-02 12:08:33 -07:00
George Weigt 967aade72d *** empty log message *** 2008-02-02 11:36:26 -07:00
George Weigt 495f391b12 *** empty log message *** 2008-02-02 11:31:06 -07:00
George Weigt fce938777a *** empty log message *** 2007-12-23 09:45:02 -07:00
George Weigt abadaaa3f5 *** empty log message *** 2007-12-22 18:25:19 -07:00
George Weigt f472d59d9a *** empty log message *** 2007-12-22 12:16:27 -07:00
George Weigt 58b7971fb7 *** empty log message *** 2007-12-02 16:53:33 -07:00
George Weigt 36e202a4c3 *** empty log message *** 2007-12-02 16:37:49 -07:00
George Weigt 32a30f6ab4 *** empty log message *** 2007-12-02 16:34:05 -07:00
George Weigt ecf946f218 *** empty log message *** 2007-11-22 10:29:38 -07:00
George Weigt 1eb9a8e19e *** empty log message *** 2007-11-22 09:02:33 -07:00
George Weigt 1680d675bd *** empty log message *** 2007-11-22 08:40:41 -07:00
George Weigt a927273034 *** empty log message *** 2007-11-22 08:37:53 -07:00
George Weigt 364bad0fcd *** empty log message *** 2007-11-19 17:43:54 -07:00
George Weigt 7326046937 *** empty log message *** 2007-11-10 20:23:22 -07:00
George Weigt 263d837ae8 *** empty log message *** 2007-11-10 20:16:40 -07:00
George Weigt ca2c229596 *** empty log message *** 2007-11-10 20:16:40 -07:00
George Weigt d4a9a13d89 *** empty log message *** 2007-11-05 12:34:25 -07:00
George Weigt 2e2fc9f0f8 *** empty log message *** 2007-11-05 12:13:10 -07:00
George Weigt 606059b616 *** empty log message *** 2007-10-20 17:54:55 -07:00
George Weigt 4d3f47be21 *** empty log message *** 2007-10-20 08:51:15 -07:00
George Weigt c6d5a5421c *** empty log message *** 2007-10-19 15:24:03 -07:00
George Weigt ed16412711 *** empty log message *** 2007-09-30 09:01:50 -07:00
George Weigt eeb184dc21 *** empty log message *** 2007-09-30 08:47:04 -07:00
George Weigt f31b916a1c *** empty log message *** 2007-09-29 16:32:47 -07:00
George Weigt 47ece737f8 *** empty log message *** 2007-09-22 14:59:20 -07:00
George Weigt 2201d4aac5 *** empty log message *** 2007-09-22 14:57:02 -07:00
George Weigt d1db39759a *** empty log message *** 2007-09-22 14:28:16 -07:00
George Weigt 4d44fcce1e *** empty log message *** 2007-09-22 13:59:48 -07:00
George Weigt fb6aef62d3 *** empty log message *** 2007-09-21 10:51:10 -07:00
George Weigt bac340dc3d *** empty log message *** 2007-09-08 15:37:45 -07:00
George Weigt fcbac46053 *** empty log message *** 2007-09-08 11:33:37 -07:00
George Weigt f5e160a2c1 *** empty log message *** 2007-09-06 19:24:26 -07:00
George Weigt 9798d9e683 *** empty log message *** 2007-09-06 18:27:41 -07:00
George Weigt 2266879374 *** empty log message *** 2007-09-06 18:11:42 -07:00
George Weigt 8bf7142a0a *** empty log message *** 2007-09-03 11:05:36 -07:00
George Weigt accd29188b *** empty log message *** 2007-09-01 08:25:55 -07:00
George Weigt ab78aa0431 *** empty log message *** 2007-08-31 07:35:10 -07:00
George Weigt 7c2fca1f56 *** empty log message *** 2007-08-31 07:09:32 -07:00
George Weigt 21ee5b1039 *** empty log message *** 2007-08-31 07:01:58 -07:00
George Weigt 6017c12d80 *** empty log message *** 2007-08-26 17:13:43 -07:00
George Weigt 4e33ff26c4 *** empty log message *** 2007-08-26 14:15:38 -07:00
George Weigt c8db9d6932 *** empty log message *** 2007-08-15 20:12:12 -07:00
George Weigt 19c7912811 *** empty log message *** 2007-08-11 09:56:36 -07:00
George Weigt 3b4774dbd0 *** empty log message *** 2007-08-01 15:44:29 -07:00
George Weigt 605f206bd2 *** empty log message *** 2007-08-01 15:30:24 -07:00
George Weigt 36aabf902d *** empty log message *** 2007-07-29 12:49:50 -07:00
George Weigt 46ff4a5fc4 *** empty log message *** 2007-07-29 09:31:32 -07:00
George Weigt 2956cd9f56 *** empty log message *** 2007-07-29 09:27:18 -07:00
George Weigt 6f1faa14df *** empty log message *** 2007-07-28 08:24:36 -07:00
George Weigt 28767a9841 *** empty log message *** 2007-07-28 08:20:28 -07:00
George Weigt e61f98272e *** empty log message *** 2007-07-28 08:09:44 -07:00
George Weigt 23c4b826ab *** empty log message *** 2007-07-28 08:04:01 -07:00
George Weigt 78819b03b6 *** empty log message *** 2007-07-20 17:45:37 -07:00
George Weigt 8ae1bcec57 *** empty log message *** 2007-07-20 17:44:12 -07:00
George Weigt 93d92df52b *** empty log message *** 2007-07-20 17:41:42 -07:00
George Weigt d6875574f1 *** empty log message *** 2007-07-20 17:27:00 -07:00
George Weigt 34293bd164 *** empty log message *** 2007-07-20 15:06:33 -07:00
George Weigt 6ec9fc1165 *** empty log message *** 2007-07-15 16:36:19 -07:00
George Weigt 06dd71ef5c *** empty log message *** 2007-07-15 11:44:47 -07:00
George Weigt 3be3e70788 *** empty log message *** 2007-07-15 11:35:00 -07:00
George Weigt ec1f9d0304 *** empty log message *** 2007-07-15 11:16:48 -07:00
George Weigt f8ef0b4df2 *** empty log message *** 2007-07-14 08:08:27 -07:00
George Weigt 1026a2c16d *** empty log message *** 2007-07-13 20:04:26 -07:00
George Weigt 3d77726b36 *** empty log message *** 2007-07-07 18:04:24 -07:00
George Weigt 273138edea *** empty log message *** 2007-07-07 09:34:04 -07:00
George Weigt 829c919a0d *** empty log message *** 2007-07-07 09:21:39 -07:00
George Weigt 5da7efa7be *** empty log message *** 2007-07-06 19:37:21 -07:00
George Weigt d6b747c9c8 *** empty log message *** 2007-07-05 18:15:45 -07:00
George Weigt e8ed1173bb *** empty log message *** 2007-07-04 10:03:10 -07:00
George Weigt 74a1f5ec30 *** empty log message *** 2007-07-01 12:40:08 -07:00
George Weigt 59f098acf2 *** empty log message *** 2007-07-01 10:18:28 -07:00
George Weigt 48c446c0d6 *** empty log message *** 2007-06-30 09:48:45 -07:00
George Weigt 4784260526 *** empty log message *** 2007-06-30 09:41:13 -07:00
George Weigt a43dece3a2 *** empty log message *** 2007-06-28 12:40:48 -07:00
George Weigt a3a5f79361 *** empty log message *** 2007-06-27 19:44:18 -07:00
George Weigt 4cdb5a150f *** empty log message *** 2007-06-27 18:56:11 -07:00
George Weigt 78a1e8bf89 *** empty log message *** 2007-06-27 13:42:07 -07:00
George Weigt 0072e34d4b *** empty log message *** 2007-06-26 14:03:40 -07:00
George Weigt f368b36a2b *** empty log message *** 2007-06-26 13:43:44 -07:00
George Weigt 1c6f7debfb *** empty log message *** 2007-06-26 12:06:25 -07:00
George Weigt ff857c90ff *** empty log message *** 2007-06-26 11:53:09 -07:00
George Weigt 66f56d24b7 *** empty log message *** 2007-06-26 11:23:40 -07:00
George Weigt 24ddd14a13 *** empty log message *** 2007-06-26 11:03:19 -07:00
George Weigt 088a1f28c3 *** empty log message *** 2007-06-26 10:25:21 -07:00
George Weigt 97f678fe1c *** empty log message *** 2007-06-25 12:28:11 -07:00
George Weigt 7c8f24b7cd *** empty log message *** 2007-06-23 21:06:51 -07:00
George Weigt aeb141599b *** empty log message *** 2007-06-23 14:26:29 -07:00
George Weigt 153e369414 *** empty log message *** 2007-06-19 11:24:19 -07:00
George Weigt 0b39b00d02 *** empty log message *** 2007-06-18 15:21:40 -07:00
George Weigt 234207737d *** empty log message *** 2007-06-18 09:50:34 -07:00
George Weigt e5da419ceb *** empty log message *** 2007-06-17 21:18:41 -07:00
George Weigt 8c68bc4097 *** empty log message *** 2007-06-17 21:16:05 -07:00
George Weigt 8d94fd9d1a *** empty log message *** 2007-06-17 21:11:29 -07:00
George Weigt 05963d1ac2 *** empty log message *** 2007-06-17 21:04:52 -07:00
George Weigt fcc9f3e3d1 *** empty log message *** 2007-06-17 19:50:25 -07:00
George Weigt 1a3d36a847 *** empty log message *** 2007-06-17 18:17:53 -07:00
George Weigt de4feb592f *** empty log message *** 2007-06-17 14:03:33 -07:00
George Weigt 6f90359a67 *** empty log message *** 2007-06-15 15:13:20 -07:00
George Weigt cd7b31ddd0 *** empty log message *** 2007-06-14 10:55:37 -07:00
George Weigt c0237e32c5 *** empty log message *** 2007-06-13 15:20:17 -07:00
George Weigt 208c4c6400 *** empty log message *** 2007-06-13 15:05:45 -07:00
George Weigt 63a01f86e6 *** empty log message *** 2007-06-11 18:55:08 -07:00
George Weigt ef450ce9ea *** empty log message *** 2007-06-10 07:23:08 -07:00
George Weigt 9cc0f4cfe9 *** empty log message *** 2007-06-09 21:30:56 -07:00
George Weigt 3a1cf6ec54 *** empty log message *** 2007-06-09 14:18:15 -07:00
George Weigt 20851dfb91 *** empty log message *** 2007-06-09 09:14:00 -07:00
George Weigt 413b6b23b1 *** empty log message *** 2007-06-08 19:02:35 -07:00
George Weigt 417380d87d *** empty log message *** 2007-06-08 07:15:34 -07:00
George Weigt 2304fb5c99 *** empty log message *** 2007-06-08 07:10:27 -07:00
George Weigt 63e0b0bbcb *** empty log message *** 2007-06-07 20:06:18 -07:00
George Weigt c70f7fc113 *** empty log message *** 2007-06-07 17:35:22 -07:00
George Weigt 97f4be48ce *** empty log message *** 2007-06-07 17:29:16 -07:00
George Weigt bb9bab2589 *** empty log message *** 2007-06-07 17:23:24 -07:00
George Weigt 799456396d *** empty log message *** 2007-06-07 17:17:20 -07:00
George Weigt 307940fbc0 *** empty log message *** 2007-06-07 13:57:10 -07:00
George Weigt eb22b1dd9e *** empty log message *** 2007-05-31 10:30:00 -07:00
George Weigt 5cc680cd47 *** empty log message *** 2007-05-31 10:18:58 -07:00
George Weigt 50301d888f *** empty log message *** 2007-05-31 09:03:35 -07:00
George Weigt f44445ee81 *** empty log message *** 2007-05-31 09:03:35 -07:00
George Weigt 53b7578045 *** empty log message *** 2007-05-30 08:02:18 -07:00
George Weigt 070d80e7f6 *** empty log message *** 2007-05-26 20:22:14 -07:00
George Weigt 33dfd668fa Initial revision 2007-05-26 20:13:43 -07:00
George Weigt 88526b0375 *** empty log message *** 2007-05-13 07:42:14 -07:00
George Weigt ca3a417d12 *** empty log message *** 2007-05-06 09:49:45 -07:00
George Weigt 1f4d568039 *** empty log message *** 2007-04-28 08:19:11 -07:00
George Weigt 350e37696b *** empty log message *** 2007-04-26 16:01:34 -07:00
George Weigt 2f7dae0b35 *** empty log message *** 2007-04-18 09:06:55 -07:00
George Weigt c435621015 *** empty log message *** 2007-04-15 14:48:41 -07:00
George Weigt 0fbb282179 *** empty log message *** 2007-04-12 18:40:08 -07:00
George Weigt a33de20d16 *** empty log message *** 2007-04-09 14:01:11 -07:00
George Weigt 13de5dff29 *** empty log message *** 2007-03-27 08:28:33 -07:00
George Weigt c34e518799 *** empty log message *** 2007-03-19 07:58:15 -07:00
George Weigt bbdf2d88b9 *** empty log message *** 2007-03-05 20:00:10 -07:00
George Weigt b93453c5a5 *** empty log message *** 2007-03-01 14:57:50 -07:00
George Weigt 416992903c *** empty log message *** 2007-02-25 16:27:39 -07:00
George Weigt 41d3536d66 *** empty log message *** 2007-02-19 20:35:41 -07:00
George Weigt 151a49795b *** empty log message *** 2007-02-16 21:03:26 -07:00
George Weigt 32e59bed98 *** empty log message *** 2006-12-20 09:26:11 -07:00
George Weigt 838f4535de *** empty log message *** 2006-12-20 09:19:44 -07:00
George Weigt 7943056ad0 *** empty log message *** 2006-12-07 08:56:24 -07:00
George Weigt 255ed7e1e3 *** empty log message *** 2006-12-01 12:29:11 -07:00
George Weigt 7b5147d6f6 *** empty log message *** 2006-12-01 11:57:45 -07:00
George Weigt 5108fafe58 *** empty log message *** 2006-12-01 11:55:34 -07:00
George Weigt 38367e486c *** empty log message *** 2006-11-27 16:36:56 -07:00
George Weigt d37a5435bc *** empty log message *** 2006-11-15 15:41:26 -07:00
George Weigt dd65844bd1 *** empty log message *** 2006-11-14 16:26:59 -07:00
George Weigt c6ac2704cc *** empty log message *** 2006-11-14 09:30:56 -07:00
George Weigt db28fe9fce *** empty log message *** 2006-11-13 15:06:45 -07:00
George Weigt 1bbbedacca *** empty log message *** 2006-11-09 15:36:25 -07:00
George Weigt 21b5e02604 *** empty log message *** 2006-11-07 10:54:44 -07:00
George Weigt bee6ba23ae *** empty log message *** 2006-11-03 15:59:18 -07:00
George Weigt 6731983cb9 *** empty log message *** 2006-10-30 12:40:16 -07:00
George Weigt 1c3a4c97fe *** empty log message *** 2006-10-27 14:44:23 -07:00
George Weigt 4e5fc14d23 *** empty log message *** 2006-10-27 13:05:22 -07:00
George Weigt 2d1509bd96 *** empty log message *** 2006-10-27 10:12:09 -07:00
George Weigt 3e86c5571c *** empty log message *** 2006-10-26 14:51:30 -07:00
George Weigt 0ec01a2ed1 *** empty log message *** 2006-10-26 07:17:30 -07:00
George Weigt bd22de575b *** empty log message *** 2006-10-18 12:56:21 -07:00
George Weigt 7f9b466690 *** empty log message *** 2006-10-16 13:08:45 -07:00
George Weigt eeaee6826f *** empty log message *** 2006-10-13 08:31:08 -07:00
George Weigt b944eaa11a *** empty log message *** 2006-10-12 11:45:32 -07:00
George Weigt 8eb1ad1d90 *** empty log message *** 2006-10-09 20:09:13 -07:00
George Weigt a53c4cf23c *** empty log message *** 2006-10-03 08:19:23 -07:00
George Weigt a3883bae25 *** empty log message *** 2006-09-29 15:04:38 -07:00
George Weigt 834aad1e10 *** empty log message *** 2006-09-29 12:14:03 -07:00
George Weigt 589a27f732 *** empty log message *** 2006-09-29 12:10:10 -07:00
George Weigt bd4b1fa452 *** empty log message *** 2006-09-29 11:32:37 -07:00
George Weigt e9a7f6b518 edit 2006-09-29 11:31:50 -07:00
George Weigt 03e6d7996b add 2006-09-25 19:36:59 -07:00
George Weigt 0d76f8f019 add 2006-09-23 11:16:43 -07:00
George Weigt 546a861593 add 2006-09-21 10:13:33 -07:00
George Weigt cdde6a866a edit 2006-09-18 14:51:15 -07:00
George Weigt 0065649f92 add 2006-09-14 14:51:14 -07:00
George Weigt ba87896d5a add 2006-09-14 13:50:17 -07:00
George Weigt 005df215c5 add 2006-09-14 12:55:10 -07:00
George Weigt 77b218c9fe edit 2006-09-14 10:54:51 -07:00
George Weigt 28da07ebf9 edit 2006-09-14 10:52:44 -07:00
George Weigt f801f971b2 add 2006-09-14 10:52:11 -07:00
George Weigt 0a2f6887b6 add 2006-09-08 16:23:09 -07:00
George Weigt 01bde8729a add 2006-09-08 12:59:13 -07:00
George Weigt 0c3e4e04f6 add 2006-09-08 12:56:55 -07:00
George Weigt 2b01133d21 new 2006-09-07 06:57:35 -07:00
George Weigt 7e7c923f75 add 2006-09-04 16:39:09 -07:00
George Weigt 242e971422 add 2006-08-31 10:05:01 -07:00
George Weigt 9dc4e0501a edit 2006-08-30 09:05:11 -07:00
George Weigt a9b44850dd add 2006-08-29 15:35:54 -07:00
George Weigt ba9962a7da add 2006-08-28 13:19:44 -07:00
George Weigt 3a0209f6c0 add 2006-08-23 11:01:00 -07:00
George Weigt d868dc4bcc add 2006-08-08 10:45:32 -07:00
George Weigt 875a5e01ee add 2006-08-04 12:59:15 -07:00
George Weigt 3ec5b79478 add 2006-08-04 12:55:38 -07:00
George Weigt b7884e0747 edit 2006-06-02 09:33:29 -07:00
George Weigt 08dd89fcb8 add 2006-05-25 13:54:13 -07:00
George Weigt 85816ae24e edit 2006-05-04 09:15:31 -07:00
George Weigt d699a9bdcd edit 2006-05-04 09:09:33 -07:00
George Weigt 516214639a edit 2006-05-04 09:05:01 -07:00
George Weigt 42e1828f9d add 2006-05-03 19:18:30 -07:00
George Weigt c7b3ee7cc4 add 2006-05-01 15:36:13 -07:00
George Weigt 4352cdf860 add 2006-04-27 13:48:13 -07:00
George Weigt 76a2471319 edit 2006-04-20 17:10:58 -07:00
George Weigt 7cc4264580 edit 2006-04-20 16:13:09 -07:00
George Weigt 6961c68685 add 2006-04-20 15:19:30 -07:00
George Weigt 661caf22c7 add 2006-04-13 17:21:09 -07:00
George Weigt ae86eac2e1 edit 2006-04-12 19:07:59 -07:00
George Weigt a1b546a222 add 2006-04-12 17:45:47 -07:00
George Weigt 56cd0ca2e8 edit 2006-04-06 18:49:02 -07:00
George Weigt 31b6cd019e add 2006-04-06 18:38:22 -07:00
George Weigt 842477b737 add 2006-04-06 08:35:22 -07:00
George Weigt a728deb344 add 2006-04-05 09:55:36 -07:00
George Weigt 5e18c42503 add 2006-03-24 16:40:49 -07:00
George Weigt 6dda1d5bcd add 2006-03-24 09:38:18 -07:00
George Weigt 36f6d68d1a edit 2006-03-20 08:21:19 -07:00
George Weigt 46be598f05 edit 2006-03-20 06:47:36 -07:00
George Weigt a480d2938c add 2006-03-16 08:47:41 -07:00
George Weigt 79a4b8055b add 2006-03-10 09:38:15 -07:00
George Weigt 0d4a266963 edit 2006-03-08 20:37:39 -07:00
George Weigt 8435245cc3 add 2006-03-08 20:09:44 -07:00
George Weigt 6e79865aef add 2006-03-02 20:25:30 -07:00
George Weigt e52473d8a9 edit 2006-03-02 12:36:16 -07:00
George Weigt e28de0bd36 add 2006-03-01 20:14:32 -07:00
George Weigt cf523e3ccd edit 2006-02-28 20:39:56 -07:00
George Weigt 0a57bc2428 add 2006-02-27 14:24:39 -07:00
George Weigt 5e060908c5 add 2006-02-27 08:24:08 -07:00
George Weigt 3227cf1816 add 2006-02-26 16:53:29 -07:00
George Weigt 5031a0026d add 2006-02-26 12:07:07 -07:00
George Weigt e2cb29d2b7 edit 2006-02-23 10:38:38 -07:00
George Weigt dc9ae0dda6 edit 2006-02-23 10:34:53 -07:00
George Weigt b5aec1c761 add 2006-02-23 10:30:22 -07:00
George Weigt 8031783ec9 edit 2006-02-16 20:52:32 -07:00
George Weigt c65f741012 add 2006-02-16 20:33:44 -07:00
George Weigt ee27a81799 edit 2006-02-16 11:55:28 -07:00
George Weigt c89e991a59 edit 2006-02-16 11:48:04 -07:00
George Weigt 553f92a1c9 add 2006-02-16 11:37:39 -07:00
George Weigt fcf735f3a9 edit 2006-02-14 20:32:50 -07:00
George Weigt 970d31d5bd edit 2006-02-14 14:00:39 -07:00
George Weigt 29f6b57669 edit 2006-02-14 11:05:18 -07:00
George Weigt 3482f2f2b2 add 2006-02-13 17:35:12 -07:00
George Weigt b6a8b3fa6d add 2006-02-12 21:25:10 -07:00
George Weigt 18e35d01a0 edit 2006-02-10 07:32:57 -07:00
George Weigt 3fe08d3bea add 2006-02-09 21:25:34 -07:00
George Weigt efbf49ed01 add 2006-02-09 18:29:26 -07:00
George Weigt 852d0f50e3 edit 2006-02-08 14:17:19 -07:00
George Weigt 194856e1d9 edit 2006-02-08 13:59:41 -07:00
George Weigt ba3c34a288 edit 2006-02-08 09:51:24 -07:00
George Weigt 7215b018dd add 2006-02-08 09:14:24 -07:00
George Weigt 25e273b0e6 edit 2006-02-03 10:23:24 -07:00
George Weigt 4a1fe9b469 edit 2006-02-03 10:17:21 -07:00
George Weigt 7e2b9c5a80 add 2006-02-03 09:55:22 -07:00
George Weigt de845db2f6 add 2006-02-02 09:50:10 -07:00
George Weigt 1989048abd edit 2006-02-02 08:58:00 -07:00
George Weigt 789be7490d edit 2006-02-01 19:54:36 -07:00
George Weigt 8d5f270d05 edit 2006-02-01 19:49:59 -07:00
George Weigt 5c3b3c6ab9 add 2006-02-01 19:21:06 -07:00
George Weigt a4f60db867 edit 2006-01-26 19:25:44 -07:00
George Weigt 345d5d6979 edit 2006-01-26 09:45:46 -07:00
George Weigt b6c9a194b4 add 2006-01-11 09:25:56 -07:00
George Weigt 9727ad6e7e add 2006-01-11 08:26:05 -07:00
George Weigt 15425e0097 edit 2006-01-05 16:08:29 -07:00
George Weigt bbe4c43b7f edit 2005-12-31 10:17:23 -07:00
George Weigt c5bfdeaaa4 add 2005-12-31 10:10:53 -07:00
George Weigt c8476b1615 add 2005-12-26 18:44:39 -07:00
George Weigt 98b314bff4 add 2005-12-21 09:25:55 -07:00
George Weigt a33767b0c3 add 2005-12-21 09:07:44 -07:00
George Weigt 2aedb8febb add 2005-12-21 09:00:34 -07:00
George Weigt 397b8cacdb add 2005-12-21 08:54:14 -07:00
George Weigt 597766d3a9 add 2005-12-21 08:43:48 -07:00
George Weigt 381bca3480 add 2005-12-20 08:45:12 -07:00
George Weigt 378096609f add 2005-12-19 11:10:54 -07:00
George Weigt 9a2f80ad3a add 2005-12-17 17:29:41 -07:00
George Weigt 6e82926dea edit 2005-12-15 10:22:17 -07:00
George Weigt 4f315a9419 edit 2005-12-14 17:55:17 -07:00
George Weigt 2f7ff370b4 add 2005-12-14 17:39:03 -07:00
George Weigt 8abb05f716 edit 2005-12-14 09:30:33 -07:00
George Weigt e908334c9b add 2005-12-14 09:25:59 -07:00
George Weigt a0c4cdac00 add 2005-12-13 15:57:25 -07:00
George Weigt dd388606b5 remove 2005-12-13 11:48:43 -07:00
George Weigt 5c179208a2 add 2005-12-11 14:27:56 -07:00
George Weigt b12366edd9 add 2005-12-10 15:05:44 -07:00
George Weigt 32ee828c5a add 2005-12-04 15:24:21 -07:00
George Weigt 06a559d3a8 add 2005-12-02 14:15:29 -07:00
George Weigt f8c24e1abd edit 2005-12-02 10:52:30 -07:00
George Weigt e321a1a90d add 2005-12-02 10:22:17 -07:00
George Weigt 2c7ab87b22 edit 2005-12-01 19:42:45 -07:00
George Weigt 2a95201790 add 2005-11-30 16:54:28 -07:00
George Weigt d7e5966e04 add 2005-11-30 16:41:30 -07:00
George Weigt 29403fc655 add 2005-11-30 16:40:08 -07:00
George Weigt b7c5a063ad edit 2005-11-30 16:10:13 -07:00
George Weigt 3374394be6 add 2005-11-30 16:05:51 -07:00
George Weigt fc07e4ca9a edit 2005-11-30 15:58:24 -07:00
George Weigt dd5aff1e6e edit 2005-11-30 15:54:43 -07:00
George Weigt 6b1a62aa53 add 2005-11-30 15:51:20 -07:00
George Weigt c070e38e1b add 2005-11-30 15:46:03 -07:00
George Weigt a1f706b168 Initial revision 2005-11-30 15:39:23 -07:00
George Weigt 249a7356e9 add 2005-11-30 09:36:36 -07:00
George Weigt 3c9a81c526 add 2005-11-29 19:11:49 -07:00
George Weigt 944e7f6a02 add 2005-11-29 15:11:01 -07:00
George Weigt cef51c5e62 edit 2005-11-29 13:41:39 -07:00
George Weigt 5431742625 add 2005-11-29 13:37:32 -07:00
George Weigt 4e486e1a15 add 2005-11-29 13:13:30 -07:00
George Weigt cbeb842ffd add 2005-11-29 12:34:11 -07:00
George Weigt 517887d246 add 2005-11-29 12:27:54 -07:00
George Weigt 9b272b39f9 Initial revision 2005-11-29 12:19:21 -07:00
George Weigt 0cfdb736ea add 2005-11-29 11:36:41 -07:00
George Weigt 3913edd9cf add 2005-11-25 15:51:03 -07:00
George Weigt 7c01fd4949 add 2005-11-25 13:53:29 -07:00
George Weigt ca27bf0107 add 2005-11-25 13:38:56 -07:00
George Weigt 05822a1569 add 2005-11-25 13:13:58 -07:00
George Weigt 9d2f8951d3 add 2005-11-25 13:04:40 -07:00
George Weigt 2b938248f2 add 2005-11-25 12:40:56 -07:00
George Weigt ea87ee23ef Initial revision 2005-11-20 15:33:27 -07:00
George Weigt 198978fe06 Have a nice day. 2004-10-27 15:32:25 -07:00
George Weigt 0764b961aa Have a nice day. 2004-10-26 08:44:55 -07:00
George Weigt 7c348ad4dd Have a nice day. 2004-10-22 07:08:48 -07:00
George Weigt c908fb05e4 misc. 2004-10-13 16:00:07 -07:00
George Weigt 81d3448816 Initial revision 2004-10-13 15:54:52 -07:00
251 changed files with 9469 additions and 0 deletions

BIN
doc/manual/1.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
doc/manual/16.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

37
doc/manual/16.tex 100644
View File

@ -0,0 +1,37 @@
\newpage
\subsection{}
Consider the graph of
$$y={1\over\sqrt{1+x^2}}$$
over the domain from 0 to infinity.
The following graph demonstrates the general idea.
\medskip
\verb$xrange=(0,10)$
\verb$yrange=(-1,1)$
\verb$draw(1/sqrt(1+x^2))$
\begin{center}
\includegraphics[scale=0.4]{16.png}
\end{center}
\medskip
\noindent
Now imagine that the graph is rotated about the $x$ axis.
What is the volume subtended by the area under the curve?
\medskip
\noindent
To solve, use cylindrical coordinates.
The $x$ axis becomes the $z$ axis.
We want $x$ to become a function of $y$ so invert the function.
$$y={1\over\sqrt{1+x^2}}
\quad\rightarrow\quad
{1\over y^2}=1+x^2
\quad\rightarrow\quad
x=\sqrt{{1\over y^2}-1}
$$

View File

@ -0,0 +1,74 @@
\documentclass[11pt]{article}
\pagestyle{myheadings}
\usepackage{graphicx}
\usepackage{makeidx}
\title{Eigenmath Manual}
%\author{George Weigt}
\date{\today}
%\makeindex
\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\include{nabokov}
\include{symbols}
%\include{geometric-series}
%\include{units-of-measure}
\include{draw}
\include{scripting}
\include{complex}
\include{linear-algebra}
\include{derivative}
\include{integrals}
\include{integral-trick}
\include{fund-thm-of-calculus}
\include{line-integral}
\include{surface-area}
\include{surface-integral}
\include{greens-theorem}
\include{stokes-theorem}
\include{francois-viete}
\include{curl-in-tensor-form}
\include{qho}
\include{hydrogen-wavefunctions}
\include{space-shuttle-and-corvette}
\include{avogadro}
\include{zerozero}
%\include{16}
\newpage
\include{list-of-functions}
\newpage
\include{syntax}
%\printindex
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,6 @@
all :
pdflatex Eigenmath
pdflatex Eigenmath
pdflatex Eigenmath
makeindex Eigenmath
pdflatex Eigenmath

BIN
doc/manual/arc.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,37 @@
\subsection{Avogadro's constant}
There is a proposal to define Avogadro's constant as exactly
84446886 to the third power.\footnote{Fox, Ronald and Theodore Hill.
``An Exact Value for Avogadro's Number.''
{\it American Scientist} 95 (2007): 104--107.
The proposed number in the article is actually $84446888^3$.
In a subsequent addendum the authors reduced it to $84446886^3$ to make the
number divisible by 12. See {\tt www.physorg.com/news109595312.html}}
This number corresponds to an ideal cube of atoms with 84,446,886
atoms along each edge.
Let us check the difference between the proposed value and the measured value
of $(6.0221415\pm0.0000010)\times10^{23}$ atoms.
\medskip
\verb$A=84446886^3$
\verb$B=6.0221415*10^23$
\verb$A-B$
$$-5.17173\times10^{16}$$
\verb$0.0000010*10^23$
$$1\times10^{17}$$
\medskip
\noindent
We see that the proposed value is within the experimental error.
Just for the fun of it, let us factor the proposed value.
\medskip
\verb$factor(A)$
$$2^3\times3^3\times1667^3\times8443^3$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,5 @@
\documentclass{article}
\pagestyle{empty}
\begin{document}
\include{complex}
\end{document}

View File

@ -0,0 +1,95 @@
\section{Complex numbers}
When Eigenmath starts up, it defines the symbol $i$ as $i=\sqrt{-1}$.
Other than that, there is nothing special about $i$.
It is just a regular symbol that can be redefined and used for some other purpose if need be.
\medskip
\noindent
Complex quantities can be entered in rectangular or polar form.
\medskip
\verb$a+i*b$
$$a+ib$$
\verb$exp(i*pi/3)$
$$\exp({1\over3}i\pi)$$
\medskip
\noindent
Converting to rectangular or polar coordinates simplifies mixed forms.
\medskip
\verb$A=1+i$
\verb$B=sqrt(2)*exp(i*pi/4)$
\verb$A-B$
$$1+i-2^{1/2}\exp({1\over4}i\pi)$$
\verb$rect$
$$0$$
\medskip
\noindent
Rectangular complex quantities, when raised to a power, are multiplied out.
\medskip
\verb$(a+i*b)^2$
$$a^2-b^2+2iab$$
\medskip
\noindent
When $a$ and $b$ are numerical and the power is negative, the evaluation is done as follows.
$$(a+ib)^{-n}=\left[{a-ib\over(a+ib)(a-ib)}\right]^n=\left[{a-ib\over a^2+b^2}\right]^n$$
Of course, this causes $i$ to be removed from the denominator.
%For $n=1$ we have
%$${1\over a+ib}={a-ib\over a^2+b^2}$$
Here are a few examples.
\medskip
\verb$1/(2-i)$
$${2\over5}+{1\over5}i$$
\verb$(-1+3i)/(2-i)$
$$-1+i$$
\newpage
\noindent
The absolute value of a complex number returns its magnitude.
\medskip
\verb$abs(3+4*i)$
$$5$$
\medskip
\noindent
In light of this, the following result might be unexpected.
\medskip
\verb$abs(a+b*i)$
$$\mathop{\rm abs}(a+ib)$$
\medskip
\noindent
The result is not $\sqrt{a^2+b^2}$ because that would assume that
$a$ and $b$ are real.
For example, suppose that $a=0$ and $b=i$.
Then
$$|a+ib|=|-1|=1$$
and
$$\sqrt{a^2+b^2}=\sqrt{-1}=i$$
Hence
$$|a+ib|\ne\sqrt{a^2+b^2}\quad\hbox{for some $a,b\in\cal C$}$$
\medskip
\noindent
The {\it mag} function is an alternative.
It treats symbols like $a$ and $b$ as real.
\medskip
\verb$mag(a+b*i)$
$$(a^2+b^2)^{1/2}$$

View File

@ -0,0 +1,94 @@
\subsection{Curl in tensor form}
The curl of a vector function can be expressed in tensor form as
$$\mathop{\rm curl}{\bf F}=\epsilon_{ijk}\,{\partial F_k\over\partial x_j}$$
where $\epsilon_{ijk}$ is the Levi-Civita tensor.
The following script demonstrates that this formula is equivalent
to computing curl the old fashioned way.
\medskip
\verb$-- Define epsilon.$
\verb$epsilon=zero(3,3,3)$
\verb$epsilon[1,2,3]=1$
\verb$epsilon[2,3,1]=1$
\verb$epsilon[3,1,2]=1$
\verb$epsilon[3,2,1]=-1$
\verb$epsilon[1,3,2]=-1$
\verb$epsilon[2,1,3]=-1$
\verb$-- F is a generic vector function.$
\verb$F=(FX(),FY(),FZ())$
\verb$-- A is the curl of F.$
\verb$A=outer(epsilon,d(F,(x,y,z)))$
\verb$A=contract(A,3,4) --sum across k$
\verb$A=contract(A,2,3) --sum across j$
\verb$-- B is the curl of F computed the old fashioned way.$
\verb$BX=d(F[3],y)-d(F[2],z)$
\verb$BY=d(F[1],z)-d(F[3],x)$
\verb$BZ=d(F[2],x)-d(F[1],y)$
\verb$B=(BX,BY,BZ)$
\verb$-- Are A and B equal? Subtract to find out.$
\verb$A-B$
$$\left(\matrix{0\cr0\cr0}\right)$$
\newpage
\noindent
The following is a variation on the previous script.
The product $\epsilon_{ijk}\,\partial F_k/\partial x_j$
is computed in just one line of code.
In addition, the outer product and the contraction across $k$
are now computed with a dot product.
\medskip
\verb$F=(FX(),FY(),FZ())$
\verb$epsilon=zero(3,3,3)$
\verb$epsilon[1,2,3]=1$
\verb$epsilon[2,3,1]=1$
\verb$epsilon[3,1,2]=1$
\verb$epsilon[3,2,1]=-1$
\verb$epsilon[1,3,2]=-1$
\verb$epsilon[2,1,3]=-1$
\verb$A=contract(dot(epsilon,d(F,(x,y,z))),2,3)$
\verb$BX=d(F[3],y)-d(F[2],z)$
\verb$BY=d(F[1],z)-d(F[3],x)$
\verb$BZ=d(F[2],x)-d(F[1],y)$
\verb$B=(BX,BY,BZ)$
\verb$-- Are A and B equal? Subtract to find out.$
\verb$A-B$
$$\left(\matrix{0\cr0\cr0}\right)$$

View File

@ -0,0 +1,104 @@
\section{Calculus}
\subsection{Derivative}
\index{derivative}
$d(f,x)$ returns the derivative of $f$ with respect to $x$.
The $x$ can be omitted for expressions in $x$.
\medskip
\verb$d(x^2)$
$$2x$$
\bigskip
\noindent
The following table summarizes the various ways to obtain multiderivatives.
\begin{center}
\begin{tabular}{cllllll}
%& & & & {\it alternate form} \\
%\\
$\displaystyle{\partial^2f\over\partial x^2}$ & & \verb$d(f,x,x)$ & & \verb$d(f,x,2)$ \\
\\
$\displaystyle{\partial^2f\over\partial x\,\partial y}$ & & \verb$d(f,x,y)$ \\
\\
$\displaystyle{\partial^{m+n+\cdot\cdot\cdot} f\over\partial x^m\,\partial y^n\cdots}$ & &
\verb$d(f,x,...,y,...)$ & & \verb$d(f,x,m,y,n,...)$ \\
\end{tabular}
\end{center}
%\medskip
%\verb$r=sqrt(x^2+y^2)$
%\verb$d(r,x,y)$
%$${-{xy\over(x^2+y^2)^{3/2}}}$$
\subsection{Gradient}
\index{gradient}
\noindent
The gradient of $f$ is obtained by using a vector for $x$ in $d(f,x)$.
\medskip
\verb$r=sqrt(x^2+y^2)$
\verb$d(r,(x,y))$
$$\left(\matrix{
\displaystyle{{x\over(x^2+y^2)^{1/2}}}\cr
\cr
\displaystyle{{y\over(x^2+y^2)^{1/2}}}\cr
}\right)$$
\medskip
\noindent
The $f$ in $d(f,x)$ can be a tensor function.
Gradient raises the rank by one.
\medskip
\verb$F=(x+2y,3x+4y)$
\verb$X=(x,y)$
\verb$d(F,X)$
$$\left(\matrix{1&2\cr3&4}\right)$$
\subsection{Template functions}
The function $f$ in $d(f)$ does not have to be defined.
It can be a template function with just a name and an argument list.
Eigenmath checks the argument list to figure out what to do.
For example, $d(f(x),x)$ evaluates to itself because $f$ depends on $x$.
However, $d(f(x),y)$ evaluates to zero because $f$ does not depend on $y$.
\medskip
\verb$d(f(x),x)$
$$\partial(f(x),x)$$
\verb$d(f(x),y)$
$$0$$
\verb$d(f(x,y),y)$
$$\partial(f(x,y),y)$$
\verb$d(f(),t)$
$$\partial(f(),t)$$
\medskip
\noindent
As the final example shows, an empty argument list causes
$d(f)$ to always evaluate to itself, regardless
of the second argument.
\medskip
\noindent
Template functions are useful for experimenting with differential forms.
For example, let us check the identity
$$\mathop{\rm div}(\mathop{\rm curl}{\bf F})=0$$
for an arbitrary vector function $\bf F$.
\medskip
\verb$F=(F1(x,y,z),F2(x,y,z),F3(x,y,z))$
\verb$curl(U)=(d(U[3],y)-d(U[2],z),d(U[1],z)-d(U[3],x),d(U[2],x)-d(U[1],y))$
\verb$div(U)=d(U[1],x)+d(U[2],y)+d(U[3],z)$
\verb$div(curl(F))$
$$0$$

100
doc/manual/draw.tex 100644
View File

@ -0,0 +1,100 @@
\section{Draw}
$draw(f,x)$ draws a graph of the function $f$ of $x$.
The second argument can be omitted when the dependent variable
is literally $x$ or $t$.
The vectors $xrange$ and $yrange$ control the scale of the graph.
\medskip
\verb$draw(x^2)$
\medskip
\begin{center}
\includegraphics[scale=0.4]{parabola.png}
\end{center}
\verb$xrange=(-1,1)$
\verb$yrange=(0,2)$
\verb$draw(x^2)$
\medskip
\begin{center}
\includegraphics[scale=0.4]{parabola2.png}
\end{center}
\verb$clear$
\medskip
\noindent
The clear command (or a click of the Clear button)
resets $xrange$ and $yrange$.
This needs to be done so that the next graph
appears as shown.
\newpage
\noindent
Parametric drawing occurs when a function returns a vector.
The vector $trange$ controls the parameter range.
The default range is $(-\pi,\pi)$.
\medskip
\verb$f=(cos(t),sin(t))$
\verb$draw(5*f)$
\medskip
\begin{center}
\includegraphics[scale=0.4]{circle.png}
\end{center}
\verb$trange=(0,pi/2)$
\verb$draw(5*f)$
\medskip
\begin{center}
\includegraphics[scale=0.4]{circle2.png}
\end{center}
\newpage
\noindent
Here are a couple of interesting curves and the code for drawing them.
First is a lemniscate.
\medskip
\verb$clear$
\verb$X=cos(t)/(1+sin(t)^2)$
\verb$Y=sin(t)*cos(t)/(1+sin(t)^2)$
\verb$draw(5*(X,Y))$
\medskip
\begin{center}
\includegraphics[scale=0.4]{lemniscate.png}
\end{center}
\medskip
\noindent
Next is a cardioid.
\medskip
\verb$r=(1+cos(t))/2$
\verb$u=(cos(t),sin(t))$
\verb$xrange=(-1,1)$
\verb$yrange=(-1,1)$
\verb$draw(r*u)$
\medskip
\begin{center}
\includegraphics[scale=0.4]{cardioid.png}
\end{center}

View File

@ -0,0 +1,55 @@
\section{More examples}
\subsection{Fran\c cois Vi\`ete}
Fran\c cois Vi\`ete was the first to discover an exact formula for $\pi$.
Here is his formula.
\begin{displaymath}
{2\over\pi}={\sqrt2\over2}\times{\sqrt{2+\sqrt2}\over2}\times
{\sqrt{2+\sqrt{2+\sqrt2}}\over2}\times\cdots
\end{displaymath}
%We can flip it around and write the formula like this.
%\begin{displaymath}
%\pi=2\times{2\over\sqrt2}\times{2\over\sqrt{2+\sqrt2}}\times
%{2\over\sqrt{2+\sqrt{2+\sqrt2}}}\times\cdots
%\end{displaymath}
Let $a_0=0$ and $a_{n}=\sqrt{2+a_{n-1}}$.
Then we can write
\begin{displaymath}
{2\over\pi}={a_1\over2}\times{a_2\over2}\times
{a_3\over2}\times\cdots
\end{displaymath}
%
Solving for $\pi$ we have
\begin{displaymath}
\pi=2\times{2\over a_1}\times{2\over a_2}\times{2\over a_3}\times\cdots=2\prod_{k=1}^\infty
{2\over a_k}
\end{displaymath}
%
Let us now use Eigenmath to compute $\pi$ according to Vi\`ete's formula.
Of course, we cannot calculate all the way out to infinity, we have to stop somewhere.
It turns out that nine factors are just enough to get six digits of accuracy.
\medskip
\verb$a(n)=test(n=0,0,sqrt(2+a(n-1)))$
\verb$float(2*product(k,1,9,2/a(k)))$
$$3.14159$$
\medskip
\noindent
The function $a(n)$ calls itself $n$ times so overall there are
54 calls to $a(n)$.
By using a different algorithm with temporary variables, we can get the
answer in just nine steps.
\medskip
\verb$a=0$
\verb$b=2$
\verb$for(k,1,9,a=sqrt(2+a),b=b*2/a)$
\verb$float(b)$
$$3.14159$$

View File

@ -0,0 +1,39 @@
\newpage
\index{fundamental theorem of calculus}
\noindent
The fundamental theorem of calculus was established by James Gregory,
a contemporary of Newton.
The theorem is a formal expression of the inverse relation between
integrals and derivatives.
$$\int_a^b f'(x)\,dx=f(b)-f(a)$$
Here is an Eigenmath demonstration of the fundamental theorem of calculus.
\medskip
\verb$f=x^2/2$
\verb$xrange=(-1,1)$
\verb$yrange=xrange$
\verb$draw(d(f))$
% no blank line, otherwise goes to two pages
\begin{center}
\includegraphics[scale=0.4]{funda1.png}
\end{center}
\verb$draw(integral(d(f)))$
\begin{center}
\includegraphics[scale=0.4]{funda2.png}
\end{center}
\noindent
The first graph shows that $f'(x)$ is antisymmetric, therefore the total
area under the curve from $-1$ to $1$ sums to zero.
The second graph shows that $f(1)=f(-1)$.
Hence for $f(x)={1\over2}x^2$ we have
$$\int_{-1}^1f'(x)\,dx=f(1)-f(-1)=0$$

View File

@ -0,0 +1,54 @@
\section{Details}
\subsection{User-defined symbols}
A geometric series converges according to the formula
$$\sum_{k=0}^\infty a^k={1\over1-a},\qquad|a|<1$$
If we use $a=-1/2$ and for practical purposes only count up to nine instead of infinity,
we should have
$$\sum_{k=0}^9\left(-{1\over2}\right)^k\approx{2\over3}$$
The above calculation can be done in one line of code using the $sum$ function.
\medskip
\verb$sum(k,0,9,(-0.5)^k)$
$$0.666016$$
\medskip
\noindent
The following example uses an intermediate variable.
\medskip
\verb$f=sum(k,0,9,a^k)$
\verb$f$
$$f=1+a+a^2+a^3+a^4+a^5+a^6+a^7+a^8+a^9$$
\verb$eval(f,a,-1/2)$
$$341\over512$$
\verb$float(last)$
$$0.666016$$
\medskip
\noindent
As seen on the first line, no result is printed when a symbol is defined.
When you do in fact want to see the value of a symbol,
just enter it as shown on the second line.
\medskip
\noindent
When a result is displayed, it is also stored in the symbol $last$.
\subsection{User-defined functions}
\noindent
The following example shows how to define a function.
\medskip
\verb$f(a)=sum(k,0,9,a^k)$
\verb$f(-1/2)$
$$341\over512$$
\verb$f(-0.5)$
$$0.666016$$

View File

@ -0,0 +1,123 @@
\subsection{Green's theorem}
\index{Green's theorem}
Green's theorem tells us that
$$\oint P\,dx+Q\,dy=\int\!\!\!\int
\left({\partial Q\over\partial x}-{\partial P\over\partial y}\right)
dx\,dy$$
\medskip
\noindent
Example 1.
Evaluate $\oint (2x^3-y^3)\,dx+(x^3+y^3)\,dy$ around the circle
$x^2+y^2=1$ using Green's theorem.\footnote{
Wilfred Kaplan, {\it Advanced Calculus, 5th Edition,} 287.}
\medskip
\noindent
It turns out that Eigenmath cannot solve the double integral over
$x$ and $y$ directly.
Polar coordinates are used instead.
\medskip
\verb$P=2x^3-y^3$
\verb$Q=x^3+y^3$
\verb$f=d(Q,x)-d(P,y)$
\verb$x=r*cos(theta)$
\verb$y=r*sin(theta)$
\verb$defint(f*r,r,0,1,theta,0,2pi)$
$${3\over2}\pi$$
\medskip
\noindent
The $defint$ integrand is $f{*}r$ because $r\,dr\,d\theta=dx\,dy$.
\medskip
\noindent
Now let us try computing the line integral side of Green's theorem
and see if we get the same result.
We need to use the trick of converting sine and cosine to exponentials
so that Eigenmath can find a solution.
\medskip
\verb$x=cos(t)$
\verb$y=sin(t)$
\verb$P=2x^3-y^3$
\verb$Q=x^3+y^3$
\verb$f=P*d(x,t)+Q*d(y,t)$
\verb$f=circexp(f)$
\verb$defint(f,t,0,2pi)$
$${3\over2}\pi$$
\newpage
\noindent
Example 2.
Compute both sides of Green's theorem for
$F=(1-y,x)$ over the disk $x^2+y^2\le4$.
\medskip
\noindent
First compute the line integral along the boundary of the disk.
Note that the radius of the disk is 2.
\medskip
\verb$--Line integral$
\verb$P=1-y$
\verb$Q=x$
\verb$x=2*cos(t)$
\verb$y=2*sin(t)$
\verb$defint(P*d(x,t)+Q*d(y,t),t,0,2pi)$
$$8\pi$$
\verb$--Surface integral$
\verb$x=quote(x) --remove parametrization of x$
\verb$y=quote(y) --remove parametrization of y$
\verb$h=sqrt(4-x^2)$
\verb$defint(d(Q,x)-d(P,y),y,-h,h,x,-2,2)$
$$8\pi$$
\verb$--Bonus point: Compute the surface integral using polar coordinates.$
\verb$f=d(Q,x)-d(P,y) --do before change of coordinates$
\verb$x=r*cos(theta)$
\verb$y=r*sin(theta)$
\verb$defint(f*r,r,0,2,theta,0,2pi)$
$$8\pi$$
\verb$defint(f*r,theta,0,2pi,r,0,2) --try integrating over theta first$
$$8\pi$$
\medskip
\noindent
In this case, Eigenmath solved both forms of the polar integral.
However, in cases where Eigenmath fails to solve a double integral, try
changing the order of integration.

View File

@ -0,0 +1,177 @@
\chapter{How it works}
Eigenmath is written in the C programming language.
Its central data structure is
an array of 100 thousand blocks of memory.
The size of each block is 12 bytes for Mac OS X
and 16 bytes for Windows.
\begin{verbatim}
_______
0 |_______| \
1 |_______| |
2 |_______| |
| | |
. . | 1,200,000 bytes (Mac OS X)
. . |
. . |
|_______| |
99,999 |_______| /
\end{verbatim}
\bigskip
\noindent
If necessary, Eigenmath will allocate additional memory in increments of
100 thousand blocks, up to a maximum of 10 million blocks
(one hundred times what is shown above).
%\begin{verbatim}
%100000 blocks (12 bytes/block)
%99706 free
%294 used
%\end{verbatim}
\newpage
\noindent
Blocks are C structs defined as follows.
\medskip
\begin{verbatim}
typedef struct U {
union {
struct {
struct U *car; // pointing down
struct U *cdr; // pointing right
} cons;
char *printname;
char *str;
struct tensor *tensor;
struct {
unsigned int *a, *b; // rational number a over b
} q;
double d;
} u;
unsigned char k, tag;
} U;
\end{verbatim}
\medskip
\noindent
The member $k$ identifies the union that is stored in the block.
The value of $k$ is one of the following.
\medskip
\begin{verbatim}
enum {
CONS,
NUM,
DOUBLE,
STR,
TENSOR,
SYM,
};
\end{verbatim}
\newpage
\noindent
Blocks are linked together to store mathematical expressions.
For example, the following shows how the expression
$A\times B+C$ is stored.
\begin{verbatim}
_______ _______ _______
|CONS |--->|CONS |----------------------------->|CONS |
| | | | | |
|_______| |_______| |_______|
| | |
___V___ ___V___ _______ _______ ___V___
|SYM | |CONS |--->|CONS |--->|CONS | |SYM |
|add | | | | | | | |C |
|_______| |_______| |_______| |_______| |_______|
| | |
___V___ ___V___ ___V___
|SYM | |SYM | |SYM |
|times | |A | |B |
|_______| |_______| |_______|
\end{verbatim}
\bigskip
\noindent
Only CONS blocks contain pointers to other blocks.
Every other kind of block is a terminal node.
Fundamentally, this approach is a subset of the S-expression data structure
invented by John McCarthy for the LISP programming language.
\newpage
\noindent
Confining pointers to CONS blocks differs from the more traditional linked
list data structure in a significant way.
In a linked list, blocks contain both data and pointers simultaneously.
For example, this is how one might store $A+B$ using a linked list.
\begin{verbatim}
_______ _______ _______
|_______|---->|_______|---->|_______|
|SYM | |SYM | |SYM |
|add | |A | |B |
|_______| |_______| |_______|
\end{verbatim}
\bigskip
\noindent
Now suppose we want to store an additional expression $A+C$.
Using a linked list, we have to make copies of the SYM-add and
SYM-A blocks
because of the pointers.
If we were to rewrite the pointers we would destroy the original
expression.
However, with S-expressions all we have to do is allocate new CONS
blocks to create new expressions.
We never have to copy data.
We can store thousands of expressions with CONS
blocks all pointing to a common SYM-A block.
\newpage
\noindent
As it runs, Eigenmath allocates memory blocks to build new expressions.
For example, $A+A$ is changed to $2A$ by $evel\_add$.
Here is the input expression to $eval\_add$.
\begin{verbatim}
_______ _______ _______
|CONS |--->|CONS |--->|CONS |
| | | | | |
|_______| |_______| |_______|
| | |
___V___ | ___V___
|SYM | |------->|SYM |
|add | |A |
|_______| |_______|
\end{verbatim}
\bigskip
\noindent
And here is the output expression from $eval\_add$.
\begin{verbatim}
_______ _______ _______
|CONS |--->|CONS |--->|CONS |
| | | | | |
|_______| |_______| |_______|
| | |
___V___ ___V___ ___V___
|SYM | |NUM | |SYM |
|times | |2 | |A |
|_______| |_______| |_______|
\end{verbatim}
\bigskip
\noindent
The three CONS blocks in the output expression are new.
They are not the same as the CONS blocks in the input expression.
In this particular example, Eigenmath allocates a total of four blocks
to build the new expression,
three CONS blocks and one NUM block.
Eventually all of the available blocks get used up, at which point Eigenmath
does garbage collection to recover unused blocks.
Returning to the example, garbage collection would recover the original
three CONS blocks that formed $A+A$, if nothing points to that expression.

View File

@ -0,0 +1,53 @@
\subsection{Hydrogen wavefunctions}
\index{hydrogen wavefunctions}
Hydrogen wavefunctions $\psi$ are solutions to the differential equation
$${\psi\over n^2}=\nabla^2\psi+{2\psi\over r}$$
where $n$ is an integer representing the quantization of total energy and
$r$ is the radial distance of the electron.
The Laplacian operator in spherical coordinates is
$$\nabla^2={1\over r^2}{\partial\over\partial r}
\left(r^2{\partial\over\partial r}\right)
+{1\over r^2\sin\theta}{\partial\over\partial\theta}
\left(\sin\theta{\partial\over\partial\theta}\right)
+{1\over r^2\sin^2\theta}{\partial^2\over\partial\phi^2}$$
The general form of $\psi$ is
$$\psi=r^le^{-r/n}L_{n-l-1}^{2l+1}(2r/n)
P_l^{|m|}(\cos\theta)e^{im\phi}$$
where $L$ is a Laguerre polynomial, $P$ is a Legendre polynomial and
$l$ and $m$ are integers such that
$$1\le l\le n-1,\qquad -l\le m\le l$$
The general form can be expressed as the product of a radial
wavefunction $R$ and a spherical harmonic $Y$.
$$\psi=RY,\qquad R=r^le^{-r/n}L_{n-l-1}^{2l+1}(2r/n),\qquad
Y=P_l^{|m|}(\cos\theta)e^{im\phi}$$
The following code checks $E=K+V$ for $n,l,m=7,3,1$.
\medskip
\verb$laplacian(f)=1/r^2*d(r^2*d(f,r),r)+$
\verb$1/(r^2*sin(theta))*d(sin(theta)*d(f,theta),theta)+$
\verb$1/(r*sin(theta))^2*d(f,phi,phi)$
\verb$n=7$
\verb$l=3$
\verb$m=1$
\verb$R=r^l*exp(-r/n)*laguerre(2*r/n,n-l-1,2*l+1)$
\verb$Y=legendre(cos(theta),l,abs(m))*exp(i*m*phi)$
\verb$psi=R*Y$
\verb$E=psi/n^2$
\verb$K=laplacian(psi)$
\verb$V=2*psi/r$
\verb$simplify(E-K-V)$
$$0$$

View File

@ -0,0 +1,34 @@
\newpage
\noindent
Here is a useful trick.
Difficult integrals involving sine and cosine
can often be solved by using exponentials.
Trigonometric simplifications involving powers
and multiple angles turn into simple algebra in the
exponential domain.
For example, the definite integral
$$\int_0^{2\pi}\left(\sin^4t-2\cos^3(t/2)\sin t\right)dt$$
can be solved as follows.
\medskip
\verb$f=sin(t)^4-2*cos(t/2)^3*sin(t)$
\verb$f=circexp(f)$
\verb$defint(f,t,0,2*pi)$
$$-{16\over5}+{3\over4}\pi$$
\medskip
\noindent
Here is a check.
\medskip
\verb$g=integral(f,t)$
\verb$f-d(g,t)$
$$0$$

View File

@ -0,0 +1,44 @@
\subsection{Integral}
\index{integral}
\noindent
$integral(f,x)$ returns the integral of $f$ with respect to $x$.
The $x$ can be omitted for expressions in $x$.
A multi-integral can be obtained by extending the argument list.
\medskip
\verb$integral(x^2)$
$${1\over3}x^3$$
\verb$integral(x*y,x,y)$
$${1\over4}x^2y^2$$
\medskip
\noindent
$defint(f,x,a,b,\ldots)$
computes the definite integral of $f$ with respect to $x$ evaluated from $a$ to $b$.
The argument list can be extended for multiple integrals.
\medskip
\noindent
The following example computes the integral of $f=x^2$
over the domain of a semicircle.
For each $x$ along the abscissa, $y$ ranges from 0 to $\sqrt{1-x^2}$.
\medskip
\verb$defint(x^2,y,0,sqrt(1-x^2),x,-1,1)$
$${1\over8}\pi$$
\medskip
\noindent
As an alternative, the $eval$ function can be used to compute a definite integral step by step.
\medskip
\verb$I=integral(x^2,y)$
\verb$I=eval(I,y,sqrt(1-x^2))-eval(I,y,0)$
\verb$I=integral(I,x)$
\verb$eval(I,x,1)-eval(I,x,-1)$
$${1\over8}\pi$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,257 @@
\subsection{Arc length}
Let $g(t)$ be a function that draws a curve.
The arc length from $g(a)$ to $g(b)$ is given by
$$\int_a^b|g'(t)|\,dt$$
where $|g'(t)|$ is the length of the tangent vector at $g(t)$.
The integral sums over all of the tangent lengths to arrive at the total length
from $a$ to $b$.
For example, let us measure the length of
\medskip
\verb$xrange=(0,1)$
\verb$yrange=(0,1)$
\verb$draw(x^2)$
\begin{center}
\includegraphics[scale=0.4]{arc.png}
\end{center}
\medskip
\noindent
A suitable $g(t)$ for the arc is
$$g(t)=(t,t^2),\quad0\le t\le1$$
The Eigenmath solution is
\medskip
\verb$x=t$
\verb$y=t^2$
\verb$g=(x,y)$
\verb$defint(abs(d(g,t)),t,0,1)$
$$\hbox{$1\over4$}\log(2+5^{1/2})+\hbox{$1\over2$}5^{1/2}$$
\verb$float$
$$1.47894$$
\medskip
\noindent
As we would expect, the result is greater than $\sqrt2$, the length of the
diagonal.
\medskip
\noindent
The result seems rather complicated given that we
started with a simple parabola.
Let us inspect $|g'(t)|$ to see why.
\medskip
\verb$g$
$$g=\left(\matrix{t\cr t^2}\right)$$
\medskip
\verb$d(g,t)$
$$\left(\matrix{1\cr2t}\right)$$
\medskip
\verb$abs(d(g,t))$
$$(4t^2+1)^{1/2}$$
\medskip
\noindent
The following script does a discrete computation of the arc length by dividing
the curve into 100 pieces.
\medskip
\verb$g(t)=(t,t^2)$
\verb$h(t)=abs(g(t)-g(t-0.01))$
\verb$L=0$
\verb$for(k,1,100,L=L+h(k/100.0))$
\verb$L$
$$L=1.47894$$
\newpage
\noindent
Find the length of the curve $y=x^{3/2}$ from the origin to
$x={4\over3}$.
\medskip
\verb$x=t$
\verb$y=x^(3/2)$
\verb$g=(x,y)$
\verb$defint(abs(d(g,x)),x,0,4/3)$
$$\hbox{$56\over27$}$$
\medskip
\noindent
Because of the way $t$ is substituted for $x$, the previous solution is
really no different from the following.
\medskip
\verb$g=(t,t^(3/2))$
\verb$defint(abs(d(g,t)),t,0,4/3)$
$$\hbox{$56\over27$}$$
\newpage
\subsection{Line integrals}
There are two different kinds of line integrals,
one for scalar fields and one
for vector fields.
The following table shows how both are based on the calculation of
arc length.
\bigskip
\begin{center}
\begin{tabular}{|lll|}
\hline
& & \\
& Abstract form
& Computable form
\\
& & \\
Arc length
& $\displaystyle{\int_C ds}$
& $\displaystyle{\int_a^b |g'(t)|\,dt}$
\\
& & \\
Line integral, scalar field
& $\displaystyle{\int_C f\,ds}$
& $\displaystyle{\int_a^b f(g(t))\,|g'(t)|\,dt}$
\\
& & \\
Line integral, vector field
& $\displaystyle{\int_C(F\cdot u)\,ds}$
& $\displaystyle{\int_a^b F(g(t))\cdot g'(t)\,dt}$
\\
& & \\
\hline
\end{tabular}
\end{center}
\bigskip
\noindent
For the vector field form, the symbol $u$ is the unit tangent vector
$$u={g'(t)\over|g'(t)|}$$
The length of the tangent vector cancels with $ds$
as follows.
$$\int_C(F\cdot u)\,ds
=\int_a^b\bigg(F(g(t))\cdot{g'(t)\over|g'(t)|}\bigg)\,\bigg(|g'(t)|\,dt\bigg)
=\int_a^b F(g(t))\cdot g'(t)\,dt
$$
\newpage
\noindent
Evaluate
$$\int_Cx\,ds\quad\hbox{and}\quad\int_Cx\,dx$$
where $C$ is a straight line from $(0,0)$ to $(1,1)$.
\medskip
\noindent
What a difference the measure makes.
The first integral is over a scalar field and the second is over a vector field.
This can be understood when we recall that
$$ds=|g'(t)|\,dt
%\quad\hbox{and}\quad
%\int_Cx\,dx=\int_Cx\,dx+0\,dy
$$
Hence for $\int_Cx\,ds$ we have
\medskip
\verb$x=t$
\verb$y=t$
\verb$g=(x,y)$
\verb$defint(x*abs(d(g,t)),t,0,1)$
$$1\over2^{1/2}$$
\medskip
\noindent
For $\int_Cx\,dx$ we have
\medskip
\verb$x=t$
\verb$y=t$
\verb$g=(x,y)$
\verb$F=(x,0)$
\verb$defint(dot(F,d(g,t)),t,0,1)$
$$1\over2$$
\newpage
\noindent
The following line integral problems are from
{\it Advanced Calculus, Fifth Edition} by Wilfred Kaplan.
\medskip
\noindent
Evaluate $\int y^2\,dx$ along the straight
line from $(0,0)$ to $(2,2)$.
\medskip
\verb$x=2t$
\verb$y=2t$
\verb$g=(x,y)$
\verb$F=(y^2,0)$
\verb$defint(dot(F,d(g,t)),t,0,1)$
$$8\over3$$
\medskip
\noindent
Evaluate $\int z\,dx+x\,dy+y\,dz$
along the path
$x=2t+1$, $y=t^2$, $z=1+t^3$, $0\le t\le 1$.
\medskip
\verb$x=2t+1$
\verb$y=t^2$
\verb$z=1+t^3$
\verb$g=(x,y,z)$
\verb$F=(z,x,y)$
\verb$defint(dot(F,d(g,t)),t,0,1)$
$$163\over30$$

View File

@ -0,0 +1,101 @@
\section{Linear algebra}
\index{linear algebra}
$dot$ is used to multiply vectors and matrices.
The following example shows how to use $dot$ and $inv$ to solve for
$\bf X$ in $\bf AX=B$.
\medskip
{\tt A=((3.8,7.2),(1.3,-0.9))}
{\tt B=(16.5,-22.1)}
{\tt X=dot(inv(A),B)}
{\tt X}
$$\left(\matrix{-11.2887\cr8.24961}\right)$$
\medskip
\noindent
One might wonder why the $dot$ function is necessary.
Why not simply use $X=inv(A)*B$ like scalar multiplication?
The reason is that the software normally reorders factors internally to optimize processing.
For example, $inv(A)*B$ in symbolic form is changed to $B*inv(A)$ internally.
Since the dot product is not commutative, this reordering would give the wrong result.
Using a function to do the multiply avoids the problem because
function arguments are not reordered.
\medskip
\noindent
It should be noted that $dot$ can have more than two arguments.
For example, $dot(A,B,C)$ can be used for the dot product of three tensors.
\bigskip
\noindent
The following example demonstrates the relation
${\bf A}^{-1}=\mathop{\rm adj}{\bf A}/\mathop{\rm det}{\bf A}$.
\medskip
\verb$A=((a,b),(c,d))$
\medskip
\verb$inv(A)$
$$\left(\matrix{
\displaystyle{d\over ad-bc} & \displaystyle{-{b\over ad-bc}}\cr
\cr
\displaystyle{-{c\over ad-bc}} & \displaystyle{a\over ad-bc}\cr
}\right)$$
\medskip
\verb$adj(A)$
$$\left(\matrix{
d & -b\cr
-c & a\cr
}\right)$$
\medskip
\verb$det(A)$
$$ad-bc$$
\medskip
\verb$inv(A)-adj(A)/det(A)$
$$\left(\matrix{
0 & 0\cr
0 & 0\cr
}\right)$$
\medskip
\noindent
Sometimes a calculation will be simpler if it can be reorganized to use $adj$ instead of $inv$.
The main idea is to try to prevent the determinant from appearing as a divisor.
For example, suppose for matrices $\bf A$ and $\bf B$ you want to check that
$${\bf A}-{\bf B}^{-1}=0$$
Depending on the complexity of $\mathop{\rm det}\bf B$, the software
may not be able to find a simplification that yields zero.
Should that occur, the following alternative can be tried.
$$(\mathop{\rm det}{\bf B})\cdot{\bf A}-\mathop{\rm adj}{\bf B}=0$$
\bigskip
\noindent
The adjunct of a matrix is related to the cofactors as follows.
\medskip
\verb$A=((a,b),(c,d))$
\verb$C=((0,0),(0,0))$
\verb$C[1,1]=cofactor(A,1,1)$
\verb$C[1,2]=cofactor(A,1,2)$
\verb$C[2,1]=cofactor(A,2,1)$
\verb$C[2,2]=cofactor(A,2,2)$
\verb$C$
$$C=\left(\matrix{d&-c\cr -b&a}\right)$$
\verb$adj(A)-transpose(C)$
$$\left(\matrix{0&0\cr0&0\cr}\right)$$

View File

@ -0,0 +1,402 @@
\section{Built-in functions}
\section*{abs}
abs($x$) returns the absolute value or vector length of $x$.
The mag function should be used for complex $x$.
\medskip
{\tt P=(x,y)}
{\tt abs(P)}
$$(x^2+y^2)^{1/2}$$
\section*{adj}
adj($m$) returns the adjunct of matrix $m$.
\section*{and}
and($a,b,\ldots$) returns the logical ``and'' of predicate expressions.
\section*{arccos}
arccos($x$) returns the inverse cosine of $x$.
\section*{arccosh}
arccosh($x$) returns the inverse hyperbolic cosine of $x$.
\section*{arcsin}
arcsin($x$) returns the inverse sine of $x$.
\section*{arcsinh}
arcsinh($x$) returns the inverse hyperbolic sine of $x$.
\section*{arctan}
arcttan($x$) returns the inverse tangent of $x$.
\section*{arctanh}
arctanh($x$) returns the inverse hyperbolic tangent of $x$.
\section*{arg}
arg($z$) returns the angle of complex $z$.
\section*{ceiling}
ceiling($x$) returns the smallest integer not less than $x$.
\section*{check}
check($x$) In a script, if the predicate $x$ is true then continue, else stop.
\section*{choose}
choose($n,k$) returns $\displaystyle\left({n \atop k}\right)$
\section*{circexp}
circexp($x$) returns expression $x$ with circular functions converted
to exponential forms.
Sometimes this will simplify an expression.
\section*{coeff}
coeff($p,x,n$) returns the coefficient of $x^n$ in polynomial $p$.
\section*{cofactor}
cofactor($m,i,j$) returns of the cofactor of matrix $m$ with respect to row $i$ and column $j$.
\section*{conj}
conj($z$) returns the complex conjugate of $z$.
\section*{contract}
\index{trace}
contract($a,i,j$) returns tensor $a$ summed over indices $i$ and $j$.
If $i$ and $j$ are omitted then indices 1 and 2 are used.
contract($m$) is equivalent to the trace of matrix $m$.
\section*{cos}
cos($x$) returns the cosine of $x$.
%If $x$ is a floating point number then $\cos(x)$ is evaluated numerically.
\section*{cosh}
cosh($x$) returns the hyperbolic cosine of $x$.
\section*{cross}
cross($u,v$) returns the cross product of vectors $u$ and $v$.
\section*{curl}
curl($u$) returns the curl of vector $u$.
\section*{d}
d($f,x$) returns the derivative of $f$ with respect to $x$.
\section*{defint}
defint($f,x,a,b,\ldots$)
returns the definite integral of $f$ with respect to $x$ evaluated from $a$ to $b$.
The argument list can be extended for multiple integrals.
For example, $d(f,x,a,b,y,c,d)$.
\section*{deg}
deg($p,x$) returns the degree of polynomial $p$ in $x$.
\section*{denominator}
denominator($x$) returns the denominator of expression $x$.
\section*{det}
det($m$) returns the determinant of matrix $m$.
\section*{do}
do($a,b,\ldots$) evaluates the argument list from left to right.
Returns the result of the last argument.
\section*{dot}
dot($a,b,\ldots$) returns the dot product of tensors.
\section*{draw}
draw($f,x$) draws the function $f$ with respect to $x$.
\section*{erf}
erf($x$) returns the error function of $x$.
\section*{erfc}
erf($x$) returns the complementary error function of $x$.
\section*{eval}
eval($f,x,n$) returns $f$ evaluated at $x=n$.
\section*{exp}
exp($x$) returns $e^x$.
\section*{expand}
expand($r,x$) returns the partial fraction expansion of the ratio of
polynomials $r$ in $x$.
\medskip
\verb$expand(1/(x^3+x^2),x)$
$${1\over x^2}-{1\over x}+{1\over x+1}$$
\section*{expcos}
expcos($x$) returns the cosine of $x$ in exponential form.
\medskip
{\tt expcos(x)}
$${1\over2}\exp(-ix)+{1\over2}\exp(ix)$$
\section*{expsin}
expsin($x$) returns the sine of $x$ in exponential form.
\medskip
{\tt expsin(x)}
$${1\over2}i\exp(-ix)-{1\over2}i\exp(ix)$$
\section*{factor}
factor($n$) factors the integer $n$.
\medskip
{\tt factor(12345)}
$$3\times 5\times 823$$
\medskip
\noindent
factor($p,x$) factors polynomial $p$ in $x$.
The last argument can be omitted for polynomials in $x$.
The argument list can be extended for multivariate polynomials.
For example, factor($p,x,y$) factors $p$ over $x$ and then over $y$.
\medskip
{\tt factor(125*x{\char94}3-1)}
$$(5x-1)(25x^2+5x+1)$$
\section*{factorial}
Example:
\medskip
{\tt 10!}
$$3628800$$
\section*{filter}
filter($f,a,b,\ldots$) returns $f$ with terms involving $a$, $b$, etc. removed.
\medskip
{\tt 1/a+1/b+1/c}
$${1\over a}+{1\over b}+{1\over c}$$
{\tt filter(last,a)}
$${1\over b}+{1\over c}$$
\section*{float}
float($x$) converts $x$ to a floating point value.
\medskip
{\tt sum(n,0,20,(-1/2){\char94}n)}
$$699051\over1048576$$
{\tt float(last)}
$$0.666667$$
\section*{floor}
floor($x$) returns the largest integer not greater than $x$.
\section*{for}
for($i,j,k,a,b,\ldots$) For $i$ equals $j$ through $k$ evaluate $a$, $b$, etc.
\medskip
{\tt x=0}
{\tt y=2}
{\tt for(k,1,9,x=sqrt(2+x),y=2*y/x)}
{\tt float(y)}
$$3.14159$$
\section*{gcd}
gcd($a,b,\ldots$) returns the greatest common divisor.
\section*{hermite}
hermite($x,n$) returns the $n$th Hermite polynomial in $x$.
\section*{hilbert}
hilbert($n$) returns a Hilbert matrix of order $n$.
\section*{imag}
imag($z$) returns the imaginary part of complex $z$.
\section*{inner}
inner($a,b,\ldots$) returns the inner product of tensors.
Same as the dot product.
\section*{integral}
integral($f,x$) returns the integral of $f$ with respect to $x$.
\section*{inv}
inv($m$) returns the inverse of matrix $m$.
\section*{isprime}
isprime($n$) returns 1 if $n$ is prime, zero otherwise.
\medskip
{\tt isprime(2{\char94}53-111)}
$$1$$
\section*{laguerre}
laguerre($x,n,a$) returns the $n$th Laguerre polynomial in $x$.
If $a$ is omitted then $a=0$ is used.
\section*{lcm}
lcm($a,b,\ldots$) returns the least common multiple.
\section*{leading}
leading($p,x$) returns the leading coefficient of polynomial $p$ in $x$.
\medskip
\verb$leading(5x^2+x+1,x)$
$$5$$
\section*{legendre}
legendre($x,n,m$) returns the $n$th Legendre polynomial in $x$.
If $m$ is omitted then $m=0$ is used.
\section*{log}
log($x$) returns the natural logarithm of $x$.
\section*{mag}
mag($z$) returns the magnitude of complex $z$.
\section*{mod}
mod($a,b$) returns the remainder of $a$ divided by $b$.
\section*{not}
not($x$) negates the result of predicate expression $x$.
\section*{nroots}
nroots($p,x$) returns all of the roots, both real and complex, of
polynomial $p$ in $x$.
The roots are computed numerically.
The coefficients of $p$ can be real or complex.
\section*{numerator}
numerator($x$) returns the numerator of expression $x$.
%\begin{itemize}
%\item[$\scriptstyle1$]{\tt numerator(a/b+b/a)}
%\item[$\scriptstyle2$]\hspace{50pt} $a^2+b^2$
%\end{itemize}
\section*{or}
or($a,b,\ldots$) returns the logical ``or'' of predicate expressions.
\section*{outer}
outer($a,b,\ldots$) returns the outer product of tensors.
\section*{polar}
polar($z$) converts complex $z$ to polar form.
\section*{prime}
prime($n$) returns the $n$th prime number, $1\le n\le10{,}000$.
\section*{print}
print($a,b,\ldots$) evaluates expressions and prints the results..
Useful for printing from inside a ``for'' loop.
\section*{product}
product($i,j,k,f$) returns $\displaystyle\prod_{i=j}^k f$
\section*{quote}
quote($x$) returns expression $x$ unevaluated.
\section*{quotient}
quotient($p,q,x$) returns the quotient of polynomials in $x$.
\section*{rank}
rank($a$) returns the number of indices that tensor $a$ has.
A scalar has no indices so its rank is zero.
\section*{rationalize}
rationalize($x$) puts everything over a common denominator.
\medskip
{\tt rationalize(a/b+b/a)}
$$a^2+b^2\over ab$$
\section*{real}
real($z$) returns the real part of complex $z$.
\section*{rect}
rect($z$) returns complex $z$ in rectangular form.
\section*{roots}
roots($p,x$) returns the values of $x$ such that the polynomial $p(x)=0$.
The polynomial should be factorable over integers.
\section*{simplify}
simplify($x$) returns $x$ in a simpler form.
\section*{sin}
sin($x$) returns the sine of $x$.
\section*{sinh}
sinh($x$) returns the hyperbolic sine of $x$.
\section*{sqrt}
sqrt($x$) returns the square root of $x$.
\section*{stop}
In a script, it does what it says.
\section*{subst}
subst($a,b,c$) substitutes $a$ for $b$ in $c$ and returns the result.
\section*{sum}
sum($i,j,k,f$) returns $\displaystyle\sum_{i=j}^k f$
\section*{tan}
tan($x$) returns the tangent of $x$.
\section*{tanh}
tanh($x$) returns the hyperbolic tangent of $x$.
\section*{taylor}
taylor($f,x,n,a$) returns the Taylor expansion of $f$ of $x$ at $a$.
The argument $n$ is the degree of the expansion.
If $a$ is omitted then $a=0$ is used.
\medskip
{\tt taylor(1/cos(x),x,4)}
$${5\over24}x^4+{1\over2}x^2+1$$
\section*{test}
test($a,b,c,d,\ldots$)
If $a$ is true then $b$ is returned else if $c$ is true then $d$ is returned, etc.
If the number of arguments is odd then the last argument is returned when all else fails.
\section*{transpose}
transpose($a,i,j$) returns the transpose of tensor $a$ with respect to indices $i$ and $j$.
If $i$ and $j$ are omitted then 1 and 2 are used.
Hence a matrix can be transposed with a single argument.
\medskip
{\tt A=((a,b),(c,d))}
{\tt transpose(A)}
$$\left(\matrix{a & c\cr b & d\cr}\right)$$
\section*{unit}
unit($n$) returns an $n\times n$ identity matrix.
\medskip
{\tt unit(2)}
$$\left(\matrix{1&0\cr0&1\cr}\right)$$
\section*{zero}
zero($i,j,\ldots$) returns a null tensor with dimensions $i$, $j$, etc.
Useful for creating a tensor and then setting the component values.

View File

@ -0,0 +1,111 @@
\section{Introduction}
The following is an excerpt from Vladimir Nabokov's
autobiography {\it Speak, Memory.}
\begin{quote}
A foolish tutor had explained logarithms to me much too early, and I had
read (in a British publication, the {\it Boy's Own Paper}, I believe)
about a certain Hindu calculator who in exactly two seconds could find the
seventeenth root of, say,
3529471145 760275132301897342055866171392
(I am not sure I have got this right; anyway the root was 212).
\end{quote}
We can check Nabokov's arithmetic by typing the following into Eigenmath.
\medskip
\verb$212^17$
\medskip
\noindent
After pressing the return key, Eigenmath displays the following result.
$$3529471145760275132301897342055866171392$$
So Nabokov did get it right after all.
We can enter {\it float} or click on the float button to scale the number
down to size.
\medskip
\verb$float$
$$3.52947\times10^{39}$$
\medskip
\noindent
Now let us see if Eigenmath can find the
seventeenth root of this number, like the Hindu calculator could.
\medskip
\verb$N=212^17$
\verb$N$
$$N=3529471145760275132301897342055866171392$$
\verb$N^(1/17)$
$$212$$
\medskip
\noindent
It is worth mentioning that when a symbol is assigned a value,
no result is printed.
To see the value of a symbol, just evaluate it by putting it on a line by
itself.
\medskip
\verb$N$
$$N=3529471145760275132301897342055866171392$$
\newpage
\subsection{Negative exponents}
Eigenmath requires parentheses around negative exponents.
For example,
\medskip
\verb$10^(-3)$
\medskip
\noindent
instead of
\medskip
\verb$10^-3$
\medskip
\noindent
The reason for this is that the binding of the negative sign is not always
obvious.
For example, consider
\medskip
\verb$x^-1/2$
\medskip
\noindent
It is not clear whether the exponent should be $-1$ or $-1/2$.
So Eigenmath requires
\medskip
\verb$x^(-1/2)$
\medskip
\noindent
which is unambiguous.
\medskip
\noindent
Now a new question arises.
Never mind the minus sign, what is the binding of the caret symbol itself?
The answer is, it binds to the first symbol that follows it and nothing else.
For example, the following is parsed as $(x^1)/2$.
\medskip
\verb$x^1/2$
$$\hbox{$1\over2$}x$$
\medskip
\noindent
So in general, parentheses are needed when the exponent is an expression.
\medskip
\verb$x^(1/2)$
$$x^{1/2}$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

26
doc/manual/qho.tex 100644
View File

@ -0,0 +1,26 @@
\subsection{Quantum harmonic oscillator}
For total energy $E$, kinetic energy $K$ and potential energy $V$ we have
$$E=K+V$$
The corresponding formula for a quantum harmonic oscillator is
$$(2n+1)\psi=-{d^2\psi\over dx^2}+x^2\psi$$
where $n$ is an integer and represents the quantization of energy values.
The solution to the above equation is
$$\psi_n(x)=\exp(-x^2/2)H_n(x)$$
where $H_n(x)$ is the $n$th Hermite polynomial in $x$.
The following Eigenmath code checks $E=K+V$ for $n=7$.
\medskip
\verb$n=7$
\verb$psi=exp(-x^2/2)*hermite(x,n)$
\verb$E=(2*n+1)*psi$
\verb$K=-d(psi,x,x)$
\verb$V=x^2*psi$
\verb$E-K-V$
$$0$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

View File

@ -0,0 +1,73 @@
\section{Scripts}
\index{scripts}
Here is a simple example that draws the graph of $y=mx+b$.
\medskip
\verb$y=m*x+b$
\verb$m=1/2$
\verb$b=-3$
\verb$draw(y)$
\begin{center}
\includegraphics[scale=0.4]{1.png}
\end{center}
\noindent
Now suppose that we want to draw the graph
with a different $m$.
We could type in everything all over again, but it would be easier
in the long run to write a script.
Then we can go back and quickly change $m$ and $b$ as many times as we want.
\medskip
\noindent
To prepare a script, click on the Edit Script button.
Then enter the script commands, one per line, as shown above.
Then click on the Run Script button to see the graph.
\medskip
\noindent
Eigenmath runs a script by stepping through it line by line.
Each line is evaluated just like a regular command.
This continues until the end of the script is reached.
After the script runs, you can click Edit Script and go back and change something.
%By the way, Eigenmath automatically does a clear
%running a script.
\newpage
\noindent
Sometimes it is desirable to have a script print a few comments when it runs.
This can be accomplished by placing the desired text in quotes
on a single line.
For example, the script
\medskip
\verb$"Here is the value of pi."$
\verb$float(pi)$
\medskip
\noindent
displays the following when run.
\medskip
\verb$Here is the value of pi.$
$$3.14159$$
\medskip
\noindent
Eigenmath includes a simple debug facility.
Setting the variable $trace$ to 1 causes each line of the script to be
printed as the script runs.
Normally this setting would be the first line in the script.
\medskip
\verb$trace=1$
\verb$--Now each line of the script is printed as it runs.$

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -0,0 +1,46 @@
\subsection{Space shuttle and Corvette}
The space shuttle accelerates from zero to 17{,}000 miles per hour
in 8 minutes.
A Corvette accelerates from zero to 60 miles per hour in 4.5 seconds.
The following script compares the two.
\medskip
\verb$vs=17000*"mile"/"hr"$
\verb$ts=8*"min"/(60*"min"/"hr")$
\verb$as=vs/ts$
\verb$as$
\verb$vc=60*"mile"/"hr"$
\verb$tc=4.5*"sec"/(3600*"sec"/"hr")$
\verb$ac=vc/tc$
\verb$ac$
\verb$"Time for Corvette to reach orbital velocity:"$
\verb$vs/ac$
\verb$vs/ac*60*"min"/"hr"$
\medskip
\noindent
Here is the result when the script runs.
It turns out that the space shuttle accelerates more than twice as fast as a
Corvette.
\medskip
$$a_s={\hbox{127500 mile}\over(\hbox{hr})^2}$$
$$a_c={\hbox{48000 mile}\over(\hbox{hr})^2}$$
\verb$Time for Corvette to reach orbital velocity:$
$$\hbox{0.354167 hr}$$
$$\hbox{21.25 min}$$

View File

@ -0,0 +1,5 @@
\documentclass{article}
\pagestyle{empty}
\begin{document}
\include{stokes-theorem}
\end{document}

View File

@ -0,0 +1,81 @@
\subsection{Stokes' theorem}
\index{Stokes' theorem}
Stokes' theorem proves the following equivalence of line and surface
integrals.
%\bigskip
%\noindent
%$\displaystyle{\oint_C P\,dx+Q\,dy+R\,dz}$
%$$=
%\int\!\!\!\int_S
%\left({\partial Q\over\partial x}-{\partial P\over\partial y}\right)\,dx\,dy
%+
%\left({\partial R\over\partial y}-{\partial Q\over\partial z}\right)\,dy\,dz
%+
%\left({\partial P\over\partial z}-{\partial R\over\partial x}\right)\,dz\,dx
%$$
%
%\noindent
%Curve $C$ is the perimeter around $S$.
%The theorem can be also be written as
$$\oint P\,dx+Q\,dy+R\,dz
=\int\!\!\!\int_S(\mathop{\rm curl}{\bf F})\cdot{\bf n}\,d\sigma
$$
where ${\bf F}=(P,Q,R)$.
For $S$ parametrized by $x$ and $y$ we have
$${\bf n}\,d\sigma=\left(
{\partial S\over\partial x}\times{\partial S\over\partial y}
\right)dx\,dy$$
In many cases, converting an integral according to
Stokes' theorem can turn a difficult problem into an easy one.
\medskip
\noindent
Let ${\bf F}=(y,z,x)$ and let $S$ be the part of the paraboloid
$z=4-x^2-y^2$
that is above the $xy$ plane.
The perimeter of the paraboloid is the circle $x^2+y^2=2$.
Calculate both the line and surface integrals.
It turns out that we need to use polar coordinates so that {\it defint} can
succeed.
\medskip
\verb$--Surface integral$
\verb$z=4-x^2-y^2$
\verb$F=(y,z,x)$
\verb$S=(x,y,z)$
\verb$f=dot(curl(F),cross(d(S,x),d(S,y)))$
\verb$x=r*cos(theta)$
\verb$y=r*sin(theta)$
\verb$defint(f*r,r,0,2,theta,0,2pi)$
$$-4\pi$$
\verb$--Line integral$
\verb$x=2*cos(t)$
\verb$y=2*sin(t)$
\verb$z=4-x^2-y^2$
\verb$P=y$
\verb$Q=z$
\verb$R=x$
\verb$f=P*d(x,t)+Q*d(y,t)+R*d(z,t)$
\verb$f=circexp(f)$
\verb$defint(f,t,0,2pi)$
$$-4\pi$$

View File

@ -0,0 +1,73 @@
\subsection{Surface area}
Let $S$ be a surface parameterized by $x$ and $y$.
That is, let $S=(x,y,z)$ where $z=f(x,y)$.
The tangent lines at a point on $S$ form a tiny parallelogram.
The area $a$ of the parallelogram is given by the magnitude of the cross product.
$$a=\left|{\partial S\over\partial x}\times{\partial S\over\partial y}\right|$$
By summing over all the parallelograms we obtain the total surface area $A$.
Hence
$$A=\int\!\!\!\int dA=\int\!\!\!\int a\,dx\,dy$$
The following example computes the surface area of a unit disk
parallel to the $xy$ plane.
\medskip
\verb$z=2$
\verb$S=(x,y,z)$
\verb$a=abs(cross(d(S,x),d(S,y)))$
\verb$defint(a,y,-sqrt(1-x^2),sqrt(1-x^2),x,-1,1)$
$$\pi$$
\medskip
\noindent
The result is $\pi$, the area of a unit circle, which is what we expect.
The following example computes the surface area of $z=x^2+2y$ over
a unit square.
\medskip
\verb$z=x^2+2y$
\verb$S=(x,y,z)$
\verb$a=abs(cross(d(S,x),d(S,y)))$
\verb$defint(a,x,0,1,y,0,1)$
$${3\over2}+{5\over8}\log(5)$$
\medskip
\noindent
As a practical matter, $f(x,y)$ must be very simple in order
for Eigenmath to solve the double integral.
\newpage
\noindent
Find the area of the spiral ramp defined by\footnote{
Williamson and Trotter, {\it Multivariable Mathematics,} p. 598.}
$$S=\left(\matrix{u\cos v\cr u\sin v\cr v}\right),\qquad 0\le u\le1,\qquad 0\le v\le3\pi$$
In this example, the coordinates $x$, $y$ and $z$ are all
functions of an independent parameter space.
\medskip
\verb$x=u*cos(v)$
\verb$y=u*sin(v)$
\verb$z=v$
\verb$S=(x,y,z)$
\verb$a=abs(cross(d(S,u),d(S,v)))$
\verb$defint(a,u,0,1,v,0,3pi)$
$${3\over2}\pi\log(1+2^{1/2})+{3\pi\over2^{1/2}}$$
\verb$float$
$$10.8177$$

View File

@ -0,0 +1,53 @@
\subsection{Surface integrals}
\index{surface integral}
%\begin{center}
%\includegraphics[scale=0.5]{sailboat.png}
%\end{center}
%\bigskip
%\noindent
A surface integral is like adding up all the wind on a sail.
In other words, we want to compute
$$\int\!\!\!\int{\bf F\cdot n}\,dA$$
where ${\bf F\cdot n}$ is the amount of wind normal to a tiny parallelogram $dA$.
The integral sums over the entire area of the sail.
Let $S$ be the surface of the sail parameterized by $x$ and $y$.
(In this model, the $z$ direction points downwind.)
By the properties of the cross product we have the following for the unit normal $\bf n$
and for $dA$.
$${\bf n}={ {{\partial S\over\partial x}\times{\partial S\over\partial y}}\over
{\left|{\partial S\over\partial x}\times{\partial S\over\partial y}\right|}}\qquad
dA=\left|{\partial S\over\partial x}\times{\partial S\over\partial y}\right|\,dx\,dy$$
Hence
$$\int\!\!\!\int{\bf F\cdot n}\,dA=\int\!\!\!\int{\bf F}\cdot
\left({{\partial S\over\partial x}\times{\partial S\over\partial y}}\right)\,dx\,dy$$
\noindent
For example, evaluate the surface integral
$$\int\!\!\!\int_S{\bf F\cdot n}\,d\sigma$$
where ${\bf F}=xy^2z{\bf i}-2x^3{\bf j}+yz^2{\bf k}$, $S$ is the surface
$z=1-x^2-y^2$, $x^2+y^2\le1$ and $\bf n$ is upper.\footnote{
Kaplan, {\it Advanced Calculus,} p. 313.}
\medskip
\noindent
Note that the surface intersects the $xy$ plane in a circle.
By the right hand rule, crossing $x$ into $y$ yields $\bf n$ pointing upwards hence
$${\bf n}\,d\sigma=\left({{\partial S\over\partial x}\times{\partial S\over\partial y}}\right)\,dx\,dy$$
The following Eigenmath code computes the surface integral.
The symbols $f$ and $h$ are used as temporary variables.
\medskip
\verb$z=1-x^2-y^2$
\verb$F=(x*y^2*z,-2*x^3,y*z^2)$
\verb$S=(x,y,z)$
\verb$f=dot(F,cross(d(S,x),d(S,y)))$
\verb$h=sqrt(1-x^2)$
\verb$defint(f,y,-h,h,x,-1,1)$
$${1\over48}\pi$$

View File

@ -0,0 +1,151 @@
\subsection{Defining symbols}
As we saw earlier, Eigenmath uses the same syntax as dear old Fortran.
\medskip
\verb$N=212^17$
\medskip
\noindent
No result is printed when a symbol is defined.
To see a symbol's value, just evaluate it.
\medskip
\verb$N$
$$3529471145760275132301897342055866171392$$
\medskip
\noindent
Beyond its prosaic syntax, Eigenmath does have a few tricks up its sleeve.
For example, a symbol can have a subscript.
\medskip
\verb$NA=6.02214*10^23$
\verb$NA$
$$N_A=6.02214\times10^{23}$$
\medskip
\noindent
A symbol can be the name of a Greek letter.
\medskip
\verb$xi=1/2$
\verb$xi$
$$\xi=\hbox{$1\over2$}$$
\medskip
\noindent
Since xi is $\xi$, how is $x_i$ entered?
Well, that is an issue that may get resolved in the future.
For now, xi is always $\xi$.
\medskip
\noindent
Greek letters can appear in the subscript too.
\medskip
\verb$Amu=2.0$
\verb$Amu$
$$A_\mu=2.0$$
\medskip
\noindent
The general rule is this.
Eigenmath scans the entire symbol looking for Greek letters.
\medskip
\verb$alphamunu$
$$\alpha_{\mu\nu}$$
\newpage
\medskip
\noindent
Let us turn now to what happens when a symbolic expression is evaluated.
The most important point is that
Eigenmath exhaustively evaluates symbolic subexpressions.
\medskip
\verb$A=B$
\verb$B=C$
\verb$C=D$
\verb$sin(A)$
$$\sin(D)$$
\medskip
\noindent
In the above example, evaluating $\sin(A)$ yields $\sin(D)$ because Eigenmath
resolves $A$ as far as it can, in this case down to $D$.
However, internally the binding of $A$ is still $B$, as can be seen with
the $binding$ function.
\medskip
\verb$binding(A)$
$$B$$
\medskip
\noindent
Let us return to symbolic definitions for a moment.
It should be kept in mind that the right hand side of the definition is an
expression that is evaluated before the binding is done.
For example,
\medskip
\verb$B=1$
\verb$A=B$
\verb$binding(A)$
$$1$$
\medskip
\noindent
The binding of $A$ is 1 and not $B$ because $B$ was already defined before
the $A=B$ occurred.
The $quote$ function can be used to give a literal binding.
\medskip
\verb$A=quote(B)$
\verb$binding(A)$
$$B$$
\newpage
\noindent
What this all means is that symbols have a dual nature.
A symbol has a binding which may be different from its evaluation.
Normally this difference is not important.
The functions $quote$ and $binding$ are mentioned here mainly to provide insight
into what is happening belowdecks.
Normally you should not really need to use these functions.
However, one notable exception is the use of $quote$ to clear a symbol.
\medskip
\verb$x=3$
\verb$x$
$$x=3$$
\verb$x=quote(x)$
\verb$x$
$$x$$

View File

@ -0,0 +1,41 @@
\section{Syntax}
%The symbol {\tt\char32} indicates a mandatory space.
\begin{center}
\begin{tabular}{clll}
{\it Math} & & {\it Eigenmath} & {\it Alternate form and/or comment} \\
\\
$-a$ & & {\tt -a} \\
\\
$a+b$ & & {\tt a+b} \\
\\
$a-b$ & & {\tt a-b} \\
\\
$ab$ & & {\tt a*b} & \verb$a b$ \hspace{10pt}
{\it with a space in between} \\
\\
$\displaystyle{a\over b}$ & & {\tt a/b} \\
\\
$\displaystyle{a\over bc}$ & & {\tt a/b/c} \\
\\
$a^2$ & & {\tt a{\char94}2} \\
\\
$\sqrt{a}$ & & {\tt a{\char94}(1/2)} & {\tt sqrt(a)} \\
\\
$\displaystyle{1\over\sqrt a}$ & & {\tt a{\char94}(-1/2)} & {\tt 1/sqrt(a)} \\
\\
$a(b+c)$ & & {\tt a*(b+c)} & \verb$a (b+c)$
\hspace{10pt} {\it with a space in between} \\
\\
$f(a)$ & & {\tt f(a)} \\
\\
$\displaystyle{\left(\matrix{a\cr b\cr c\cr}\right)}$ & & {\tt (a,b,c)} \\
\\
$\displaystyle{\left(\matrix{a&b\cr c&d\cr}\right)}$ & & {\tt ((a,b),(c,d))} \\
\\
$T^{12}$ & & {\tt T[1,2]} & {\it tensor component access} \\
\\
$2\,\rm km$ & & {\tt 2*"km"} & {\it units of measure are quoted} \\
\end{tabular}
\end{center}

View File

@ -0,0 +1,15 @@
\subsection{Units of measure}
\index{units of measure}
Quoted strings can be used to express units of measurement in a calculation.
For example, the space shuttle accelerates from zero to
17{,}000 miles per hour in 8 minutes.
The average acceleration of the space shuttle is
\medskip
\verb$v=17000*"mile"/"hr"$
\verb$t=8*"min"/(60*"min"/"hr")$
\verb$v/t$
$$127500\,\hbox{mile}\over(\hbox{hr})^2$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,37 @@
\subsection{Zero to the zero power}
The following example draws a graph of the function $f(x)=|x^x|$.
The graph shows why the convention $0^0=1$ makes sense.
\medskip
\verb$f(x)=abs(x^x)$
\verb$xrange=(-2,2)$
\verb$yrange=(-2,2)$
\verb$draw(f)$
\begin{center}
\includegraphics[scale=0.4]{zerozero.png}
\end{center}
\medskip
\noindent
We can see how $0^0=1$ results in a continuous line through $x=0$.
Now let us see how $x^x$ behaves in the complex plane.
\medskip
\verb$f(t)=(real(t^t),imag(t^t))$
\verb$xrange=(-2,2)$
\verb$yrange=(-2,2)$
\verb$trange=(-4,2)$
\verb$draw(f)$
\begin{center}
\includegraphics[scale=0.4]{zerozero2.png}
\end{center}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,2 @@
ross.pdf : *.tex
pdftex ross

View File

@ -0,0 +1,19 @@
\beginsection 1.1
Prove $1^2+2^2+\cdots+n^2=n(n+1)(2n+1)/6$ for all natural numbers $n$.
\medskip
Use mathematical induction.
First show that proposition $P_1$ is true:
$$1^2=1(1+1)(2\cdot1+1)/6$$
Next show that $P_{n+1}$ is true whenever $P_n$ is true:
$$\eqalign{
P_n+(n+1)^2&=P_{n+1}\cr
n(n+1)(2n+1)+(n+1)^2&=(n+1)(n+2)(2n+3)/6\cr
}$$
Divide both sides by $(n+1)$ to get
$$n(2n+1)/6+(n+1)=(n+2)(2n+3)/6$$
Expand and simplify.
$$\eqalign{
(2n^2+n)/6+n+1&=(2n^2+3n+4n+6)/6\cr
{1\over3}n^2+{7\over6}n+1&={1\over3}n^2+{7\over6}n+1\cr
}$$

View File

@ -0,0 +1,18 @@
\beginsection 1.2
Prove $3+11+\cdots+(8n-5)=4n^2-n$ for all natural numbers $n$.
\medskip
Induction Step 1: Show that $P_1$ is true.
$$P_1=(8\cdot1-5)=3$$
Induction Step 2: Show that $P_n+(8(n+1)-5)=P_{n+1}$.
$$\eqalign{
P_n+(8(n+1)-5)&=4n^2-n+8n+3\cr
&=4n^2+7n+3\cr
\cr
P_{n+1}&=4(n+1)^2-(n+1)\cr
&=4(n^2+2n+1)-n-1\cr
&=4n^2+8n+4-n-1\cr
&=4n^2+7n+3\cr
}$$

View File

@ -0,0 +1,20 @@
\beginsection 1.3
Prove $1^3+2^3+\cdots+n^3=(1+2+\cdots+n)^2$ for all natural numbers $n$.
\medskip
Induction Step 1: Show that $P_1$ is true.
$$P_1=1^3=1^2$$
Induction Step 2: Show that $P_n+(n+1)^3=P_{n+1}$.
Note that $1+2+\cdots+n=n(n+1)/2$.
$$\eqalign{
P_n+(n+1)^3&=[n(n+1)/2]^2+(n+1)^3\cr
&=(n+1)^2[(n/2)^2+(n+1)]\cr
&=(n+1)^2(n^2/4+n+1)\cr
\cr
P_{n+1}&=[n(n+1)/2+(n+1)]^2\cr
&=[(n+1)(n/2+1)]^2\cr
&=(n+1)^2(n/2+1)^2\cr
&=(n+1)^2(n^2/4+n+1)\cr
}$$

View File

@ -0,0 +1,27 @@
\beginsection{1.4}
\medskip
(a) Guess a formula for $1+3+\cdots+(2n-1)$ by evaluating the sum for
$n=1$, 2, 3, and 4. [For $n=1$, the sum is simply 1.]
\medskip
For each $n$ we have
$$\eqalign{
1&=1\cr
1+3&=4\cr
1+3+5&=9\cr
1+3+5+7&=16\cr
}$$
therefore a reasonable guess would be
$$1+3+\cdots+(2n-1)=n^2$$
\medskip
(b) Prove your formula using mathematical induction.
\medskip
We already have $n^2=1$ for $n=1$.
For $n+1$ we have
$$1+3+\cdots+(2n-1)+(2(n+1)-1)=n^2+2n+1=(n+1)^2$$
Therefore the formula is true for $n+1$ whenever it is true for $n$.
Hence by induction the formula is true for all $n\ge1$.

View File

@ -0,0 +1,14 @@
\beginsection{1.5}
Prove $1+1/2+1/4+\cdots+1/2^n=2-1/2^n$ for all natural numbers $n$.
\medskip
For $n=1$ we have $1+1/2=3/2=2-1/2$ so the formula is true for $n=1$.
Now we want to consider the expression
$$1+1/2+1/4+\cdots+1/2^n+1/2^{n+1}$$
All of the terms except the last can be replaced with $2-1/2^n$ therefore
$$1+1/2+1/4+\cdots+1/2^n+1/2^{n+1}=2-1/2^n+1/2^{n+1}=2-(1/2^n)(1-1/2)
=2-1/2^{n+1}$$
Hence the formula is true for $n+1$ whenever it is true for $n$.
Therefore by induction the formula is true for all $n\ge1$.

View File

@ -0,0 +1,64 @@
\beginsection{14.1}
Determine which of the following series converge.
Justify your answers.
\medskip
(a) $\sum n^4/2^n$
\medskip
Try the ratio test.
$$
{a_{n+1}\over a_n}
={(n+1)^4/2^{n+1}\over n^4/2^n}
={(n+1)^4\over2^{n+1}}\times{2^n\over n^4}
={(n+1)^4\over2n^4}\rightarrow{1\over2}<1
$$
So by the ratio test $\sum n^4/2^n$ converges.
\medskip
(b) $\sum2^n/n!$
\medskip
Try the ratio test.
$$
{a_{n+1}\over a_n}={2^{n+1}/(n+1)!\over 2^n/n!}
={2^{n+1}\over(n+1)!}\times{n!\over2^n}={2\over n+1}<1
$$
So by the ratio test $\sum2^n/n!$ converges.
\medskip
(c) $\sum n^2/3^n$
\medskip
Try the ratio test.
$$
{a_{n+1}\over a_n}
={(n+1)^2/3^{n+1}\over n^2/3^n}
={(n+1)^2\over 3^{n+1}}\times{3^n\over n^2}
={(n+1)^2\over3n^2}\rightarrow{1\over3}<1
$$
So by the ratio test $\sum n^2/3^n$ converges.
\medskip
(d) $\sum n!/(n^4+3)$
\medskip
Try the ratio test.
$$
{a_{n+1}\over a_n}
={(n+1)!/((n+1)^4+3)\over n!/(n^4+3)}
={(n+1)!\over((n+1)^4+3)}\times{n^4+3\over n!}
\rightarrow n+1>1
$$
So by the ratio test $\sum n!/(n^4+3)$ diverges.
\medskip
(e) $\sum\cos^2 n/n^2$
\medskip
Use the comparison test.
Since $\sum1/n^2$ converges and
$|\cos^2 n/n^2|\le1/n^2$ for all $n$, $\sum\cos^2 n/n^2$ must also converge.
\medskip
(f) $\sum_{n=2}^\infty1/(\log n)$
\medskip
Use the comparison test.
Since $\sum(1/n)$ diverges and $1/(\log n)>1/n$ for all $n>1$,
$\sum_{n=2}^\infty1/(\log n)$ must also diverge.

View File

@ -0,0 +1,90 @@
\beginsection 17.3
Accept on faith that the following familiar functions are continuous on
their domains: $\sin x$, $\cos x$, $e^x$, $2^x$, $\log_e x$ for
$x>0$, $x^p$ for $x>0$ [$p$ any real number].
Use these facts and theorems in this section to prove that the following
functions are continuous.
\medskip
\noindent
(a) $\log_e(1+\cos^4 x)$
\medskip
\itemitem{}
The function $\cos^4 x$ is continuous by Theorem 17.4 (ii),
product of continuous functions.
The function $1+\cos^4 x$ is continuous by Theorem 17.4 (i),
sum of continuous functions.
The function $\log_e(1+\cos^4 x)$ is continuous by Theorem 17.5,
composition of continuous functions.
\medskip
\noindent
(b) $[\sin^2x+\cos^6x]^\pi$
\medskip
\itemitem{}
This is equivalent to $\exp[\pi\log_e(\sin^2x+\cos^6x)]$ which is continuous by
Theorems 17.4 and 17.5.
Now show that $\sin^2x+\cos^6x>0$ to ensure the domain requirement of $\log_e$.
We have $\sin^2x\ge0$, $\cos^6x\ge0$ by even exponents.
By $\sin^2x+\cos^2x=1$, $\sin^2x$ and $\cos^2x$ cannot both be zero for the
same $x$.
If $\cos^2x\ne0$ then $\cos^6x\ne0$.
Therefore $\sin^2x+\cos^6x>0$.
\medskip
\noindent
(c) $2^{x^2}$
\medskip
\itemitem{}
The function $x^2$ is continuous by $x^2=xx$ and
Theorem 17.4 (ii), product of continuous functions.
By Theorem 17.5, composition of continuous fuctions, $2^{x^2}$ is continuous.
\medskip
\noindent
(d) $8^x$
\medskip
\itemitem{}
This is equivalent to $\exp(x\log_e8)$ which is continuous by Theorems 17.4 and 17.5.
\medskip
\noindent
(e) $\tan x$ for $x\ne$ odd multiple of $\pi/2$.
\medskip
\itemitem{}
$\tan x=\sin x/\cos x$ is continuous by Theorem 17.4 (iii), ratio of
continuous functions.
The odd multiple restriction ensures $\cos x\ne0$.
\medskip
\noindent
(f) $x\sin(1/x)$ for $x\ne0$
\medskip
\itemitem{}
$1/x=\exp(-\log_ex)$ is continuous for $x>0$.
For $x<0$, $1/x=-1/|x|$ so $1/x$ is also continous for $x<0$.
Finally, $x\sin(1/x)$ is continuous by Theorems 17.4 and 17.5.
\medskip
\noindent
(g) $x^2\sin(1/x)$ for $x\ne0$
\medskip
\itemitem{}
$x^2\sin(1/x)=x[x\sin(1/x)]$, see (f).
\medskip
\noindent
(h) $(1/x)\sin(1/x^2)$ for $x\ne0$
\medskip
\itemitem{}
The only thing new here is $1/x^2$ which is continuous by $1/x^2=(1/x)(1/x)$
and Theorem 17.4 (ii). See (f) for continuity of $1/x$.

View File

@ -0,0 +1,98 @@
\beginsection 17.4
Prove that the function $\sqrt x$ is continuous on its domain
$[0,\infty)$. {\it Hint:} Apply Example 5 in \S8.
\medskip
Step 1. We want to convert $|f(x)-f(x_0)|$ to an expression involving $|x-x_0|$.
The trick from \S8 is ``irrationalize the denominator.''
\medskip
$\displaystyle{
|f(x)-f(x_0)|
=\left|\sqrt x-\sqrt{x_0}\right|
=\left|{(\sqrt x-\sqrt{x_0})(\sqrt x+\sqrt{x_0})\over\sqrt x+\sqrt{x_0}}\right|
=\left|{x-x_0\over\sqrt x+\sqrt{x_0}}\right|
={|x-x_0|\over\sqrt x+\sqrt{x_0}}
}$
\medskip
Step 2. We want to get the $\sqrt x$ out of the denominator so that we can
solve for $|x-x_0|$.
One thing we can use to our advantage is that we don't necessarily have to use
the exact representation of $|f(x)-f(x_0)|$.
All we really need to say is that $|f(x)-f(x_0)|$ is less than something.
We can do that if we can find an expression that is less than
$\sqrt x+\sqrt{x_0}$ since making the denominator smaller makes the right
side of the equation larger.
We notice that $\sqrt{x_0}\le\sqrt x+\sqrt{x_0}$ so we can write
\medskip
$\displaystyle{
|f(x)-f(x_0)|
\le{|x-x_0|\over\sqrt{x_0}}
}$
\medskip
Step 3. We want to arrange for $|f(x)-f(x_0)|$ to be less than some epsilon
so we write
\medskip
$\displaystyle{
|f(x)-f(x_0)|
\le{|x-x_0|\over\sqrt{x_0}}<\epsilon
}$
\medskip
Step 4. Solving for $|x-x_0|$ we have
\medskip
$\displaystyle{
|x-x_0|<\epsilon\cdot\sqrt{x_0}
}$
\medskip
So if we choose $\delta=\epsilon\cdot\sqrt x_0$ then $|x-x_0|<\delta$ implies
that $|f(x)-f(x_0)|<\epsilon$.
\medskip
Step 5. Note that the above fails for $x_0=0$.
We have to show by another means that $\sqrt x$ is continuous at zero.
First we write
\medskip
$\displaystyle{
|f(x)-f(0)|
=\left|\sqrt x-\sqrt{0}\right|
=\sqrt x<\epsilon
}$
\medskip
Solving for $x$ we have
\medskip
$\displaystyle{
x<\epsilon^2
}$
\medskip
So if we choose $\delta=\epsilon^2$ then
$|x-x_0|=x<\delta$ implies that $|f(x)-f(x_0)|=\sqrt x<\epsilon$.
Note that we can say $|x-x_0|=x$ when $x_0=0$ because the domain we are using
is $[0,\infty)$.

View File

@ -0,0 +1,18 @@
\beginsection 17.5
(a) Prove that if $m\in N$, then the function $f(x)=x^m$ is continuous
on $R$.
\medskip
The function $f(x)=x$ is continuous. Theorem 17.4 (ii) tells us that the product
of continous functions is continuous.
Since $x^m$ is the product of $m$ continuous functions, $x^m$ is continuous.
\medskip
(b) Prove that every {\it polynomial function}
$p(x)=a_0+a_1x+\cdots+a_nx^n$ is continuous on $R$.
\medskip
By Theorem 17.4 (ii) and Exercise 17.5 (a) above, each term in the polynomial
is continuous.
By Theorem 17.4 (i), the sum of the terms in the polynomial is continuous.
Therefore, $p(x)$ is continuous.

View File

@ -0,0 +1,12 @@
\beginsection 18.1
Let $f$ be as in Theorem 18.1. Show that if $-f$ assumes its maximum at
$x_0\in[a,b]$, then $f$ assumes its minimum at $x_0$.
\medskip
Since $x_0$ is a maximum for $-f$ we have
$$-f(x_0)\ge-f(x).$$
Multiply through by $-1$ to get
$$f(x_0)\le f(x).$$
We observe that $x_0$ is a minimum for $f$.

View File

@ -0,0 +1,25 @@
\beginsection 18.2
Reread the proof of Theorem 18.1 with $[a,b]$ replaced by $(a,b)$.
Where does it break down? Discuss.
\medskip
Try going through the proof line by line replacing $[a,b]$ with $(a,b)$.
1. Assume that $f$ is not bounded on $(a,b)$. {\it Ok.}
2. Then to each $n\in N$ there corresponds an $x_n\in (a,b)$ such that
$|f(x_n)|>n$. {\it Ok, because f is unbounded.}
3. By the B-W Theorem 11.5, $(x_n)$ has a subsequence $(x_{n_k})$ that converges
to some real number $x_0$.
{\it Ok, because $x_n$ is bounded on $(a,b)$.}
4. The number $x_0$ must also belong to the open interval $(a,b)$.
{\it Uh-oh, here's a problem, $x_0$ may be equal to $a$ or $b$ in the limit.}
5. Since $f$ is continuous at $x_0$, we have $\lim f(x_{n_k})=f(x_0)$,
but we also have $\lim|f(x_{n_k})|=+\infty$ which is a contradiction.
{\it If $x_0$ is equal to $a$ or $b$ then $f$ doesn't have to be continuous
there so we cannot say that $\lim f(x_{n_k})=f(x_0)$.}

View File

@ -0,0 +1,48 @@
\beginsection 18.3
Use calculus to find the maximum and minimum of
$f(x)=x^3-6x^2+9x+1$ on $[0,5)$.
\medskip
The maximum and minimum occur where $df/dx=0$.
$$df/dx=3x^2-12x+9=0$$
This equation has two solutions, $x=1$ and $x=3$.
That was easy. Now we have to work harder.
1. Use the ``first derivative test'' to see if $x=1$ is a minimum or maximum.
Since $f'(0)>0$ and $f'(2)<0$ we conclude that $x=1$ is a local maximum.
2. Repeat for $x=3$.
Since $f'(2)<0$ and $f'(4)>0$ we conclude that $x=3$ is a local minimum.
3. Now compute $f$ at $x=0,1,3,5$ and compare.
$f(0)=1$
$f(1)=5$
$f(3)=1$
$f(5)=21$.
We observe that $f(5)=21$ is the maximum
but since the interval is open on the 5 side, we conclude that $f$
has no maximum.
The function $f$ has two minima, one at $f(0)$ and the other at $f(1)$.
4. I just realized that I could have skipped steps 1 and 2.
The computation of $f$ at $x=0,1,3,5$ is all that's needed.
Also, the ``second derivative test'' is an easier way to find out if $x_0$ is a
local minimum or maximum:
$f''(x_0)>0$ means $x_0$ is a local minimum,
$f''(x_0)<0$ means $x_0$ is a local maximum.
\bigskip
BTW, {\tt gnuplot} was a big help in solving the problem.
\centerline{\tt plot [0:5] f(x)=x**3-6*x**2+9*x+1, f(x), g(x)=3*x**2-12*x+9, g(x)}

View File

@ -0,0 +1,23 @@
\beginsection 18.5
(a) Let $f$ and $g$ be continuous functions on $[a,b]$ such that
$f(a)\ge g(a)$ and $f(b)\le g(b)$. Prove that $f(x_0)=g(x_0)$ for at least
one $x_0$ in $[a,b]$.
\medskip
Define a function $h=f-g.$
The function $h$ is continuous because $f$ and $g$ are continuous
(theorem 17.4, p. 92).
We have $h(a)\ge0$ and $h(b)\le0$.
Now we can apply IVT and assert that some $x_0$ exists at which $h(x_0)=0$
(simply replace $y$ with 0 in the theorem).
Since $h(x_0)=f(x_0)-g(x_0)=0$, we have proved that $f(x_0)=g(x_0)$.
\medskip
(b) Show that Example 1 can be viewed as a special case of part (a).
\medskip
Example 1 includes a ``little trick'' if defining $g(x)=f(x)-x$.
(There's the hint for the solution of 18.5 (a) above.)
The $x$ can be considered a function so we have the difference of two
functions as in part (a). The example is a special case because we have the
specific function $x$.

View File

@ -0,0 +1,21 @@
\beginsection 18.6
Prove that $x=\cos x$ for some $x$ in $(0,\pi/2)$.
\medskip
Solution: We have $\cos(0)=1$ and $\cos(\pi/2)=0$.
The problem is that the interval is open, not closed as required by IVT.
However, since $\cos(0)\ne0$ and $\cos(\pi/2)\ne\pi/2$ we know that
$\cos x=x$ does not occur at the endpoints.
Therefore it is safe to use the closed interval $[0,\pi/2]$.
%(Is this o.k. or b.s.?)
Use the trick from Example 1: $f(x)=x-\cos x$.
We have $f(0)=0-1=-1$ and $f(\pi/2)=\pi/2-0=\pi/2$ and
therefore $f(0)<0<f(\pi/2)$.
By IVT there exits an $x_0$ such that $f(x_0)=0$.
Because $f(x_0)=x_0-\cos x_0=0$, we have a point $x_0$
at which $x=\cos x$.
We have already shown that $x\ne\cos x$ at either $0$ or $\pi/2$ so
$x=\cos x$ must occur on the interval $(0,\pi/2)$.

View File

@ -0,0 +1,13 @@
\beginsection 18.7
Prove that $x2^x=1$ for some $x$ in $(0,1)$.
\medskip
We define the function $f(x)=x2^x$.
For this function we have $f(0)=0$ and $f(1)=2$.
Since $f(0)<1<f(1)$, by IVT $f(x)=1$ must occur somewhere in the
closed interval $[0,1]$.
We have $f(0)\ne1$ and $f(1)\ne1$ so $x2^x=1$ must occur somewhere in the
open interval $(0,1)$.

View File

@ -0,0 +1,14 @@
\beginsection 18.8
Suppose that $f$ is a real-valued continuous function in $R$ and that
$f(a)f(b)<0$ for some $a,b\in R$.
Prove that there exists $x$ between $a$ and $b$ such that $f(x)=0$.
\medskip
From $f(a)f(b)<0$ we conclude that
$f(a)$ and $f(b)$ have opposite signs and neither is zero.
Therefore either $f(a)<0<f(b)$ or $f(b)<0<f(a)$.
In both cases we have the existence of $f(x)=0$ and $x\ne a,b$ by
the intermediate value theorem.

View File

@ -0,0 +1,53 @@
\beginsection 19.2
Prove that each of the following functions is uniformly continuous on the
indicated set by directly verifying the $\epsilon$-$\delta$ property in
Definition 19.1.
\medskip
To verify the $\epsilon$-$\delta$ property, start with the expression
$|x-y|<\delta$ and then find a way to transform it into the expression
$|f(x)-f(y)|<\epsilon$.
\medskip
(a) $f(x)=3x+11$ on $R$.
\medskip
We have
$$|f(x)-f(y)|=|3x+11-3y-11|=3|x-y|$$
Starting with
$$|x-y|<\delta$$
we can make the substitution
$$|f(x)-f(y)|<3\delta$$
Then for $\epsilon=3\delta$ we have
$$|f(x)-f(y)|<\epsilon$$
\medskip
(b) $f(x)=x^2$ on $[0,3]$
\medskip
We have
$$|f(x)-f(y)|=|x^2-y^2|=|x+y|\cdot|x-y|$$
and
$$|f(x)-f(y)|\le6|x-y|$$
on the interval $[0,3]$.
Starting with
$$|x-y|<\delta$$
we can make the substitution
$$|f(x)-f(y)|<6\delta$$
Then for $\epsilon=6\delta$ we have
$$|f(x)-f(y)|<\epsilon$$
\medskip
(c) $f(x)=1/x$ on $[{1\over2},\infty)$
\medskip
We have
$$|f(x)-f(y)|=\left|{1\over x}-{1\over y}\right|
=\left|{y-x}\over xy\right|
={|x-y|\over|xy|}$$
and
$$|f(x)-f(y)|\le4|x-y|$$
on the interval $[{1\over2},\infty)$.
Starting with
$$|x-y|<\delta$$
we can make the substitution
$$|f(x)-f(y)|<4\delta$$
Then for $\epsilon=4\delta$ we have
$$|f(x)-f(y)|<\epsilon$$

View File

@ -0,0 +1,25 @@
\beginsection 2.1
Show that $\sqrt3$, $\sqrt5$, $\sqrt7$, $\sqrt{24}$, and
$\sqrt{31}$ are not rational numbers.
\medskip
The solution to $x^2-3=0$ is $\sqrt3$.
By the Rational Zeros Theorem, if $\sqrt3=p/q$ then
$q$ divides $a_1=1$ and $p$ divides $a_0=3$.
Since $q$ must be $\pm1$, the only possible values for
$p/q$ are $\pm1$ and $\pm3$, none of which are
solutions to $x^2-3=0$.
Therefore $\sqrt3$ must be irrational.
$\sqrt5$: $p/q=\pm1,\pm5$, none of which are
solutions to $x^2-5=0$.
$\sqrt7$: $p/q=\pm1,\pm7$, none of which are
solutions to $x^2-7=0$.
$\sqrt24$: $p/q=\pm1,\pm2,\pm3,\pm4,\pm6,\pm8,\pm12$,
none of which are solutions to $x^2-24=0$.
$\sqrt31$: $p/q=\pm1,\pm31$, none of which are
solutions to $x^2-31=0$.

View File

@ -0,0 +1,23 @@
\beginsection{2.2}
Show that $2^{1/3}$, $5^{1/7}$, and $(13)^{1/4}$ do not represent
rational numbers.
\medskip
$2^{1/3}$ is a solution to the polynomial $x^3-2=0$.
By the Rational Zeroes Theorem, the only possible rational solutions are
$\pm1$ and $\pm2$, neither of which is an actual solution.
Therefore, $2^{1/3}$ is not a rational number.
\medskip
$5^{1/7}$ is a solution to the polynomial $x^7-5=0$.
By the Rational Zeroes Theorem, the only possible rational solutions are
$\pm1$ and $\pm5$, neither of which is an actual solution.
Therefore, $5^{1/7}$ is not a rational number.
\medskip
$13^{1/4}$ is a solution to the polynomial $x^4-13=0$.
By the Rational Zeroes Theorem, the only possible rational solutions are
$\pm1$ and $\pm13$, neither of which is an actual a solution.
Therefore, $13^{1/4}$ is not a rational number.

View File

@ -0,0 +1,17 @@
\beginsection{2.3}
Show that $(2+\sqrt2)^{1/2}$ does not represent a rational number.
\medskip
$(2+\sqrt2)^{1/2}$ is a solution to the equation
$x^2-2=\sqrt2$.
This can be rewritten as
$$(x^2-2)^2=2$$
which expands to
$$x^4-4x^2+4=2$$
Hence $(2+\sqrt2)^{1/2}$ is a solution to the polynomial
$$x^4-4x^2+2=0$$
By the Rational Zeroes Theorem the only possible rational solutions
are $\pm1$ and $\pm2$, neither of which is an actual solution.
Therefore $(2+\sqrt2)^{1/2}$ is not a rational number.

View File

@ -0,0 +1,62 @@
\beginsection{28.15}
Prove Leibniz' rule
$$(fg)^{(n)}=\sum_{k=0}^n\left({n\atop k}\right)f^{(k)}(a)g^{(n-k)}(a)$$
{\it Hint:} Use mathematical induction.
For $n=1$, apply Theorem 28.3(iii).
\medskip
The following equalities will be used.
$$\left({n\atop k}\right)+\left({n\atop k-1}\right)=\left({n+1\atop k}\right)
\eqno\hbox{(A)}$$
$$\left({n\atop0}\right)=1\eqno\hbox{(B)}$$
$$\left({n\atop n}\right)=1\eqno\hbox{(C)}$$
Theorem 28.3(iii) is not really needed.
Just using the case $n=0$ for induction step 1.
For induction step 2, show that Leibniz' rule is true for $n+1$ whenever it is
true for $n$.
$$\eqalign{
(fg)^{(n+1)}&=((fg)^{(n)})^\prime\cr
&=\left(\sum_{k=0}^n\left({n\atop k}\right)
f^{(k)}g^{(n-k)}\right)^\prime\cr
&=\sum_{k=0}^n\left({n\atop k}\right)
\left[f^{(k)}\left(g^{(n-k)}\right)^\prime
+\left(f^{(k)}\right)^\prime g^{(n-k)}\right]\cr
&=\sum_{k=0}^n\left({n\atop k}\right)
\left[f^{(k)}g^{(n+1-k)}+f^{(k+1)}g^{(n-k)}\right]\cr
&=\sum_{k=0}^n\left({n\atop k}\right)f^{(k)}g^{(n+1-k)}
+\sum_{k=0}^n\left({n\atop k}\right)f^{(k+1)}g^{(n-k)}
}$$
Use (B) to extract the $k=0$ term of the sum on the left and use (C)
to extract the $k=n$ term of the sum on the right.
$$\eqalign{
(fg)^{(n+1)}&=
f^{(0)}g^{(n+1)}
+\sum_{k=1}^n\left({n\atop k}\right)f^{(k)}g^{(n+1-k)}
+\sum_{k=0}^{n-1}\left({n\atop k}\right)f^{(k+1)}g^{(n-k)}
+f^{(n+1)}g^{(0)}
}$$
Here is the main trick.
The index $k$ is just a dummy variable that takes on a range of values.
We can shift the range of $k$ if we balance the math where $k$ is used.
For the sum on the right, change $k$ so that it runs from
1 to $n$.
$$\eqalign{
(fg)^{(n+1)}&=
f^{(0)}g^{(n+1)}
+\sum_{k=1}^n\left({n\atop k}\right)f^{(k)}g^{(n+1-k)}
+\sum_{k=1}^n\left({n\atop k-1}\right)f^{(k)}g^{(n+1-k)}
+f^{(n+1)}g^{(0)}
}$$
Note that the $n$ in the binomial factor does not change because $n$ does
not depend on $k$.
Next use (A) to combine the two sums.
$$\eqalign{
(fg)^{(n+1)}&=
f^{(0)}g^{(n+1)}
+\sum_{k=1}^n\left(n+1\atop k\right)f^{(k)}g^{(n+1-k)}
+f^{(n+1)}g^{(0)}
}$$
Finally, use (B) and (C) to combine all the terms.
$$(fg)^{(n+1)}=\sum_{k=0}^{n+1}
\left({n+1\atop k}\right)f^{(k)}g^{(n+1-k)}$$

View File

@ -0,0 +1,23 @@
\beginsection 28.2
Use the {\it definition} of derivative to calculate the derivatives of the
following functions at the indicated points.
\medskip
(a) $f(x)=x^3$ at $x=2$
\medskip
$$\eqalign{
f^\prime&=\lim_{x\rightarrow2}{f(x)-f(2)\over x-2}\cr
&=\lim_{x\rightarrow2}{x^3-8\over x-2}\cr
&=\lim_{x\rightarrow2}x^2+2x+4\cr
&=12
}$$
\medskip
(b) $g(x)=x+2$ at $x=a$
\medskip
$$\eqalign{
g^\prime(a)&=\lim_{x\rightarrow a}{g(x)-g(a)\over x-a}\cr
&=\lim_{x\rightarrow a}{x+2-a-2\over x-a}\cr
&=1
}$$

View File

@ -0,0 +1,13 @@
\beginsection 29.11
Show that $\sin x\le x$ for all $x\ge0$.
{\it Hint:} Show that $f(x)=x-\sin x$ is increasing on $[0,\infty).$
\medskip
$$f^\prime(x)=1+\cos x$$
Since the range of $\cos x$ is $[-1,1]$, the range of $f^\prime(x)$ is
$[0,2]$. By corollary 29.7 we conclude that $f$ is an increasing function
because $f^\prime(x)\ge0$ for all $x\in[0,\infty)$.
Since $f(0)=0$ and $f$ is an increasing function we must have
$f(x)\ge0$ for $x\in[0,\infty)$.
Therefore $x\ge\sin x$.

View File

@ -0,0 +1,43 @@
\beginsection{3.1}
(a) Which of the properties A1--A4, M1--M4, DL, O1--O5 fail for the
natural numbers $N$?
\medskip
A1. $a+(b+c)=(a+b+c)$
A2. $a+b=b+a$
A3. $a+0=a$
A4. For each $a$ there is as element $-a$ such that $a+(-a)=0$.
{\it Fails, no negative numbers.}
M1. $a(bc)=(ab)c$
M2. $ab=ba$
M3. $a\cdot1=a$
M4. For each $a\ne0$ there is an element $a^{-1}$ such that $aa^{-1}=1$.
{\it Fails, no multiplicative inverse.}
DL. $a(b+c)=ab+ac$
O1. Either $a\le b$ or $b\le a$.
O2. If $a\le b$ and $b\le a$ then $a=b$.
O3. If $a\le b$ and $b\le c$ then $a\le c$.
O4. If $a\le b$ then $a+c\le b+c$.
O5. If $a\le b$ and $0\le c$ then $ac\le bc$.
{\it Interesting since $0\not\in N$.}
\medskip
(b) Which of these properties fail for the set of integers $Z$?
\medskip
M4, no multiplicative inverse.

View File

@ -0,0 +1,21 @@
\beginsection{3.5}
(a) Show that $|b|\le a$ if and only if $-a\le b\le a$.
\medskip
First prove the implication.
Let $|b|\le a$.
Then by Theorem 3.2, $-a\le-|b|$.
By $-|b|\le b\le|b|$ we have
$$-a\le-|b|\le b\le|b|\le a$$
Hence $|b|\le a$ implies $-a\le b\le a$.
\medskip
Now prove the converse.
By hypothesis we have
$$b\le a\eqno(1)$$
Also by hypothesis we have $-a\le b$ which implies
$$-b\le a\eqno(2)$$
Therefore by (1) and (2) we have
$$|b|\le a$$

View File

@ -0,0 +1,4 @@
\beginsection 32.1
Find the upper and lower Darboux integrals for $f(x)=x^3$ on the interval
$[0,b]$. {\it Hint:} Exercise 1.3 and Example 1 in \S1 will be useful.

View File

@ -0,0 +1,39 @@
\beginsection{7.1}
Write out the first five terms of the following sequences.
\medskip
(a) $s_n=1/(3n+1)$
\medskip
$s_1={1\over4}$,
$s_2={1\over7}$,
$s_3={1\over10}$,
$s_4={1\over13}$,
$s_5={1\over16}$
\medskip
(b) $b_n=(3n+1)/(4n-1)$
\medskip
$b_1={4\over3}$,
$b_2={7\over7}$,
$b_3={10\over11}$,
$b_4={13\over15}$,
$b_5={16\over19}$
\medskip
(c) $c_n=n/3^n$
\medskip
$c_1={1\over3}$,
$c_2={2\over9}$,
$c_3={3\over27}$,
$c_4={4\over81}$,
$c_5={5\over243}$
\medskip
(d) $\sin(n\pi/4)$
\medskip
$\sqrt2\over2$,
$1$,
$\sqrt2\over2$,
$0$,
$-{\sqrt2\over2}$

View File

@ -0,0 +1,17 @@
\beginsection{7.2}
For each sequence in Exercise 7.1, determine whether it converges.
If it converges, give its limit.
No proofs are required.
\medskip
(a) $s_n=1/(3n+1)$ converges to 0.
\medskip
(b) $b_n=(3n+1)/(4n-1)$ converges to $3\over4$.
\medskip
(c) $c_n=n/3^n$ converges to 0.
\medskip
(d) $\sin(n\pi/4)$ does not converge.

45
doc/ross/ross.tex 100644
View File

@ -0,0 +1,45 @@
% export CVS_RSH=ssh
% export CVSROOT=:ext:gweigt@cvs.sf.net:/cvsroot/eigenmath
\parindent=0pt
\input ross-1.1.tex
\input ross-1.2.tex
\input ross-1.3.tex
\input ross-1.4.tex
\input ross-1.5.tex
\input ross-2.1.tex
\input ross-2.2.tex
\input ross-2.3.tex
\input ross-3.1.tex
\input ross-3.5.tex
\input ross-7.1.tex
\input ross-7.2.tex
\input ross-14.1.tex
\input ross-17.3.tex
\input ross-17.4.tex
\input ross-17.5.tex
\input ross-18.1.tex
\input ross-18.2.tex
\input ross-18.3.tex
\input ross-18.5.tex
\input ross-18.6.tex
\input ross-18.7.tex
\input ross-18.8.tex
\input ross-19.2.tex
\input ross-28.2.tex
\input ross-28.15.tex
\input ross-29.11.tex
\input ross-32.1.tex
\end

64
lisp/example.lisp 100644
View File

@ -0,0 +1,64 @@
"Bondi metric..."
; coordinate system
(setq x0 u)
(setq x1 r)
(setq x2 theta)
(setq x3 phi)
; U, V, beta and gamma are functions of u, r and theta
(setq g_uu (sum
(product
(V u r theta)
(power r -1)
(power e (product 2 (beta u r theta)))
)
(product
-1
(power (U u r theta) 2)
(power r 2)
(power e (product 2 (gamma u r theta)))
)
))
(setq g_ur (product 2 (power e (product 2 (beta u r theta)))))
(setq g_utheta (product
2
(U u r theta)
(power r 2)
(power e (product 2 (gamma u r theta)))
))
(setq g_thetatheta (product
-1
(power r 2)
(power e (product 2 (gamma u r theta)))
))
(setq g_phiphi (product
-1
(power r 2)
(power e (product -2 (gamma u r theta)))
(power (sin theta) 2)
))
; metric tensor
(setq gdd (sum
(product g_uu (tensor u u))
(product g_ur (tensor u r))
(product g_ur (tensor r u))
(product g_utheta (tensor u theta))
(product g_utheta (tensor theta u))
(product g_thetatheta (tensor theta theta))
(product g_phiphi (tensor phi phi))
))
(gr) ; compute g, guu, GAMUDD, RUDDD, RDD, R, GDD, GUD and GUU
"Is the Einstein tensor GUU divergence-free?"
(zerop (contract23 (covariant-derivative-of-up-up GUU)))

220
lisp/example2.lisp 100644
View File

@ -0,0 +1,220 @@
; Page references are for the book "Gravitation."
; generic metric
(setq gdd (sum
(product (g00) (tensor x0 x0))
(product (g11) (tensor x1 x1))
(product (g22) (tensor x2 x2))
(product (g33) (tensor x3 x3))
))
(gr) ; compute g, guu, GAMUDD, RUDDD, RDD, R, GDD, GUD and GUU
; generic vectors
(setq u (sum
(product (u0) (tensor x0))
(product (u1) (tensor x1))
(product (u2) (tensor x2))
(product (u3) (tensor x3))
))
(setq v (sum
(product (v0) (tensor x0))
(product (v1) (tensor x1))
(product (v2) (tensor x2))
(product (v3) (tensor x3))
))
(setq w (sum
(product (w0) (tensor x0))
(product (w1) (tensor x1))
(product (w2) (tensor x2))
(product (w3) (tensor x3))
))
; how to antisymmetrize three indices (p. 86)
(setq V (sum
(product 1/6 V)
(product 1/6 (transpose12 (transpose23 V))) ; nu lambda mu -> mu nu lambda
(product 1/6 (transpose23 (transpose12 V))) ; lambda mu nu -> mu nu lambda
(product -1/6 (transpose12 V)) ; nu mu lambda -> mu nu lambda
(product -1/6 (transpose23 V)) ; mu lambda nu -> mu nu lambda
(product -1/6 (transpose13 V)) ; lambda nu mu -> mu nu lambda
))
; commutator (p. 206)
(define commutator (sum
(contract13 (product +1 arg1 (gradient arg2)))
(contract13 (product -1 arg2 (gradient arg1)))
))
(print "connection coefficients (p. 210)")
(setq temp (gradient gdd))
(setq Gamma (contract23 (product 1/2 guu (sum
temp
(transpose23 temp)
(product -1 (transpose12 (transpose23 temp)))
))))
; check
(print (equal Gamma GAMUDD))
; covariant derivative of a vector (p. 211)
(define covariant-derivative (sum
(gradient arg)
(contract13 (product arg GAMUDD))
))
(print "divergence of einstein is zero (p. 222)")
; covariant-derivative-of-up-up is already defined in grlib
(setq temp (covariant-derivative-of-up-up GUU))
(setq temp (contract23 temp)) ; sum over 2nd and 3rd indices
(print (equal temp 0))
(print "computing riemann tensor (p. 219)")
(setq temp1 (gradient GAMUDD))
(setq temp2 (contract24 (product GAMUDD GAMUDD)))
(setq riemann (sum
(transpose34 temp1)
(product -1 temp1)
(transpose23 temp2)
(product -1 (transpose34 (transpose23 temp2)))
))
; check
(print (equal riemann RUDDD))
; p. 259
(define covariant-derivative-of-down-down (prog (temp)
(setq temp (product arg GAMUDD))
(return (sum
(gradient arg)
(product -1 (transpose12 (contract13 temp)))
(product -1 (contract23 temp))
))
))
(define covariant-derivative-of-up-down (prog (temp)
(setq temp (product arg GAMUDD))
(return (sum
(gradient arg)
(transpose12 (contract14 temp))
(product -1 (contract23 temp))
))
))
(define directed-covariant-derivative
(contract23 (product (covariant-derivative arg1) arg2))
)
(print "symmetry of covariant derivative (p. 252)")
(setq temp1 (sum
(directed-covariant-derivative v u)
(product -1 (directed-covariant-derivative u v))
))
(setq temp2 (commutator u v))
(equal temp1 temp2)
(print "covariant derivative chain rule (p. 252)")
(setq temp1 (directed-covariant-derivative (product (f) v) u))
(setq temp2 (sum
(product (f) (directed-covariant-derivative v u))
(product v (contract12 (product (gradient (f)) u)))
))
(print (equal temp1 temp2))
(print "additivity of covariant derivative (p. 257)")
(setq temp1 (directed-covariant-derivative u (sum v w)))
(setq temp2 (sum
(directed-covariant-derivative u v)
(directed-covariant-derivative u w)
))
(print (equal temp1 temp2))
(print "riemann is antisymmetric on last two indices (p. 286)")
(setq temp (sum
(product 1/2 RUDDD)
(product -1/2 (transpose34 RUDDD))
))
(print (equal RUDDD temp))
(print "riemann vanishes when antisymmetrized on last three indices (p. 286)")
(setq temp (sum
(product 1/6 RUDDD)
(product 1/6 (transpose34 (transpose24 RUDDD)))
(product 1/6 (transpose34 (transpose23 RUDDD)))
(product -1/6 (transpose23 RUDDD))
(product -1/6 (transpose34 RUDDD))
(product -1/6 (transpose24 RUDDD))
))
(print (equal temp 0))
(print "double dual of riemann (p. 325)")
(setq temp (contract23 (product gdd RUDDD))) ; lower 1st index
(setq temp (transpose34 (contract35 (product temp guu)))) ; raise 3rd index
(setq RDDUU (contract45 (product temp guu))) ; raise 4th index
(setq temp (product epsilon RDDUU))
(setq temp (contract35 temp)) ; sum over mu
(setq temp (contract34 temp)) ; sum over nu
(setq temp (product temp epsilon))
(setq temp (contract35 temp)) ; sum over rho
(setq temp (contract34 temp)) ; sum over sigma
(setq GUUDD (product -1/4 temp)) ; negative due to levi-civita tensor
; check
(print (equal
(contract13 GUUDD)
GUD
))
(print "noncommutation of covariant derivatives (p. 389)")
(setq B (sum
(product (B0) (tensor x0))
(product (B1) (tensor x1))
(product (B2) (tensor x2))
(product (B3) (tensor x3))
))
(setq temp (covariant-derivative-of-up-down (covariant-derivative B)))
(setq temp1 (sum temp (product -1 (transpose23 temp))))
(setq temp2 (transpose23 (contract25 (product RUDDD B))))
(print (equal temp1 temp2))
(print "bondi metric")
; erase any definitions for U, V, beta and gamma
(setq U (quote U))
(setq V (quote V))
(setq beta (quote beta))
(setq gamma (quote gamma))
; erase any definitions for u, r, theta and phi
(setq u (quote u))
(setq r (quote r))
(setq theta (quote theta))
(setq phi (quote phi))
; new coordinate system
(setq x0 u)
(setq x1 r)
(setq x2 theta)
(setq x3 phi)
; U, V, beta and gamma are functions of u, r and theta
(setq g_uu (sum
(product
(V u r theta)
(power r -1)
(power e (product 2 (beta u r theta)))
)
(product
-1
(power (U u r theta) 2)
(power r 2)
(power e (product 2 (gamma u r theta)))
)
))
(setq g_ur (product 2 (power e (product 2 (beta u r theta)))))
(setq g_utheta (product
2
(U u r theta)
(power r 2)
(power e (product 2 (gamma u r theta)))
))
(setq g_thetatheta (product
-1
(power r 2)
(power e (product 2 (gamma u r theta)))
))
(setq g_phiphi (product
-1
(power r 2)
(power e (product -2 (gamma u r theta)))
(power (sin theta) 2)
))
; metric tensor
(setq gdd (sum
(product g_uu (tensor u u))
(product g_ur (tensor u r))
(product g_ur (tensor r u))
(product g_utheta (tensor u theta))
(product g_utheta (tensor theta u))
(product g_thetatheta (tensor theta theta))
(product g_phiphi (tensor phi phi))
))
(gr) ; compute g, guu, GAMUDD, RUDDD, RDD, R, GDD, GUD and GUU
; is covariant derivative of metric zero?
(print (equal (covariant-derivative-of-down-down gdd) 0))
; is divergence of einstein zero?
(setq temp (contract23 (covariant-derivative-of-up-up GUU)))
(print (equal temp 0))

487
lisp/example2.tex 100644
View File

@ -0,0 +1,487 @@
\parindent=0pt
{\tt ;\ Page\ references\ are\ for\ the\ book\ "Gravitation."}
{\tt ;\ generic\ metric}
{\tt (setq\ gdd\ (sum}
{\tt \ \ (product\ (g00)\ (tensor\ x0\ x0))}
{\tt \ \ (product\ (g11)\ (tensor\ x1\ x1))}
{\tt \ \ (product\ (g22)\ (tensor\ x2\ x2))}
{\tt \ \ (product\ (g33)\ (tensor\ x3\ x3))}
{\tt ))}
{\tt (gr)\ ;\ compute\ g,\ guu,\ GAMUDD,\ RUDDD,\ RDD,\ R,\ GDD,\ GUD\ and\ GUU}
{\tt ;\ generic\ vectors}
{\tt (setq\ u\ (sum}
{\tt \ \ (product\ (u0)\ (tensor\ x0))}
{\tt \ \ (product\ (u1)\ (tensor\ x1))}
{\tt \ \ (product\ (u2)\ (tensor\ x2))}
{\tt \ \ (product\ (u3)\ (tensor\ x3))}
{\tt ))}
{\tt (setq\ v\ (sum}
{\tt \ \ (product\ (v0)\ (tensor\ x0))}
{\tt \ \ (product\ (v1)\ (tensor\ x1))}
{\tt \ \ (product\ (v2)\ (tensor\ x2))}
{\tt \ \ (product\ (v3)\ (tensor\ x3))}
{\tt ))}
{\tt (setq\ w\ (sum}
{\tt \ \ (product\ (w0)\ (tensor\ x0))}
{\tt \ \ (product\ (w1)\ (tensor\ x1))}
{\tt \ \ (product\ (w2)\ (tensor\ x2))}
{\tt \ \ (product\ (w3)\ (tensor\ x3))}
{\tt ))}
$$V_{[\mu\nu\lambda]}={1\over3!}
(V_{\mu\nu\lambda}
+V_{\nu\lambda\mu}
+V_{\lambda\mu\nu}
-V_{\nu\mu\lambda}
-V_{\mu\lambda\nu}
-V_{\lambda\nu\mu}
)$$
{\tt ;\ how\ to\ antisymmetrize\ three\ indices\ (p.\ 86)}
{\tt (setq\ V\ (sum}
{\tt \ \ (product\ 1/6\ V)}
{\tt \ \ (product\ 1/6\ (transpose12\ (transpose23\ V)))\ ;\ nu\ lambda\ mu\ ->\ mu\ nu\ lambda}
{\tt \ \ (product\ 1/6\ (transpose23\ (transpose12\ V)))\ ;\ lambda\ mu\ nu\ ->\ mu\ nu\ lambda}
{\tt \ \ (product\ -1/6\ (transpose12\ V))\ \ \ \ \ \ \ \ \ \ \ \ \ \ ;\ nu\ mu\ lambda\ ->\ mu\ nu\ lambda}
{\tt \ \ (product\ -1/6\ (transpose23\ V))\ \ \ \ \ \ \ \ \ \ \ \ \ \ ;\ mu\ lambda\ nu\ ->\ mu\ nu\ lambda}
{\tt \ \ (product\ -1/6\ (transpose13\ V))\ \ \ \ \ \ \ \ \ \ \ \ \ \ ;\ lambda\ nu\ mu\ ->\ mu\ nu\ lambda}
{\tt ))}
$$[{\bf u},{\bf v}]=
(u^\beta{v^\alpha}_{,\beta}-v^\beta{u^\alpha}_{,\beta}){\bf e}_\alpha$$
{\tt ;\ commutator\ (p.\ 206)}
{\tt (define\ commutator\ (sum}
{\tt \ \ (contract13\ (product\ +1\ arg1\ (gradient\ arg2)))}
{\tt \ \ (contract13\ (product\ -1\ arg2\ (gradient\ arg1)))}
{\tt ))}
$${\Gamma^\alpha}_{\mu\nu}=\hbox{$1\over2$}g^{\alpha\beta}
(g_{\beta\mu,\nu}+g_{\beta\nu,\mu}-g_{\mu\nu,\beta})$$
{\tt (print\ "connection\ coefficients\ (p.\ 210)")}
{\tt (setq\ temp\ (gradient\ gdd))}
{\tt (setq\ Gamma\ (contract23\ (product\ 1/2\ guu\ (sum}
{\tt \ \ temp}
{\tt \ \ (transpose23\ temp)}
{\tt \ \ (product\ -1\ (transpose12\ (transpose23\ temp)))}
{\tt ))))}
{\tt ;\ check}
{\tt (print\ (equal\ Gamma\ GAMUDD))}
$${T^\alpha}_{;\gamma}={T^\alpha}_{,\gamma}+
T^\mu{\Gamma^\alpha}_{\mu\gamma}$$
{\tt ;\ covariant\ derivative\ of\ a\ vector\ (p.\ 211)}
{\tt (define\ covariant-derivative\ (sum}
{\tt \ \ (gradient\ arg)}
{\tt \ \ (contract13\ (product\ arg\ GAMUDD))}
{\tt ))}
$${G^{\mu\nu}}_{;\nu}=0$$
{\tt (print\ "divergence\ of\ einstein\ is\ zero\ (p.\ 222)")}
{\tt ;\ covariant-derivative-of-up-up\ is\ already\ defined\ in\ grlib}
{\tt (setq\ temp\ (covariant-derivative-of-up-up\ GUU))}
{\tt (setq\ temp\ (contract23\ temp))\ ;\ sum\ over\ 2nd\ and\ 3rd\ indices}
{\tt (print\ (equal\ temp\ 0))}
$${R^\alpha}_{\beta\gamma\delta}=
{\partial{\Gamma^\alpha}_{\beta\delta}\over\partial x^\gamma}-
{\partial{\Gamma^\alpha}_{\beta\gamma}\over\partial x^\delta}+
{\Gamma^\alpha}_{\mu\gamma}{\Gamma^\mu}_{\beta\delta}-
{\Gamma^\alpha}_{\mu\delta}{\Gamma^\mu}_{\beta\gamma}$$
{\tt (print\ "computing\ riemann\ tensor\ (p.\ 219)")}
{\tt (setq\ temp1\ (gradient\ GAMUDD))}
{\tt (setq\ temp2\ (contract24\ (product\ GAMUDD\ GAMUDD)))}
{\tt (setq\ riemann\ (sum}
{\tt \ \ (transpose34\ temp1)}
{\tt \ \ (product\ -1\ temp1)}
{\tt \ \ (transpose23\ temp2)}
{\tt \ \ (product\ -1\ (transpose34\ (transpose23\ temp2)))}
{\tt ))}
{\tt ;\ check}
{\tt (print\ (equal\ riemann\ RUDDD))}
$$T_{\alpha\beta;\gamma}=T_{\alpha\beta,\gamma}
-T_{\mu\beta}{\Gamma^\mu}_{\alpha\gamma}
-T_{\alpha\mu}{\Gamma^\mu}_{\beta\gamma}$$
{\tt ;\ p.\ 259}
{\tt (define\ covariant-derivative-of-down-down\ (prog\ (temp)}
{\tt \ \ (setq\ temp\ (product\ arg\ GAMUDD))}
{\tt \ \ (return\ (sum}
{\tt \ \ \ \ (gradient\ arg)}
{\tt \ \ \ \ (product\ -1\ (transpose12\ (contract13\ temp)))}
{\tt \ \ \ \ (product\ -1\ (contract23\ temp))}
{\tt \ \ ))}
{\tt ))}
$${T^\alpha}_{\beta;\gamma}={T^\alpha}_{\beta,\gamma}+
{T^\mu}_\beta{\Gamma^\alpha}_{\mu\gamma}-
{T^\alpha}_\mu{\Gamma^\mu}_{\beta\gamma}$$
{\tt (define\ covariant-derivative-of-up-down\ (prog\ (temp)}
{\tt \ \ (setq\ temp\ (product\ arg\ GAMUDD))}
{\tt \ \ (return\ (sum}
{\tt \ \ \ \ (gradient\ arg)}
{\tt \ \ \ \ (transpose12\ (contract14\ temp))}
{\tt \ \ \ \ (product\ -1\ (contract23\ temp))}
{\tt \ \ ))}
{\tt ))}
$$\nabla_{\bf u}{\bf v}={v^\alpha}_{;\beta}u^{\beta}$$
{\tt (define\ directed-covariant-derivative}
{\tt \ \ (contract23\ (product\ (covariant-derivative\ arg1)\ arg2))}
{\tt )}
$$\nabla_{\bf u}{\bf v}-\nabla_{\bf v}{\bf u}=[{\bf u},{\bf v}]$$
{\tt (print\ "symmetry\ of\ covariant\ derivative\ (p.\ 252)")}
{\tt (setq\ temp1\ (sum}
{\tt \ \ (directed-covariant-derivative\ v\ u)}
{\tt \ \ (product\ -1\ (directed-covariant-derivative\ u\ v))}
{\tt ))}
{\tt (setq\ temp2\ (commutator\ u\ v))}
{\tt (equal\ temp1\ temp2)}
$$\nabla_{\bf u}(f{\bf v})=
f\nabla_{\bf u}{\bf v}+{\bf v}\partial_{\bf u}f$$
{\tt (print\ "covariant\ derivative\ chain\ rule\ (p.\ 252)")}
{\tt (setq\ temp1\ (directed-covariant-derivative\ (product\ (f)\ v)\ u))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ (f)\ (directed-covariant-derivative\ v\ u))}
{\tt \ \ (product\ v\ (contract12\ (product\ (gradient\ (f))\ u)))}
{\tt ))}
{\tt (print\ (equal\ temp1\ temp2))}
$$\nabla_{{\bf v}+{\bf w}}{\bf u}=
\nabla_{\bf v}{\bf u}+\nabla_{\bf w}{\bf u}$$
{\tt (print\ "additivity\ of\ covariant\ derivative\ (p.\ 257)")}
{\tt (setq\ temp1\ (directed-covariant-derivative\ u\ (sum\ v\ w)))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (directed-covariant-derivative\ u\ v)}
{\tt \ \ (directed-covariant-derivative\ u\ w)}
{\tt ))}
{\tt (print\ (equal\ temp1\ temp2))}
$${R^\alpha}_{\beta\gamma\delta}={R^\alpha}_{\beta[\gamma\delta]}$$
{\tt (print\ "riemann\ is\ antisymmetric\ on\ last\ two\ indices\ (p.\ 286)")}
{\tt (setq\ temp\ (sum}
{\tt \ \ (product\ 1/2\ RUDDD)}
{\tt \ \ (product\ -1/2\ (transpose34\ RUDDD))}
{\tt ))}
{\tt (print\ (equal\ RUDDD\ temp))}
$${R^\alpha}_{[\beta\gamma\delta]}=0$$
{\tt (print\ "riemann\ vanishes\ when\ antisymmetrized\ on\ last\ three\ indices\ (p.\ 286)")}
{\tt (setq\ temp\ (sum}
{\tt \ \ (product\ 1/6\ RUDDD)}
{\tt \ \ (product\ 1/6\ (transpose34\ (transpose24\ RUDDD)))}
{\tt \ \ (product\ 1/6\ (transpose34\ (transpose23\ RUDDD)))}
{\tt \ \ (product\ -1/6\ (transpose23\ RUDDD))}
{\tt \ \ (product\ -1/6\ (transpose34\ RUDDD))}
{\tt \ \ (product\ -1/6\ (transpose24\ RUDDD))}
{\tt ))}
{\tt (print\ (equal\ temp\ 0))}
$${G^{\alpha\beta}}_{\gamma\delta}=
\hbox{$1\over2$}\epsilon^{\alpha\beta\mu\nu}
{R_{\mu\nu}}^{\rho\sigma}
\hbox{$1\over2$}\epsilon_{\rho\sigma\gamma\delta}$$
{\tt (print\ "double\ dual\ of\ riemann\ (p.\ 325)")}
{\tt (setq\ temp\ (contract23\ (product\ gdd\ RUDDD)))\ ;\ lower\ 1st\ index}
{\tt (setq\ temp\ (transpose34\ (contract35\ (product\ temp\ guu))))\ ;\ raise\ 3rd\ index}
{\tt (setq\ RDDUU\ (contract45\ (product\ temp\ guu)))\ ;\ raise\ 4th\ index}
{\tt (setq\ temp\ (product\ epsilon\ RDDUU))}
{\tt (setq\ temp\ (contract35\ temp))\ ;\ sum\ over\ mu}
{\tt (setq\ temp\ (contract34\ temp))\ ;\ sum\ over\ nu}
{\tt (setq\ temp\ (product\ temp\ epsilon))}
{\tt (setq\ temp\ (contract35\ temp))\ ;\ sum\ over\ rho}
{\tt (setq\ temp\ (contract34\ temp))\ ;\ sum\ over\ sigma}
{\tt (setq\ GUUDD\ (product\ -1/4\ temp))\ ;\ negative\ due\ to\ levi-civita\ tensor}
{\tt ;\ check}
{\tt (print\ (equal}
{\tt \ \ (contract13\ GUUDD)}
{\tt \ \ GUD}
{\tt ))}
$${B^\mu}_{;\alpha\beta}-{B^\mu}_{;\beta\alpha}=
{R^\mu}_{\nu\beta\alpha}B^\nu$$
{\tt (print\ "noncommutation\ of\ covariant\ derivatives\ (p.\ 389)")}
{\tt (setq\ B\ (sum}
{\tt \ \ (product\ (B0)\ (tensor\ x0))}
{\tt \ \ (product\ (B1)\ (tensor\ x1))}
{\tt \ \ (product\ (B2)\ (tensor\ x2))}
{\tt \ \ (product\ (B3)\ (tensor\ x3))}
{\tt ))}
{\tt (setq\ temp\ (covariant-derivative-of-up-down\ (covariant-derivative\ B)))}
{\tt (setq\ temp1\ (sum\ temp\ (product\ -1\ (transpose23\ temp))))}
{\tt (setq\ temp2\ (transpose23\ (contract25\ (product\ RUDDD\ B))))}
{\tt (print\ (equal\ temp1\ temp2))}
{\tt (print\ "bondi\ metric")}
{\tt ;\ erase\ any\ definitions\ for\ U,\ V,\ beta\ and\ gamma}
{\tt (setq\ U\ (quote\ U))}
{\tt (setq\ V\ (quote\ V))}
{\tt (setq\ beta\ (quote\ beta))}
{\tt (setq\ gamma\ (quote\ gamma))}
{\tt ;\ erase\ any\ definitions\ for\ u,\ r,\ theta\ and\ phi}
{\tt (setq\ u\ (quote\ u))}
{\tt (setq\ r\ (quote\ r))}
{\tt (setq\ theta\ (quote\ theta))}
{\tt (setq\ phi\ (quote\ phi))}
{\tt ;\ new\ coordinate\ system}
{\tt (setq\ x0\ u)}
{\tt (setq\ x1\ r)}
{\tt (setq\ x2\ theta)}
{\tt (setq\ x3\ phi)}
{\tt ;\ U,\ V,\ beta\ and\ gamma\ are\ functions\ of\ u,\ r\ and\ theta}
$$g_{uu}=Ve^{2\beta}/r-U^2r^2e^{2\gamma}$$
{\tt (setq\ g\_uu\ (sum}
{\tt \ \ (product}
{\tt \ \ \ \ (V\ u\ r\ theta)}
{\tt \ \ \ \ (power\ r\ -1)}
{\tt \ \ \ \ (power\ e\ (product\ 2\ (beta\ u\ r\ theta)))}
{\tt \ \ )}
{\tt \ \ (product}
{\tt \ \ \ \ -1}
{\tt \ \ \ \ (power\ (U\ u\ r\ theta)\ 2)}
{\tt \ \ \ \ (power\ r\ 2)}
{\tt \ \ \ \ (power\ e\ (product\ 2\ (gamma\ u\ r\ theta)))}
{\tt \ \ )}
{\tt ))}
$$g_{ur}=2e^{2\beta}$$
{\tt (setq\ g\_ur\ (product\ 2\ (power\ e\ (product\ 2\ (beta\ u\ r\ theta)))))}
$$g_{u\theta}=2Ur^2e^{2\gamma}$$
{\tt (setq\ g\_utheta\ (product}
{\tt \ \ 2}
{\tt \ \ (U\ u\ r\ theta)}
{\tt \ \ (power\ r\ 2)}
{\tt \ \ (power\ e\ (product\ 2\ (gamma\ u\ r\ theta)))}
{\tt ))}
$$g_{\theta\theta}=-r^2e^{2\gamma}$$
{\tt (setq\ g\_thetatheta\ (product}
{\tt \ \ -1}
{\tt \ \ (power\ r\ 2)}
{\tt \ \ (power\ e\ (product\ 2\ (gamma\ u\ r\ theta)))}
{\tt ))}
$$g_{\phi\phi}=-r^2e^{-2\gamma}\sin^2\theta$$
{\tt (setq\ g\_phiphi\ (product}
{\tt \ \ -1}
{\tt \ \ (power\ r\ 2)}
{\tt \ \ (power\ e\ (product\ -2\ (gamma\ u\ r\ theta)))}
{\tt \ \ (power\ (sin\ theta)\ 2)}
{\tt ))}
{\tt ;\ metric\ tensor}
{\tt (setq\ gdd\ (sum}
{\tt \ \ (product\ g\_uu\ (tensor\ u\ u))}
{\tt \ \ (product\ g\_ur\ (tensor\ u\ r))}
{\tt \ \ (product\ g\_ur\ (tensor\ r\ u))}
{\tt \ \ (product\ g\_utheta\ (tensor\ u\ theta))}
{\tt \ \ (product\ g\_utheta\ (tensor\ theta\ u))}
{\tt \ \ (product\ g\_thetatheta\ (tensor\ theta\ theta))}
{\tt \ \ (product\ g\_phiphi\ (tensor\ phi\ phi))}
{\tt ))}
{\tt (gr)\ ;\ compute\ g,\ guu,\ GAMUDD,\ RUDDD,\ RDD,\ R,\ GDD,\ GUD\ and\ GUU}
{\tt ;\ is\ covariant\ derivative\ of\ metric\ zero?}
{\tt (print\ (equal\ (covariant-derivative-of-down-down\ gdd)\ 0))}
{\tt ;\ is\ divergence\ of\ einstein\ zero?}
{\tt (setq\ temp\ (contract23\ (covariant-derivative-of-up-up\ GUU)))}
{\tt (print\ (equal\ temp\ 0))}
\end

39
lisp/index.html 100644
View File

@ -0,0 +1,39 @@
Simple Lisp
<pre>
[roscoe ~/lisp]$ gcc -o lisp lisp.c
[roscoe ~/lisp]$ ./lisp example.lisp
Bondi metric...
Is the Einstein tensor GUU divergence-free?
t
&gt; (length GUU)
280
&gt; (length (covariant-derivative-of-up-up GUU))
6723
&gt; ^C
[roscoe ~/lisp]$ ./lisp example2.lisp
connection coefficients (p. 210)
t
divergence of einstein is zero (p. 222)
t
computing riemann tensor (p. 219)
t
symmetry of covariant derivative (p. 252)
t
covariant derivative chain rule (p. 252)
t
additivity of covariant derivative (p. 257)
t
riemann is antisymmetric on last two indices (p. 286)
t
riemann vanishes when antisymmetrized on last three indices (p. 286)
t
double dual of riemann (p. 325)
t
noncommutation of covariant derivatives (p. 389)
t
bondi metric
t
t
&gt;
</pre>

2846
lisp/lisp.c 100644

File diff suppressed because it is too large Load Diff

222
lisp/qed.lisp 100644
View File

@ -0,0 +1,222 @@
; From "Quantum Electrodynamics" by Richard P. Feynman
; pp. 40-43
; generic spacetime vectors a, b and c
(setq a (sum
(product at (tensor t))
(product ax (tensor x))
(product ay (tensor y))
(product az (tensor z))
))
(setq b (sum
(product bt (tensor t))
(product bx (tensor x))
(product by (tensor y))
(product bz (tensor z))
))
(setq c (sum
(product ct (tensor t))
(product cx (tensor x))
(product cy (tensor y))
(product cz (tensor z))
))
; define this function for multiplying spactime vectors
; how it works: (dot arg1 (tensor t)) picks off the t'th element, etc.
; the -1's are for the spacetime metric
(define spacetime-dot (sum
(dot (dot arg1 (tensor t)) (dot arg2 (tensor t)))
(dot -1 (dot arg1 (tensor x)) (dot arg2 (tensor x)))
(dot -1 (dot arg1 (tensor y)) (dot arg2 (tensor y)))
(dot -1 (dot arg1 (tensor z)) (dot arg2 (tensor z)))
))
(setq temp1 (spacetime-dot a a))
(setq temp2 (sum
(power at 2)
(product -1 (power ax 2))
(product -1 (power ay 2))
(product -1 (power az 2))
))
(equal temp1 temp2) ; print "t" if it's true
(setq I (sum
(tensor t t)
(tensor x x)
(tensor y y)
(tensor z z)
))
(setq gammat (sum
(tensor t t)
(tensor x x)
(product -1 (tensor y y))
(product -1 (tensor z z))
))
(setq gammax (sum
(tensor t z)
(tensor x y)
(product -1 (tensor y x))
(product -1 (tensor z t))
))
(setq gammay (sum
(product -1 i (tensor t z))
(product i (tensor x y))
(product i (tensor y x))
(product -1 i (tensor z t))
))
(setq gammaz (sum
(tensor t y)
(product -1 (tensor x z))
(product -1 (tensor y t))
(tensor z x)
))
(equal (dot gammat gammat) I) ; print "t" if it's true
(equal (dot gammax gammax) (dot -1 I)) ; print "t" if it's true
(equal (dot gammay gammay) (dot -1 I)) ; print "t" if it's true
(equal (dot gammaz gammaz) (dot -1 I)) ; print "t" if it's true
(setq gamma5 (dot gammax gammay gammaz gammat))
(equal (dot gamma5 gamma5) (dot -1 I)) ; print "t" if it's true
; gamma is a "vector" of dirac matrices
(setq gamma (sum
(product gammat (tensor t))
(product gammax (tensor x))
(product gammay (tensor y))
(product gammaz (tensor z))
))
(setq agamma (spacetime-dot a gamma))
(setq bgamma (spacetime-dot b gamma))
(setq cgamma (spacetime-dot c gamma))
(setq temp1 agamma)
(setq temp2 (sum
(product at gammat)
(product -1 ax gammax)
(product -1 ay gammay)
(product -1 az gammaz)
))
(equal temp1 temp2) ; print "t" if it's true
; note: gammas are square matrices, use "dot" to multiply
; use "spacetime-dot" to multiply spacetime vectors
(setq temp1 (dot agamma bgamma))
(setq temp2 (sum
(dot -1 bgamma agamma)
(dot 2 (spacetime-dot a b) I)
))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (dot agamma gamma5))
(setq temp2 (dot -1 gamma5 agamma))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (dot gammax agamma gammax))
(setq temp2 (sum agamma (dot 2 ax gammax)))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (spacetime-dot gamma gamma))
(setq temp2 (dot 4 I))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (spacetime-dot gamma (dot agamma gamma)))
(setq temp2 (dot -2 agamma))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (spacetime-dot gamma (dot agamma bgamma gamma)))
(setq temp2 (dot 4 (spacetime-dot a b) I))
(equal temp1 temp2) ; print "t" if it's true
(setq temp1 (spacetime-dot gamma (dot agamma bgamma cgamma gamma)))
(setq temp2 (dot -2 cgamma bgamma agamma))
(equal temp1 temp2) ; print "t" if it's true
; define series approximations for some transcendental functions
; for 32-bit integers, overflow occurs for powers above 5
(define order 5)
(define yexp (prog temp count
(setq temp 0)
(setq count order)
loop
(setq temp (product (power count -1) arg (sum 1 temp)))
(setq count (sum count -1))
(cond ((greaterp count 0) (goto loop)))
(return (sum 1 temp))
))
(define ysin (sum
(product -1/2 i (yexp (product i arg)))
(product 1/2 i (yexp (product -1 i arg)))
))
(define ycos (sum
(product 1/2 (yexp (product i arg)))
(product 1/2 (yexp (product -1 i arg)))
))
(define ysinh (sum
(product 1/2 (yexp arg))
(product -1/2 (yexp (product -1 arg)))
))
(define ycosh (sum
(product 1/2 (yexp arg))
(product 1/2 (yexp (product -1 arg)))
))
; same as above but for matrices
(define YEXP (prog temp count
(setq temp 0)
(setq count order)
loop
(setq temp (dot (power count -1) arg (sum I temp)))
(setq count (sum count -1))
(cond ((greaterp count 0) (goto loop)))
(return (sum I temp))
))
(define YSIN (sum
(product -1/2 i (YEXP (product i arg)))
(product 1/2 i (YEXP (product -1 i arg)))
))
(define YCOS (sum
(product 1/2 (YEXP (product i arg)))
(product 1/2 (YEXP (product -1 i arg)))
))
(define YSINH (sum
(product 1/2 (YEXP arg))
(product -1/2 (YEXP (product -1 arg)))
))
(define YCOSH (sum
(product 1/2 (YEXP arg))
(product 1/2 (YEXP (product -1 arg)))
))
; for truncating products of power series
(define POWER (cond
((greaterp arg2 order) 0)
(t (list 'power arg1 arg2))
))
(define truncate (eval (subst 'POWER 'power arg)))
(setq temp1 (YEXP (dot 1/2 u gammat gammax)))
(setq temp2 (sum
(product I (ycosh (product 1/2 u))) ; could use "dot" but not necessary
(dot gammat gammax (ysinh (product 1/2 u)))
))
(equal temp1 temp2) ; print t if it's true
(setq temp1 (YEXP (dot 1/2 theta gammax gammay)))
(setq temp2 (sum
(product I (ycos (product 1/2 theta))) ; could use "dot" but not necessary
(dot gammax gammay (ysin (product 1/2 theta)))
))
(equal temp1 temp2) ; print t if it's true
(setq temp1 (truncate (dot
(YEXP (dot -1/2 u gammat gammaz))
gammat
(YEXP (dot 1/2 u gammat gammaz))
)))
(setq temp2 (sum
(product gammat (ycosh u)) ; could use "dot" but not necessary
(product gammaz (ysinh u)) ; could use "dot" but not necessary
))
(equal temp1 temp2) ; print t if it's true
(setq temp1 (truncate (dot
(YEXP (dot -1/2 u gammat gammaz))
gammaz
(YEXP (dot 1/2 u gammat gammaz))
)))
(setq temp2 (sum
(product gammaz (ycosh u)) ; could use "dot" but not necessary
(product gammat (ysinh u)) ; could use "dot" but not necessary
))
(equal temp1 temp2) ; print t if it's true
(setq temp1 (truncate (dot
(YEXP (dot -1/2 u gammat gammaz))
gammay
(YEXP (dot 1/2 u gammat gammaz))
)))
(equal temp1 gammay) ; print t if it's true
(setq temp1 (truncate (dot
(YEXP (dot -1/2 u gammat gammaz))
gammax
(YEXP (dot 1/2 u gammat gammaz))
)))
(equal temp1 gammax) ; print t if it's true

535
lisp/qed.tex 100644
View File

@ -0,0 +1,535 @@
\parindent=0pt
{\tt ;\ From\ "Quantum\ Electrodynamics"\ by\ Richard\ P.\ Feynman}
{\tt ;\ pp.\ 40-43}
$$
a=\left(\matrix{
a_t\cr
a_x\cr
a_y\cr
a_z\cr
}\right)
\quad
b=\left(\matrix{
b_t\cr
b_x\cr
b_y\cr
b_z\cr
}\right)
\quad
c=\left(\matrix{
c_t\cr
c_x\cr
c_y\cr
c_z\cr
}\right)
$$
{\tt ;\ generic\ spacetime\ vectors\ a,\ b\ and\ c}
{\tt (setq\ a\ (sum}
{\tt \ \ (product\ at\ (tensor\ t))}
{\tt \ \ (product\ ax\ (tensor\ x))}
{\tt \ \ (product\ ay\ (tensor\ y))}
{\tt \ \ (product\ az\ (tensor\ z))}
{\tt ))}
{\tt (setq\ b\ (sum}
{\tt \ \ (product\ bt\ (tensor\ t))}
{\tt \ \ (product\ bx\ (tensor\ x))}
{\tt \ \ (product\ by\ (tensor\ y))}
{\tt \ \ (product\ bz\ (tensor\ z))}
{\tt ))}
{\tt (setq\ c\ (sum}
{\tt \ \ (product\ ct\ (tensor\ t))}
{\tt \ \ (product\ cx\ (tensor\ x))}
{\tt \ \ (product\ cy\ (tensor\ y))}
{\tt \ \ (product\ cz\ (tensor\ z))}
{\tt ))}
{\tt ;\ define\ this\ function\ for\ multiplying\ spactime\ vectors}
{\tt ;\ how\ it\ works:\ (dot\ arg1\ (tensor\ t))\ picks\ off\ the\ t'th\ element,\ etc.}
{\tt ;\ the\ -1's\ are\ for\ the\ spacetime\ metric}
{\tt (define\ spacetime-dot\ (sum}
{\tt \ \ (dot\ (dot\ arg1\ (tensor\ t))\ (dot\ arg2\ (tensor\ t)))}
{\tt \ \ (dot\ -1\ (dot\ arg1\ (tensor\ x))\ (dot\ arg2\ (tensor\ x)))}
{\tt \ \ (dot\ -1\ (dot\ arg1\ (tensor\ y))\ (dot\ arg2\ (tensor\ y)))}
{\tt \ \ (dot\ -1\ (dot\ arg1\ (tensor\ z))\ (dot\ arg2\ (tensor\ z)))}
{\tt ))}
$$a^2\mathrel{\mathop=^?}a_t^2-a_x^2-a_y^2-a_z^2$$
{\tt (setq\ temp1\ (spacetime-dot\ a\ a))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (power\ at\ 2)}
{\tt \ \ (product\ -1\ (power\ ax\ 2))}
{\tt \ \ (product\ -1\ (power\ ay\ 2))}
{\tt \ \ (product\ -1\ (power\ az\ 2))}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$I=\left(\matrix{
1&0&0&0\cr
0&1&0&0\cr
0&0&1&0\cr
0&0&0&1\cr
}\right)$$
{\tt (setq\ I\ (sum}
{\tt \ \ (tensor\ t\ t)}
{\tt \ \ (tensor\ x\ x)}
{\tt \ \ (tensor\ y\ y)}
{\tt \ \ (tensor\ z\ z)}
{\tt ))}
$$\gamma_t=\left(\matrix{
1&0&0&0\cr
0&1&0&0\cr
0&0&-1&0\cr
0&0&0&-1\cr
}\right)$$
{\tt (setq\ gammat\ (sum}
{\tt \ \ (tensor\ t\ t)}
{\tt \ \ (tensor\ x\ x)}
{\tt \ \ (product\ -1\ (tensor\ y\ y))}
{\tt \ \ (product\ -1\ (tensor\ z\ z))}
{\tt ))}
$$\gamma_x=\left(\matrix{
0&0&0&1\cr
0&0&1&0\cr
0&-1&0&0\cr
-1&0&0&0\cr
}\right)$$
{\tt (setq\ gammax\ (sum}
{\tt \ \ (tensor\ t\ z)}
{\tt \ \ (tensor\ x\ y)}
{\tt \ \ (product\ -1\ (tensor\ y\ x))}
{\tt \ \ (product\ -1\ (tensor\ z\ t))}
{\tt ))}
$$\gamma_y=\left(\matrix{
0&0&0&-i\cr
0&0&i&0\cr
0&i&0&0\cr
-i&0&0&0\cr
}\right)$$
{\tt (setq\ gammay\ (sum}
{\tt \ \ (product\ -1\ i\ (tensor\ t\ z))}
{\tt \ \ (product\ i\ (tensor\ x\ y))}
{\tt \ \ (product\ i\ (tensor\ y\ x))}
{\tt \ \ (product\ -1\ i\ (tensor\ z\ t))}
{\tt ))}
$$\gamma_z=\left(\matrix{
0&0&1&0\cr
0&0&0&-1\cr
-1&0&0&0\cr
0&1&0&0\cr
}\right)$$
{\tt (setq\ gammaz\ (sum}
{\tt \ \ (tensor\ t\ y)}
{\tt \ \ (product\ -1\ (tensor\ x\ z))}
{\tt \ \ (product\ -1\ (tensor\ y\ t))}
{\tt \ \ (tensor\ z\ x)}
{\tt ))}
$$\gamma_t^2\mathrel{\mathop=^?}1$$
{\tt (equal\ (dot\ gammat\ gammat)\ I)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma_x^2=\gamma_y^2=\gamma_z^2\mathrel{\mathop=^?}-1$$
{\tt (equal\ (dot\ gammax\ gammax)\ (dot\ -1\ I))\ ;\ print\ "t"\ if\ it's\ true}
{\tt (equal\ (dot\ gammay\ gammay)\ (dot\ -1\ I))\ ;\ print\ "t"\ if\ it's\ true}
{\tt (equal\ (dot\ gammaz\ gammaz)\ (dot\ -1\ I))\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma_5=\gamma_x\gamma_y\gamma_z\gamma_t$$
{\tt (setq\ gamma5\ (dot\ gammax\ gammay\ gammaz\ gammat))}
$$\gamma_5^2\mathrel{\mathop=^?}-1$$
{\tt (equal\ (dot\ gamma5\ gamma5)\ (dot\ -1\ I))\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma=\left(\matrix{
\gamma_t\cr
\gamma_x\cr
\gamma_y\cr
\gamma_z\cr
}\right)$$
{\tt ;\ gamma\ is\ a\ "vector"\ of\ dirac\ matrices}
{\tt (setq\ gamma\ (sum}
{\tt \ \ (product\ gammat\ (tensor\ t))}
{\tt \ \ (product\ gammax\ (tensor\ x))}
{\tt \ \ (product\ gammay\ (tensor\ y))}
{\tt \ \ (product\ gammaz\ (tensor\ z))}
{\tt ))}
$$a\!\!\!/=a\gamma\qquad b\!\!\!/=b\gamma\qquad c\!\!\!/=c\gamma$$
{\tt (setq\ agamma\ (spacetime-dot\ a\ gamma))}
{\tt (setq\ bgamma\ (spacetime-dot\ b\ gamma))}
{\tt (setq\ cgamma\ (spacetime-dot\ c\ gamma))}
$$a\!\!\!/\mathrel{\mathop=^?}a_t\gamma_t-a_x\gamma_x-a_y\gamma_y-a_x\gamma_x$$
{\tt (setq\ temp1\ agamma)}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ at\ gammat)}
{\tt \ \ (product\ -1\ ax\ gammax)}
{\tt \ \ (product\ -1\ ay\ gammay)}
{\tt \ \ (product\ -1\ az\ gammaz)}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$a\!\!\!/b\!\!\!/\mathrel{\mathop=^?}-b\!\!\!/a\!\!\!/ + 2ab$$
{\tt ;\ note:\ gammas\ are\ square\ matrices,\ use\ "dot"\ to\ multiply}
{\tt ;\ use\ "spacetime-dot"\ to\ multiply\ spacetime\ vectors}
{\tt (setq\ temp1\ (dot\ agamma\ bgamma))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (dot\ -1\ bgamma\ agamma)}
{\tt \ \ (dot\ 2\ (spacetime-dot\ a\ b)\ I)}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$a\!\!\!/\gamma_5\mathrel{\mathop=^?}-\gamma_5a\!\!\!/$$
{\tt (setq\ temp1\ (dot\ agamma\ gamma5))}
{\tt (setq\ temp2\ (dot\ -1\ gamma5\ agamma))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma_x a\!\!\!/\gamma_x\mathrel{\mathop=^?}a\!\!\!/+2a_x\gamma_x$$
{\tt (setq\ temp1\ (dot\ gammax\ agamma\ gammax))}
{\tt (setq\ temp2\ (sum\ agamma\ (dot\ 2\ ax\ gammax)))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma\gamma\mathrel{\mathop=^?}4$$
{\tt (setq\ temp1\ (spacetime-dot\ gamma\ gamma))}
{\tt (setq\ temp2\ (dot\ 4\ I))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma a\!\!\!/\gamma\mathrel{\mathop=^?}-2a\!\!\!/$$
{\tt (setq\ temp1\ (spacetime-dot\ gamma\ (dot\ agamma\ gamma)))}
{\tt (setq\ temp2\ (dot\ -2\ agamma))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma a\!\!\!/b\!\!\!/\gamma\mathrel{\mathop=^?}4ab$$
{\tt (setq\ temp1\ (spacetime-dot\ gamma\ (dot\ agamma\ bgamma\ gamma)))}
{\tt (setq\ temp2\ (dot\ 4\ (spacetime-dot\ a\ b)\ I))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
$$\gamma a\!\!\!/b\!\!\!/c\!\!\!/\gamma\mathrel{\mathop=^?}
-2c\!\!\!/b\!\!\!/a\!\!\!/$$
{\tt (setq\ temp1\ (spacetime-dot\ gamma\ (dot\ agamma\ bgamma\ cgamma\ gamma)))}
{\tt (setq\ temp2\ (dot\ -2\ cgamma\ bgamma\ agamma))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ "t"\ if\ it's\ true}
{\tt ;\ define\ series\ approximations\ for\ some\ transcendental\ functions}
{\tt ;\ for\ 32-bit\ integers,\ overflow\ occurs\ for\ powers\ above\ 5}
{\tt (define\ order\ 5)}
{\tt (define\ yexp\ (prog\ temp\ count}
{\tt \ \ (setq\ temp\ 0)}
{\tt \ \ (setq\ count\ order)}
{\tt loop}
{\tt \ \ (setq\ temp\ (product\ (power\ count\ -1)\ arg\ (sum\ 1\ temp)))}
{\tt \ \ (setq\ count\ (sum\ count\ -1))}
{\tt \ \ (cond\ ((greaterp\ count\ 0)\ (goto\ loop)))}
{\tt \ \ (return\ (sum\ 1\ temp))}
{\tt ))}
{\tt (define\ ysin\ (sum}
{\tt \ \ (product\ -1/2\ i\ (yexp\ (product\ i\ arg)))}
{\tt \ \ (product\ 1/2\ i\ (yexp\ (product\ -1\ i\ arg)))}
{\tt ))}
{\tt (define\ ycos\ (sum}
{\tt \ \ (product\ 1/2\ (yexp\ (product\ i\ arg)))}
{\tt \ \ (product\ 1/2\ (yexp\ (product\ -1\ i\ arg)))}
{\tt ))}
{\tt (define\ ysinh\ (sum}
{\tt \ \ (product\ 1/2\ (yexp\ arg))}
{\tt \ \ (product\ -1/2\ (yexp\ (product\ -1\ arg)))}
{\tt ))}
{\tt (define\ ycosh\ (sum}
{\tt \ \ (product\ 1/2\ (yexp\ arg))}
{\tt \ \ (product\ 1/2\ (yexp\ (product\ -1\ arg)))}
{\tt ))}
{\tt ;\ same\ as\ above\ but\ for\ matrices}
{\tt (define\ YEXP\ (prog\ temp\ count}
{\tt \ \ (setq\ temp\ 0)}
{\tt \ \ (setq\ count\ order)}
{\tt loop}
{\tt \ \ (setq\ temp\ (dot\ (power\ count\ -1)\ arg\ (sum\ I\ temp)))}
{\tt \ \ (setq\ count\ (sum\ count\ -1))}
{\tt \ \ (cond\ ((greaterp\ count\ 0)\ (goto\ loop)))}
{\tt \ \ (return\ (sum\ I\ temp))}
{\tt ))}
{\tt (define\ YSIN\ (sum}
{\tt \ \ (product\ -1/2\ i\ (YEXP\ (product\ i\ arg)))}
{\tt \ \ (product\ 1/2\ i\ (YEXP\ (product\ -1\ i\ arg)))}
{\tt ))}
{\tt (define\ YCOS\ (sum}
{\tt \ \ (product\ 1/2\ (YEXP\ (product\ i\ arg)))}
{\tt \ \ (product\ 1/2\ (YEXP\ (product\ -1\ i\ arg)))}
{\tt ))}
{\tt (define\ YSINH\ (sum}
{\tt \ \ (product\ 1/2\ (YEXP\ arg))}
{\tt \ \ (product\ -1/2\ (YEXP\ (product\ -1\ arg)))}
{\tt ))}
{\tt (define\ YCOSH\ (sum}
{\tt \ \ (product\ 1/2\ (YEXP\ arg))}
{\tt \ \ (product\ 1/2\ (YEXP\ (product\ -1\ arg)))}
{\tt ))}
{\tt ;\ for\ truncating\ products\ of\ power\ series}
{\tt (define\ POWER\ (cond}
{\tt \ \ ((greaterp\ arg2\ order)\ 0)}
{\tt \ \ (t\ (list\ 'power\ arg1\ arg2))}
{\tt ))}
{\tt (define\ truncate\ (eval\ (subst\ 'POWER\ 'power\ arg)))}
$$\exp[(u/2)\gamma_t\gamma_x]\mathrel{\mathop=^?}
\cosh(u/2)+\gamma_t\gamma_x\sinh(u/2)$$
{\tt (setq\ temp1\ (YEXP\ (dot\ 1/2\ u\ gammat\ gammax)))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ I\ (ycosh\ (product\ 1/2\ u)))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt \ \ (dot\ gammat\ gammax\ (ysinh\ (product\ 1/2\ u)))}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ t\ if\ it's\ true}
$$\exp[(\theta/2)\gamma_x\gamma_y]\mathrel{\mathop=^?}
\cos(\theta/2)+\gamma_x\gamma_y\sin(\theta/2)$$
{\tt (setq\ temp1\ (YEXP\ (dot\ 1/2\ theta\ gammax\ gammay)))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ I\ (ycos\ (product\ 1/2\ theta)))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt \ \ (dot\ gammax\ gammay\ (ysin\ (product\ 1/2\ theta)))}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ t\ if\ it's\ true}
$$\exp[-(u/2)\gamma_t\gamma_z]\gamma_t
\exp[(u/2)\gamma_t\gamma_z]
\mathrel{\mathop=^?}\gamma_t\cosh u+\gamma_z\sinh u$$
{\tt (setq\ temp1\ (truncate\ (dot}
{\tt \ \ (YEXP\ (dot\ -1/2\ u\ gammat\ gammaz))}
{\tt \ \ gammat}
{\tt \ \ (YEXP\ (dot\ 1/2\ u\ gammat\ gammaz))}
{\tt )))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ gammat\ (ycosh\ u))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt \ \ (product\ gammaz\ (ysinh\ u))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ t\ if\ it's\ true}
$$\exp[-(u/2)\gamma_t\gamma_z]\gamma_z
\exp[(u/2)\gamma_t\gamma_z]
\mathrel{\mathop=^?}\gamma_z\cosh u+\gamma_t\sinh u$$
{\tt (setq\ temp1\ (truncate\ (dot}
{\tt \ \ (YEXP\ (dot\ -1/2\ u\ gammat\ gammaz))}
{\tt \ \ gammaz}
{\tt \ \ (YEXP\ (dot\ 1/2\ u\ gammat\ gammaz))}
{\tt )))}
{\tt (setq\ temp2\ (sum}
{\tt \ \ (product\ gammaz\ (ycosh\ u))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt \ \ (product\ gammat\ (ysinh\ u))\ ;\ could\ use\ "dot"\ but\ not\ necessary}
{\tt ))}
{\tt (equal\ temp1\ temp2)\ ;\ print\ t\ if\ it's\ true}
$$\exp[-(u/2)\gamma_t\gamma_z]\gamma_y
\exp[(u/2)\gamma_t\gamma_z]
\mathrel{\mathop=^?}\gamma_y$$
{\tt (setq\ temp1\ (truncate\ (dot}
{\tt \ \ (YEXP\ (dot\ -1/2\ u\ gammat\ gammaz))}
{\tt \ \ gammay}
{\tt \ \ (YEXP\ (dot\ 1/2\ u\ gammat\ gammaz))}
{\tt )))}
{\tt (equal\ temp1\ gammay)\ ;\ print\ t\ if\ it's\ true}
$$\exp[-(u/2)\gamma_t\gamma_z]\gamma_x
\exp[(u/2)\gamma_t\gamma_z]
\mathrel{\mathop=^?}\gamma_x$$
{\tt (setq\ temp1\ (truncate\ (dot}
{\tt \ \ (YEXP\ (dot\ -1/2\ u\ gammat\ gammaz))}
{\tt \ \ gammax}
{\tt \ \ (YEXP\ (dot\ 1/2\ u\ gammat\ gammaz))}
{\tt )))}
{\tt (equal\ temp1\ gammax)\ ;\ print\ t\ if\ it's\ true}
\end

627
lisp/reference.html 100644
View File

@ -0,0 +1,627 @@
<html>
<p>
<h1>adjunct</h1>
<p>
A adj A = det A I
<pre>
> (setq A (sum
(product a (tensor x x))
(product b (tensor x y))
(product c (tensor y x))
(product d (tensor y y))
))
> (setq A1 (adjunct A x y))
> (setq AA1 (contract23 (product A A1)))
> (setq I (sum (tensor x x) (tensor y y)))
> (equal AA1 (product (determinant A x y) I))
t
</pre>
<p>
<h1>and</h1>
<pre>
> (and t t t)
t
> (and t nil t)
nil
</pre>
<p>
<h1>append</h1>
<pre>
> (append (list a b) (list c d))
(a b c d)
</pre>
<p>
<h1>atom</h1>
<pre>
> (atom a)
t
> (atom (list a b c))
nil
</pre>
<p>
<h1>car</h1>
<pre>
> (car (list a b c))
a
</pre>
<p>
<h1>cdr</h1>
<pre>
> (cdr (list a b c))
(b c)
</pre>
<p>
<h1>complex-conjugate</h1>
<pre>
> (complex-conjugate (sum a (product b i)))
(sum a (product -1 b i))
</pre>
<p>
<h1>component</h1>
<pre>
> (setq A (sum
(product a (tensor x x))
(product b (tensor x y))
(product c (tensor y x))
(product d (tensor y y))
))
> (component A x y)
b
</pre>
<p>
<h1>cond</h1>
<p>
(cond (a1 b1) (a2 b2)... ) returns b of first non-nil a
<pre>
> (define foo (cond ((zerop arg) "zero") (t "not zero")))
> (foo 0)
zero
> (foo 1)
not zero
</pre>
<p>
<h1>cons</h1>
<pre>
> (cons a b)
(a . b)
</pre>
<p>
<h1>contract</h1>
<p>
Form: contract12, contract13, contract23, etc.
For example (contract12 x) contracts, or sums over,
the first and second indices.
<pre>
> (setq A (sum
(product a (tensor x x))
(product b (tensor x y))
(product c (tensor y x))
(product d (tensor y y))
))
> (contract12 A)
(sum a d)
</pre>
<p>
<h1>cos</h1>
<pre>
> (derivative (cos x) x)
(product -1 (sin x))
</pre>
<p>
<h1>COS</h1>
<p>
This function returns the exponential form of the cosine function.
<pre>
> (printcars (COS x))
sum
(product 1/2 (power e (product -1 i x)))
(product 1/2 (power e (product i x)))
</pre>
<p>
<h1>define</h1>
<pre>
> (define foo (cons arg2 arg1))
> (foo a b)
(b . a)
> foo
(cons arg2 arg1)
</pre>
<p>
<h1>derivative</h1>
<pre>
> (derivative (power x 2) x)
(product 2 x)
</pre>
<p>
<h1>determinant</h1>
<p>
see adjunct
<p>
<h1>dot</h1>
<p>
The dot function returns the inner product of scalars and tensors.
It is equivalent to an outer product followed by a contraction on
the inner indices.
<pre>
> (setq A (sum (product A11 (tensor 1 1)) (product A22 (tensor 2 2))))
> (setq X (sum (product X1 (tensor 1)) (product X2 (tensor 2))))
> (setq AX1 (dot A X))
> (setq AX2 (contract23 (product A X)))
> (equal AX1 AX2)
t
> (printcars AX1)
sum
(product A11 X1 (tensor 1))
(product A22 X2 (tensor 2))
</pre>
<p>
The arguments are multiplied left to right,
i.e. (dot a b c) = (dot (dot a b) c).
<p>
<h1>e</h1>
<pre>
> (derivative (power e x) x)
(power e x)
</pre>
<p>
<h1>equal</h1>
<pre>
> (equal a a)
t
</pre>
<p>
<h1>eval</h1>
<pre>
> (setq foo (quote (sum a a)))
> foo
(sum a a)
> (eval foo)
(product 2 a)
</pre>
<p>
<h1>exit</h1>
<p>
Exit simple lisp and return to the shell.
Control-C also does this.
<pre>
> (exit)
%
</pre>
<p>
<h1>exp</h1>
<pre>
> (exp x)
(power e x)
</pre>
<p>
<h1>gc</h1>
<p>
Normally, garbage collection occurs when simple lisp runs
out of memory.
The gc function causes garbage collection to occur immediately.
It returns the number of free cells, 1 cell = 12 bytes.
<pre>
> (gc)
496053
</pre>
<p>
<h1>goto</h1>
<pre>
> (define foo (prog (k)
(setq k 1)
loop
(print k)
(setq k (sum k 1))
(cond ((lessp k 4) (goto loop)))
))
> (foo)
1
2
3
</pre>
<p>
<h1>greaterp</h1>
<pre>
> (greaterp 1 0)
t
> (greaterp 0 1)
nil
</pre>
<p>
<h1>i</h1>
<p>
The symbol "i" represents the square root of minus one.
<pre>
> (product i i)
-1
</pre>
<p>
<h1>integerp</h1>
<p>
Returns t if the argument is an integer, nil otherwise.
<pre>
> (integerp 2)
t
> (integerp 2/3)
nil
</pre>
<p>
<h1>integral</h1>
<pre>
> (integral (power x 2) x)
(product 1/3 (power x 3))
</pre>
<p>
The integral function uses a list of expression forms,
much like a table of integrals.
To extend the capability of the integral function,
refer to the file "startup" and follow suit with "add-integral".
<p>
<h1>laguerre</h1>
<p>
See the "hydrogen atom wave functions" example.
<p>
<h1>laplacian</h1>
<p>
See the "hydrogen atom wave functions" example.
<p>
<h1>length</h1>
<p>
Returns the number of cars in a list.
<pre>
> (length (list a b c))
3
</pre>
<p>
<h1>lessp</h1>
<pre>
> (lessp 0 1)
t
> (lessp 1 0)
nil
</pre>
<p>
<h1>list</h1>
<pre>
> (list a b c)
(a b c)
</pre>
<p>
<h1>not</h1>
<pre>
> (not nil)
t
</pre>
<p>
<h1>null</h1>
<pre>
> (null nil)
t
</pre>
<p>
<h1>numberp</h1>
<pre>
> (numberp 1)
t
</pre>
<p>
<h1>or</h1>
<pre>
> (or nil t nil)
t
> (or nil nil nil)
nil
</pre>
<p>
<h1>power</h1>
<pre>
> (power a (sum b c))
(product (power a b) (power a c))
</pre>
<p>
<h1>print</h1>
<pre>
> (print "hello")
hello
</pre>
<p>
<h1>printcars</h1>
<pre>
> (printcars (list a b c))
a
b
c
</pre>
<p>
<h1>product</h1>
<pre>
> (product a b a)
(product b (power a 2))
</pre>
<p>
The "product" function expands products of sums.
When applied to tensors, the result is an outer product.
<pre>
> (setq A (sum
(product a11 (tensor 1 1))
(product a12 (tensor 1 2))
(product a21 (tensor 2 1))
(product a22 (tensor 2 2))
))
> (setq X (sum
(product x1 (tensor 1))
(product x2 (tensor 2))
))
> (printcars (product A X))
sum
(product a11 x1 (tensor 1 1 1))
(product a11 x2 (tensor 1 1 2))
(product a12 x1 (tensor 1 2 1))
(product a12 x2 (tensor 1 2 2))
(product a21 x1 (tensor 2 1 1))
(product a21 x2 (tensor 2 1 2))
(product a22 x1 (tensor 2 2 1))
(product a22 x2 (tensor 2 2 2))
</pre>
<p>
The more familiar inner product is obtained by contraction.
<pre>
> (printcars (contract23 (product A X)))
sum
(product a11 x1 (tensor 1))
(product a12 x2 (tensor 1))
(product a21 x1 (tensor 2))
(product a22 x2 (tensor 2))
</pre>
<p>
<h1>prog</h1>
<p>
Use "prog" when more than one expression must be evaluated in a function.
<pre>
> (define foo (prog ()
(print arg1)
(print arg2)
))
> (foo a b)
a
b
</pre>
<p>
<h1>quote</h1>
<p>
Quote means "don't evaluate."
<pre>
> (quote (sum a a))
(sum a a)
</pre>
<p>
An apostrophe does the same thing.
<pre>
> '(sum a a)
(sum a a)
</pre>
<p>
<h1>return</h1>
<pre>
> (define foo (prog () (return "hello")))
> (foo)
hello
</pre>
<p>
<h1>run</h1>
<p>
The "run" function evaluates the expressions in a file.
<pre>
> (run "example1")
E=K+V for psi5?
t
</pre>
<p>
<h1>setq</h1>
<pre>
> (setq foo 1)
> foo
1
</pre>
<p>
<h1>sin</h1>
<pre>
> (derivative (sin x) x)
(cos x)
</pre>
<p>
<h1>SIN</h1>
<p>
The SIN function returns the exponential form of the sine function.
In some cases it is better to use SIN and COS because many
trigonometric simplifications occur automatically.
<pre>
> (printcars (SIN x))
sum
(product -1/2 i (power e (product i x)))
(product 1/2 i (power e (product -1 i x)))
</pre>
<pre>
> (sum (power (COS x) 2) (power (SIN x) 2))
1
</pre>
<p>
<h1>sum</h1>
<pre>
> (sum a b a)
(sum b (product 2 a))
</pre>
<p>
<h1>subst</h1>
<p>
(subst a b c) means substitute a for b wherever it appears in c.
<pre>
> (subst a b (list a b c))
(a a c)
</pre>
<p>
<h1>tensor</h1>
<pre>
> (product (tensor x) (tensor y))
(tensor x y)
> (product (tensor y) (tensor x))
(tensor y x)
</pre>
<p>
<h1>transpose</h1>
<p>
Form: transpose12, transpose13, transpose23, etc.
For example (transpose12 x) transposes the first and second indices.
<pre>
> (setq A (sum
(product a (tensor x x))
(product b (tensor x y))
(product c (tensor y x))
(product d (tensor y y))
))
> (printcars (transpose12 A))
sum
(product a (tensor x x))
(product b (tensor y x))
(product c (tensor x y))
(product d (tensor y y))
</pre>
<p>
<h1>zerop</h1>
<pre>
> (zerop 0)
t
> (zerop 1)
nil
</pre>

303
lisp/robbins.lisp 100644
View File

@ -0,0 +1,303 @@
; December 7, 2001
; See the paper "Solutions of the Robbins Problem" by William McCune.
; Robbins equation (7)
(setq E7 (eq (n (sum (n (sum (n x) y)) (n (sum x y)))) y))
; From this derive the following:
; n(n(3x)+x)+2x = 2x
; STEP 10 ---------------------------------------------------------------------
; with (7), let x be n(x)+y and y be n(x+y)
(setq E10 (subst Y y E7))
(setq E10 (subst (sum (n x) y) x E10))
(setq E10 (eval (subst (n (sum x y)) Y E10)))
; simplify with (7)
(setq E10 (eval (subst (caddr E7) (cadr E7) E10)))
; n(n(n(x+y)+n(x)+y)+y) = n(x+y) ?
(setq tmp (eq (n (sum (n (sum (n (sum x y)) (n x) y)) y)) (n (sum x y))))
(equal E10 tmp)
; STEP 11 ---------------------------------------------------------------------
; with (7), let y be n(n(x)+y) and x be x+y
(setq E11 (subst X x E7))
(setq E11 (subst (n (sum (n x) y)) y E11))
(setq E11 (eval (subst (sum x y) X E11)))
; simplify with (7)
(setq E11 (eval (subst (caddr E7) (cadr E7) E11)))
; n(n(n(n(x)+y)+x+y)+y) = n(n(x)+y) ?
(setq tmp (eq (n (sum (n (sum (n (sum (n x) y)) x y)) y)) (n (sum (n x) y))))
(equal E11 tmp)
; STEP 29 ---------------------------------------------------------------------
; with (7), let x be n(n(x)+y)+x+y and y be y
(setq E29 (eval (subst (sum (n (sum (n x) y)) x y) x E7)))
; simplify with (11)
(setq E29 (eval (subst (caddr E11) (cadr E11) E29)))
; n(n(n(n(x)+y)+x+2y)+n(n(x)+y)) = y ?
(setq tmp (eq (n (sum (n (sum (n (sum (n x) y)) x y y)) (n (sum (n x) y)))) y))
(equal E29 tmp)
; STEP 54 ---------------------------------------------------------------------
; with (7), let x be n(n(n(x)+y)+x+2y)+n(n(x)+y) and y be z
(setq E54 (subst z y E7))
(setq tmp (sum (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y (n x)))))
(setq E54 (eval (subst tmp x E54)))
; simplify with (29)
(setq E54 (eval (subst (caddr E29) (cadr E29) E54)))
; n(n(n(n(n(x)+y)+x+2y)+n(n(x)+y)+z)+n(y+z)) = z ?
(setq tmp (eq (n (sum (n (sum y z)) (n (sum z (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y (n x))))))) z))
(equal E54 tmp)
; STEP 217 --------------------------------------------------------------------
; with (7), let x be n(n(n(x)+y)+x+2y)+n(n(x)+y)+z and y be n(y+z)
(setq E217 (subst Y y E7))
(setq tmp (sum z (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y (n x)))))
(setq E217 (subst tmp x E217))
(setq E217 (eval (subst (n (sum y z)) Y E217)))
; simplify with E54
(setq E217 (eval (subst (caddr E54) (cadr E54) E217)))
; n(n(n(n(n(x)+y)+x+2y)+n(n(x)+y)+n(y+z)+z)+z) = n(y+z) ?
(setq tmp (eq (n (sum z (n (sum z (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y z)) (n (sum y (n x))))))) (n (sum y z))))
(equal E217 tmp)
; STEP 674 --------------------------------------------------------------------
; with (7), let y be u and x be n(n(n(n(x)+y)+x+2y)+n(n(x)+y)+n(y+z)+z)+z
(setq E674 (subst u y E7))
(setq tmp (sum z (n (sum z (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y z)) (n (sum y (n x)))))))
(setq E674 (eval (subst tmp x E674)))
; simplify with E217
(setq E674 (eval (subst (caddr E217) (cadr E217) E674)))
; n(n(n(n(n(n(x)+y)+x+2y)+n(n(x)+y)+n(y+z)+z)+z+u)+n(n(y+z)+u)) = u ?
(setq tmp (eq (n (sum (n (sum u z (n (sum z (n (sum x (n (sum y (n x))) (product 2 y))) (n (sum y z)) (n (sum y (n x))))))) (n (sum u (n (sum y z)))))) u))
(equal E674 tmp)
; STEP 6736 -------------------------------------------------------------------
; with (10), let x be 3v and y be n(n(3v)+v)+2v
(setq E10p (subst (product 3 v) x E10))
(setq tmp (sum (n (sum v (n (product 3 v)))) (product 2 v)))
(setq E10p (eval (subst tmp y E10p)))
; with (674), let x be 3v, y be v, z be 2v, and u be n(n(3v)+v)
(setq E674p (subst (product 3 v) x E674))
(setq E674p (subst v y E674p))
(setq E674p (subst (product 2 v) z E674p))
(setq tmp (n (sum v (n (product 3 v)))))
(setq E674p (eval (subst tmp u E674p)))
; simplify with (10')
(setq E6736 (eval (subst (caddr E10p) (cadr E10p) E674p)))
; replace v with x
(setq E6736 (eval (subst x v E6736)))
; n(n(n(n(3x)+x)+n(3x))+n(n(n(3x)+x)+5x)) = n(n(3x)+x) ?
(setq tmp (eq (n (sum (n (sum (n (product 3 x)) (n (sum x (n (product 3 x)))))) (n (sum (n (sum x (n (product 3 x)))) (product 5 x))))) (n (sum x (n (product 3 x))))))
(equal E6736 tmp)
; STEP 8855 -------------------------------------------------------------------
; with (7), let x be n(n(3x)+x)+n(3x) and y be n(n(n(3x)+x)+5x)
(setq E8855 (subst Y y E7))
(setq tmp (sum (n (product 3 x)) (n (sum x (n (product 3 x))))))
(setq E8855 (subst tmp x E8855))
(setq tmp (n (sum (n (sum x (n (product 3 x)))) (product 5 x))))
(setq E8855 (eval (subst tmp Y E8855)))
; simplify with (6736)
(setq E8855 (eval (subst (caddr E6736) (cadr E6736) E8855)))
; n(n(n(3x)+x)+n(n(n(3x)+x)+n(3x)+n(n(n(3x)+x)+5x))) = n(n(n(3x)+x)+5x) ?
(setq tmp (eq (n (sum (n (sum x (n (product 3 x)))) (n (sum (n (product 3 x)) (n (sum x (n (product 3 x)))) (n (sum (n (sum x (n (product 3 x)))) (product 5 x))))))) (n (sum (n (sum x (n (product 3 x)))) (product 5 x)))))
(equal E8855 tmp)
; with (54), let x be 3x, z be n(3x), and y be x
(setq tmp (subst (product 3 x) x E54))
(setq tmp (subst (n (product 3 x)) z tmp))
(setq tmp (eval (subst x y tmp)))
; simplify
(setq E8855 (subst (caddr tmp) (cadr tmp) E8855))
; flip
(setq E8855 (eq (caddr E8855) (cadr E8855)))
; n(n(n(3x)+x)+5x) = n(3x) ?
(setq tmp (eq (n (sum (n (sum x (n (product 3 x)))) (product 5 x))) (n (product 3 x))))
(equal E8855 tmp)
; STEP 8865 -------------------------------------------------------------------
; with (7), let y be n(n(3x)+x)+2x and x be 3x
(setq E8865 (subst X x E7))
(setq tmp (sum (n (sum x (n (product 3 x)))) (product 2 x)))
(setq E8865 (subst tmp y E8865))
(setq E8865 (eval (subst (product 3 x) X E8865)))
; simplify with (8855)
(setq E8865 (subst (caddr E8855) (cadr E8855) E8865))
(setq E8865 (eval E8865))
; n(n(n(n(3x)+x)+n(3x)+2x)+n(3x)) = n(n(3x)+x)+2x ?
(setq tmp (eq (n (sum (n (product 3 x)) (n (sum (n (product 3 x)) (n (sum x (n (product 3 x)))) (product 2 x))))) (sum (n (sum x (n (product 3 x)))) (product 2 x))))
(equal E8865 tmp)
; STEP 8866 -------------------------------------------------------------------
; with (7), let x be n(n(3x)+x)+4x and y be x
(setq tmp (sum (n (sum x (n (product 3 x)))) (product 4 x)))
(setq A2 (subst tmp x E7))
(setq A2 (eval (subst x y A2)))
; simplify with (8855)
(setq A2 (eval (subst (caddr E8855) (cadr E8855) A2)))
; with (11), let x be 3x and y be x
(setq A3 (subst (product 3 x) x E11))
(setq A3 (eval (subst x y A3)))
; simplify A2 with A3
(setq E8866 (eval (subst (caddr A3) (cadr A3) A2)))
; n(n(n(3x)+x)+n(3x)) = x ?
(setq tmp (eq (n (sum (n (product 3 x)) (n (sum x (n (product 3 x)))))) x))
(equal E8866 tmp)
; STEP 8870 -------------------------------------------------------------------
; with (7), let x = n(n(3x)+x)+n(3x)
(setq tmp (sum (n (product 3 x)) (n (sum x (n (product 3 x))))))
(setq E8870 (eval (subst tmp x E7)))
; simplify with (8866)
(setq E8870 (eval (subst (caddr E8866) (cadr E8866) E8870)))
; n(n(n(n(3x)+x)+n(3x)+y)+n(x+y)) = y ?
(setq tmp (eq (n (sum (n (sum x y)) (n (sum y (n (product 3 x)) (n (sum x (n (product 3 x)))))))) y))
(equal E8870 tmp)
; STEP 8871 -------------------------------------------------------------------
; with (8870), let y be 2x
(setq tmp (eval (subst (product 2 x) y E8870)))
; use to simplify (8865)
(setq E8871 (eval (subst (caddr tmp) (cadr tmp) E8865)))
; flip
(setq E8871 (eq (caddr E8871) (cadr E8871)))
; n(n(3x)+x)+2x = 2x ?
(setq tmp (eq (sum (n (sum x (n (product 3 x)))) (product 2 x)) (product 2 x)))
(equal E8871 tmp)

612
lisp/startup.lisp 100644
View File

@ -0,0 +1,612 @@
; lisp reads this file on startup
(define minus (product -1 arg))
(define sqrt (power arg 1/2))
(define exp (power e arg))
(define complex (sum arg1 (product i arg2)))
(define complex-conjugate (eval (subst (product -1 i) i arg)))
(define magnitude2 (product arg (complex-conjugate arg)))
(define magnitude (sqrt (magnitude2 arg)))
(define zerop (equal arg 0))
(define contract12 (contract 1 2 arg))
(define contract13 (contract 1 3 arg))
(define contract14 (contract 1 4 arg))
(define contract15 (contract 1 5 arg))
(define contract16 (contract 1 6 arg))
(define contract23 (contract 2 3 arg))
(define contract24 (contract 2 4 arg))
(define contract25 (contract 2 5 arg))
(define contract26 (contract 2 6 arg))
(define contract34 (contract 3 4 arg))
(define contract35 (contract 3 5 arg))
(define contract36 (contract 3 6 arg))
(define contract45 (contract 4 5 arg))
(define contract46 (contract 4 6 arg))
(define contract56 (contract 5 6 arg))
(define transpose12 (transpose 1 2 arg))
(define transpose13 (transpose 1 3 arg))
(define transpose14 (transpose 1 4 arg))
(define transpose15 (transpose 1 5 arg))
(define transpose16 (transpose 1 6 arg))
(define transpose23 (transpose 2 3 arg))
(define transpose24 (transpose 2 4 arg))
(define transpose25 (transpose 2 5 arg))
(define transpose26 (transpose 2 6 arg))
(define transpose34 (transpose 3 4 arg))
(define transpose35 (transpose 3 5 arg))
(define transpose36 (transpose 3 6 arg))
(define transpose45 (transpose 4 5 arg))
(define transpose46 (transpose 4 6 arg))
(define transpose56 (transpose 5 6 arg))
(define caar (car (car arg)))
(define cadr (car (cdr arg)))
(define cdar (cdr (car arg)))
(define cddr (cdr (cdr arg)))
(define caaar (car (car (car arg))))
(define caadr (car (car (cdr arg))))
(define cadar (car (cdr (car arg))))
(define caddr (car (cdr (cdr arg))))
(define cdaar (cdr (car (car arg))))
(define cdadr (cdr (car (cdr arg))))
(define cddar (cdr (cdr (car arg))))
(define cdddr (cdr (cdr (cdr arg))))
(define caaaar (car (car (car (car arg)))))
(define caaadr (car (car (car (cdr arg)))))
(define caadar (car (car (cdr (car arg)))))
(define caaddr (car (car (cdr (cdr arg)))))
(define cadaar (car (cdr (car (car arg)))))
(define cadadr (car (cdr (car (cdr arg)))))
(define caddar (car (cdr (cdr (car arg)))))
(define cadddr (car (cdr (cdr (cdr arg)))))
(define cdaaar (cdr (car (car (car arg)))))
(define cdaadr (cdr (car (car (cdr arg)))))
(define cdadar (cdr (car (cdr (car arg)))))
(define cdaddr (cdr (car (cdr (cdr arg)))))
(define cddaar (cdr (cdr (car (car arg)))))
(define cddadr (cdr (cdr (car (cdr arg)))))
(define cdddar (cdr (cdr (cdr (car arg)))))
(define cddddr (cdr (cdr (cdr (cdr arg)))))
(define COS (sum
(product 1/2 (exp (product i arg)))
(product 1/2 (exp (product -1 i arg)))
))
(define SIN (sum
(product -1/2 i (exp (product i arg)))
(product 1/2 i (exp (product -1 i arg)))
))
(define COSH (sum
(product 1/2 (exp arg))
(product 1/2 (exp (product -1 arg)))
))
(define SINH (sum
(product 1/2 (exp arg))
(product -1/2 (exp (product -1 arg)))
))
(define adjunct (cond
(arg5 (adjunct4 arg1 arg2 arg3 arg4 arg5))
(arg4 (adjunct3 arg1 arg2 arg3 arg4))
(arg3 (adjunct2 arg1 arg2 arg3))
(t nil)
))
(define adjunct2 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(return (sum
(product +1 temp11 (tensor arg2 arg2))
(product -1 temp01 (tensor arg2 arg3))
(product -1 temp10 (tensor arg3 arg2))
(product +1 temp00 (tensor arg3 arg3))
))
))
(define adjunct3 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp02 (component arg arg2 arg4))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(setq temp12 (component arg arg3 arg4))
(setq temp20 (component arg arg4 arg2))
(setq temp21 (component arg arg4 arg3))
(setq temp22 (component arg arg4 arg4))
(return (sum
(product +1 temp11 temp22 (tensor arg2 arg2))
(product -1 temp21 temp12 (tensor arg2 arg2))
(product -1 temp10 temp22 (tensor arg3 arg2))
(product +1 temp20 temp12 (tensor arg3 arg2))
(product +1 temp10 temp21 (tensor arg4 arg2))
(product -1 temp20 temp11 (tensor arg4 arg2))
(product -1 temp01 temp22 (tensor arg2 arg3))
(product +1 temp21 temp02 (tensor arg2 arg3))
(product +1 temp00 temp22 (tensor arg3 arg3))
(product -1 temp20 temp02 (tensor arg3 arg3))
(product -1 temp00 temp21 (tensor arg4 arg3))
(product +1 temp20 temp01 (tensor arg4 arg3))
(product +1 temp01 temp12 (tensor arg2 arg4))
(product -1 temp11 temp02 (tensor arg2 arg4))
(product -1 temp00 temp12 (tensor arg3 arg4))
(product +1 temp10 temp02 (tensor arg3 arg4))
(product +1 temp00 temp11 (tensor arg4 arg4))
(product -1 temp10 temp01 (tensor arg4 arg4))
))
))
(define adjunct4 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp02 (component arg arg2 arg4))
(setq temp03 (component arg arg2 arg5))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(setq temp12 (component arg arg3 arg4))
(setq temp13 (component arg arg3 arg5))
(setq temp20 (component arg arg4 arg2))
(setq temp21 (component arg arg4 arg3))
(setq temp22 (component arg arg4 arg4))
(setq temp23 (component arg arg4 arg5))
(setq temp30 (component arg arg5 arg2))
(setq temp31 (component arg arg5 arg3))
(setq temp32 (component arg arg5 arg4))
(setq temp33 (component arg arg5 arg5))
(return (sum
(product +1 temp11 temp22 temp33 (tensor arg2 arg2))
(product -1 temp11 temp32 temp23 (tensor arg2 arg2))
(product -1 temp21 temp12 temp33 (tensor arg2 arg2))
(product +1 temp21 temp32 temp13 (tensor arg2 arg2))
(product +1 temp31 temp12 temp23 (tensor arg2 arg2))
(product -1 temp31 temp22 temp13 (tensor arg2 arg2))
(product -1 temp10 temp22 temp33 (tensor arg3 arg2))
(product +1 temp10 temp32 temp23 (tensor arg3 arg2))
(product +1 temp20 temp12 temp33 (tensor arg3 arg2))
(product -1 temp20 temp32 temp13 (tensor arg3 arg2))
(product -1 temp30 temp12 temp23 (tensor arg3 arg2))
(product +1 temp30 temp22 temp13 (tensor arg3 arg2))
(product +1 temp10 temp21 temp33 (tensor arg4 arg2))
(product -1 temp10 temp31 temp23 (tensor arg4 arg2))
(product -1 temp20 temp11 temp33 (tensor arg4 arg2))
(product +1 temp20 temp31 temp13 (tensor arg4 arg2))
(product +1 temp30 temp11 temp23 (tensor arg4 arg2))
(product -1 temp30 temp21 temp13 (tensor arg4 arg2))
(product -1 temp10 temp21 temp32 (tensor arg5 arg2))
(product +1 temp10 temp31 temp22 (tensor arg5 arg2))
(product +1 temp20 temp11 temp32 (tensor arg5 arg2))
(product -1 temp20 temp31 temp12 (tensor arg5 arg2))
(product -1 temp30 temp11 temp22 (tensor arg5 arg2))
(product +1 temp30 temp21 temp12 (tensor arg5 arg2))
(product -1 temp01 temp22 temp33 (tensor arg2 arg3))
(product +1 temp01 temp32 temp23 (tensor arg2 arg3))
(product +1 temp21 temp02 temp33 (tensor arg2 arg3))
(product -1 temp21 temp32 temp03 (tensor arg2 arg3))
(product -1 temp31 temp02 temp23 (tensor arg2 arg3))
(product +1 temp31 temp22 temp03 (tensor arg2 arg3))
(product +1 temp00 temp22 temp33 (tensor arg3 arg3))
(product -1 temp00 temp32 temp23 (tensor arg3 arg3))
(product -1 temp20 temp02 temp33 (tensor arg3 arg3))
(product +1 temp20 temp32 temp03 (tensor arg3 arg3))
(product +1 temp30 temp02 temp23 (tensor arg3 arg3))
(product -1 temp30 temp22 temp03 (tensor arg3 arg3))
(product -1 temp00 temp21 temp33 (tensor arg4 arg3))
(product +1 temp00 temp31 temp23 (tensor arg4 arg3))
(product +1 temp20 temp01 temp33 (tensor arg4 arg3))
(product -1 temp20 temp31 temp03 (tensor arg4 arg3))
(product -1 temp30 temp01 temp23 (tensor arg4 arg3))
(product +1 temp30 temp21 temp03 (tensor arg4 arg3))
(product +1 temp00 temp21 temp32 (tensor arg5 arg3))
(product -1 temp00 temp31 temp22 (tensor arg5 arg3))
(product -1 temp20 temp01 temp32 (tensor arg5 arg3))
(product +1 temp20 temp31 temp02 (tensor arg5 arg3))
(product +1 temp30 temp01 temp22 (tensor arg5 arg3))
(product -1 temp30 temp21 temp02 (tensor arg5 arg3))
(product +1 temp01 temp12 temp33 (tensor arg2 arg4))
(product -1 temp01 temp32 temp13 (tensor arg2 arg4))
(product -1 temp11 temp02 temp33 (tensor arg2 arg4))
(product +1 temp11 temp32 temp03 (tensor arg2 arg4))
(product +1 temp31 temp02 temp13 (tensor arg2 arg4))
(product -1 temp31 temp12 temp03 (tensor arg2 arg4))
(product -1 temp00 temp12 temp33 (tensor arg3 arg4))
(product +1 temp00 temp32 temp13 (tensor arg3 arg4))
(product +1 temp10 temp02 temp33 (tensor arg3 arg4))
(product -1 temp10 temp32 temp03 (tensor arg3 arg4))
(product -1 temp30 temp02 temp13 (tensor arg3 arg4))
(product +1 temp30 temp12 temp03 (tensor arg3 arg4))
(product +1 temp00 temp11 temp33 (tensor arg4 arg4))
(product -1 temp00 temp31 temp13 (tensor arg4 arg4))
(product -1 temp10 temp01 temp33 (tensor arg4 arg4))
(product +1 temp10 temp31 temp03 (tensor arg4 arg4))
(product +1 temp30 temp01 temp13 (tensor arg4 arg4))
(product -1 temp30 temp11 temp03 (tensor arg4 arg4))
(product -1 temp00 temp11 temp32 (tensor arg5 arg4))
(product +1 temp00 temp31 temp12 (tensor arg5 arg4))
(product +1 temp10 temp01 temp32 (tensor arg5 arg4))
(product -1 temp10 temp31 temp02 (tensor arg5 arg4))
(product -1 temp30 temp01 temp12 (tensor arg5 arg4))
(product +1 temp30 temp11 temp02 (tensor arg5 arg4))
(product -1 temp01 temp12 temp23 (tensor arg2 arg5))
(product +1 temp01 temp22 temp13 (tensor arg2 arg5))
(product +1 temp11 temp02 temp23 (tensor arg2 arg5))
(product -1 temp11 temp22 temp03 (tensor arg2 arg5))
(product -1 temp21 temp02 temp13 (tensor arg2 arg5))
(product +1 temp21 temp12 temp03 (tensor arg2 arg5))
(product +1 temp00 temp12 temp23 (tensor arg3 arg5))
(product -1 temp00 temp22 temp13 (tensor arg3 arg5))
(product -1 temp10 temp02 temp23 (tensor arg3 arg5))
(product +1 temp10 temp22 temp03 (tensor arg3 arg5))
(product +1 temp20 temp02 temp13 (tensor arg3 arg5))
(product -1 temp20 temp12 temp03 (tensor arg3 arg5))
(product -1 temp00 temp11 temp23 (tensor arg4 arg5))
(product +1 temp00 temp21 temp13 (tensor arg4 arg5))
(product +1 temp10 temp01 temp23 (tensor arg4 arg5))
(product -1 temp10 temp21 temp03 (tensor arg4 arg5))
(product -1 temp20 temp01 temp13 (tensor arg4 arg5))
(product +1 temp20 temp11 temp03 (tensor arg4 arg5))
(product +1 temp00 temp11 temp22 (tensor arg5 arg5))
(product -1 temp00 temp21 temp12 (tensor arg5 arg5))
(product -1 temp10 temp01 temp22 (tensor arg5 arg5))
(product +1 temp10 temp21 temp02 (tensor arg5 arg5))
(product +1 temp20 temp01 temp12 (tensor arg5 arg5))
(product -1 temp20 temp11 temp02 (tensor arg5 arg5))
))
))
(define determinant (cond
(arg5 (determinant4 arg1 arg2 arg3 arg4 arg5))
(arg4 (determinant3 arg1 arg2 arg3 arg4))
(arg3 (determinant2 arg1 arg2 arg3))
(t nil)
))
(define determinant2 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(return (sum
(product +1 temp00 temp11)
(product -1 temp01 temp10)
))
))
(define determinant3 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp02 (component arg arg2 arg4))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(setq temp12 (component arg arg3 arg4))
(setq temp20 (component arg arg4 arg2))
(setq temp21 (component arg arg4 arg3))
(setq temp22 (component arg arg4 arg4))
(return (sum
(product +1 temp00 temp11 temp22)
(product -1 temp00 temp21 temp12)
(product -1 temp10 temp01 temp22)
(product +1 temp10 temp21 temp02)
(product +1 temp20 temp01 temp12)
(product -1 temp20 temp11 temp02)
))
))
(define determinant4 (prog ()
(setq temp00 (component arg arg2 arg2))
(setq temp01 (component arg arg2 arg3))
(setq temp02 (component arg arg2 arg4))
(setq temp03 (component arg arg2 arg5))
(setq temp10 (component arg arg3 arg2))
(setq temp11 (component arg arg3 arg3))
(setq temp12 (component arg arg3 arg4))
(setq temp13 (component arg arg3 arg5))
(setq temp20 (component arg arg4 arg2))
(setq temp21 (component arg arg4 arg3))
(setq temp22 (component arg arg4 arg4))
(setq temp23 (component arg arg4 arg5))
(setq temp30 (component arg arg5 arg2))
(setq temp31 (component arg arg5 arg3))
(setq temp32 (component arg arg5 arg4))
(setq temp33 (component arg arg5 arg5))
(return (sum
(product +1 temp00 temp11 temp22 temp33)
(product -1 temp00 temp11 temp32 temp23)
(product -1 temp00 temp21 temp12 temp33)
(product +1 temp00 temp21 temp32 temp13)
(product +1 temp00 temp31 temp12 temp23)
(product -1 temp00 temp31 temp22 temp13)
(product -1 temp10 temp01 temp22 temp33)
(product +1 temp10 temp01 temp32 temp23)
(product +1 temp10 temp21 temp02 temp33)
(product -1 temp10 temp21 temp32 temp03)
(product -1 temp10 temp31 temp02 temp23)
(product +1 temp10 temp31 temp22 temp03)
(product +1 temp20 temp01 temp12 temp33)
(product -1 temp20 temp01 temp32 temp13)
(product -1 temp20 temp11 temp02 temp33)
(product +1 temp20 temp11 temp32 temp03)
(product +1 temp20 temp31 temp02 temp13)
(product -1 temp20 temp31 temp12 temp03)
(product -1 temp30 temp01 temp12 temp23)
(product +1 temp30 temp01 temp22 temp13)
(product +1 temp30 temp11 temp02 temp23)
(product -1 temp30 temp11 temp22 temp03)
(product -1 temp30 temp21 temp02 temp13)
(product +1 temp30 temp21 temp12 temp03)
))
))
; P (x) = 1
; 0
;
; P (x) = x
; 1
;
; n P (x) = (2n - 1) x P (x) - (n - 1) P (x)
; n n-1 n-2
;
; (legendre x n)
(define legendre (cond
((equal arg2 0) 1)
((equal arg2 1) arg1)
(t (product (power arg2 -1) (sum
(product (sum (product 2 arg2) -1) arg1 (legendre arg1 (sum arg2 -1)))
(product -1 (sum arg2 -1) (legendre arg1 (sum arg2 -2)))
)))
))
(define nth-derivative (cond
((zerop arg3) arg1)
(t (derivative (nth-derivative arg1 arg2 (sum arg3 -1)) arg2))
))
; L (x, a) = 1
; 0
;
; L (x, a) = 1 + a - x
; 1
;
; n L (x, a) = (2n + a - 1 - x) L (x, a) + (1 - n - a) L (x, a)
; n n-1 n-2
;
; (laguerre x n a)
;
; only works for n <= 6 due to 32-bit integers
(define laguerre (cond
((equal arg2 0) 1)
((equal arg2 1) (sum 1 arg3 (product -1 arg1)))
(t (product (power arg2 -1) (sum
(product (sum (product 2 arg2) arg3 -1 (product -1 arg1)) (laguerre arg1 (sum arg2 -1) arg3))
(product (sum 1 (product -1 arg2) (product -1 arg3)) (laguerre arg1 (sum arg2 -2) arg3))
)))
))
; -a x n n n+a -x
; L(x, n, a) = (1/n!) x e (d /dx ) (x e )
(define laguerre2 (product
(power (factorial arg2) -1)
(power arg1 (product -1 arg3))
(exp arg)
(nth-derivative
(product (power arg1 (sum arg2 arg3)) (exp (product -1 arg)))
arg1
arg2
)
))
(define absval (cond
((not (numberp arg)) nil)
((lessp arg 0) (product -1 arg))
(t arg)
))
(define factorial (cond
((zerop arg) 1)
(t (product arg (factorial (sum arg -1))))
))
(define laplacian (sum
(product
(power r -2)
(derivative (product (power r 2) (derivative arg r)) r)
)
(product
(power r -2)
(power (sin theta) -1)
(derivative (product (sin theta) (derivative arg theta)) theta)
)
(product
(power r -2)
(power (sin theta) -2)
(derivative (derivative arg phi) phi)
)
))
; arg1=n arg2=x
(define hermite (product
(power -1 arg1)
(power e (power arg2 2))
(nth-derivative (power e (product -1 (power arg2 2))) arg2 arg1)
))
; generic metric
(setq gdd (sum
(product (g00) (tensor x0 x0))
(product (g11) (tensor x1 x1))
(product (g22) (tensor x2 x2))
(product (g33) (tensor x3 x3))
))
(setq eta (sum
(product -1 (tensor x0 x0))
(product +1 (tensor x1 x1))
(product +1 (tensor x2 x2))
(product +1 (tensor x3 x3))
))
(define epsilon (sum
(product +1 (tensor x0 x1 x2 x3)) ; 1
(product -1 (tensor x0 x1 x3 x2)) ; 2
(product -1 (tensor x0 x2 x1 x3)) ; 3
(product +1 (tensor x0 x2 x3 x1)) ; 4
(product +1 (tensor x0 x3 x1 x2)) ; 5
(product -1 (tensor x0 x3 x2 x1)) ; 6
(product -1 (tensor x1 x0 x2 x3)) ; 7
(product +1 (tensor x1 x0 x3 x2)) ; 8
(product +1 (tensor x1 x2 x0 x3)) ; 9
(product -1 (tensor x1 x2 x3 x0)) ; 10
(product -1 (tensor x1 x3 x0 x2)) ; 11
(product +1 (tensor x1 x3 x2 x0)) ; 12
(product +1 (tensor x2 x0 x1 x3)) ; 13
(product -1 (tensor x2 x0 x3 x1)) ; 14
(product -1 (tensor x2 x1 x0 x3)) ; 15
(product +1 (tensor x2 x1 x3 x0)) ; 16
(product +1 (tensor x2 x3 x0 x1)) ; 17
(product -1 (tensor x2 x3 x1 x0)) ; 18
(product -1 (tensor x3 x0 x1 x2)) ; 19
(product +1 (tensor x3 x0 x2 x1)) ; 20
(product +1 (tensor x3 x1 x0 x2)) ; 21
(product -1 (tensor x3 x1 x2 x0)) ; 22
(product -1 (tensor x3 x2 x0 x1)) ; 23
(product +1 (tensor x3 x2 x1 x0)) ; 24
))
(define gradient (sum
(product (derivative arg x0) (tensor x0))
(product (derivative arg x1) (tensor x1))
(product (derivative arg x2) (tensor x2))
(product (derivative arg x3) (tensor x3))
))
; compute g, guu, GAMUDD, RUDDD, RDD, R, GDD, GUD and GUU from gdd
(define gr (prog (tmp tmp1 tmp2)
(setq g (determinant gdd x0 x1 x2 x3))
(setq guu (product (power g -1) (adjunct gdd x0 x1 x2 x3)))
; connection coefficients
(setq tmp (gradient gdd))
(setq GAMUDD (contract23 (product 1/2 guu (sum
tmp
(transpose23 tmp)
(product -1 (transpose12 (transpose23 tmp)))
))))
; riemann tensor
(setq tmp1 (gradient GAMUDD))
(setq tmp2 (contract24 (product GAMUDD GAMUDD)))
(setq RUDDD (sum
(transpose34 tmp1)
(product -1 tmp1)
(transpose23 tmp2)
(product -1 (transpose34 (transpose23 tmp2)))
))
(setq RDD (contract13 RUDDD)) ; ricci tensor
(setq R (contract12 (contract23 (product guu RDD)))) ; ricci scalar
(setq GDD (sum RDD (product -1/2 gdd R))) ; einstein tensor
(setq GUD (contract23 (product guu GDD))) ; raise 1st index
(setq GUU (contract23 (product GUD guu))) ; raise 2nd index
))
; covariant derivative of a vector
(define covariant-derivative (sum
(gradient arg)
(contract13 (product arg GAMUDD))
))
(define covariant-derivative-of-up-up (prog (tmp)
(setq tmp (product arg GAMUDD))
(return (sum
(gradient arg)
(transpose12 (contract14 tmp))
(contract24 tmp)
))
))
(define covariant-derivative-of-up-down (prog (tmp)
(setq tmp (product arg GAMUDD))
(return (sum
(gradient arg)
(transpose12 (contract14 tmp))
(product -1 (contract23 tmp))
))
))
(define covariant-derivative-of-down-down (prog (tmp)
(setq tmp (product arg GAMUDD))
(return (sum
(gradient arg)
(product -1 (transpose12 (contract13 tmp)))
(product -1 (contract23 tmp))
))
))
(define add-integral (prog (tmp)
(setq tmp arg)
(setq tmp (subst meta-a a tmp))
(setq tmp (subst meta-n n tmp))
(setq tmp (subst meta-x x tmp))
(setq integral-list (append integral-list (cons tmp nil)))
))
(add-integral (list
'(power x -1)
'(log x)
))
(add-integral (list
'(power x n)
'(product (power (sum n 1) -1) (power x (sum n 1)))
'(numberp n)
'(not (equal n -1))
))
(add-integral (list
'(power e (product a x))
'(product (power a -1) (power e (product a x)))
))
; n ax -1 n ax -1 n-1 ax
; x e -> a x e - n a (integral x e )
;
; integer n, n > 0
(add-integral (list
'(product
(power x n)
(power e (product a x))
)
'(sum
(product
(power a -1)
(power x n)
(power e (product a x))
)
(product
-1
n
(power a -1)
(integral
(product
(power x (sum n -1))
(power e (product a x))
)
x
)
)
)
'(integerp n)
'(greaterp n 0)
))

Some files were not shown because too many files have changed in this diff Show More